1. FAQ

1.1. 开机异常卡死或重启

可能是电源电流不够,板子的工作电压为 5V,工作电流为 500mA 以上,视具体挂载外设而定。

1.2. 查看内置Codec增益所有状态

  • 方法一

amixer contents
  • 方法二

tinymix contents

1.3. 音频输出声音太小

1.3.1. 耳机

查看codec当前左右声道输出增益:

amixer cget name='DAC HPOUT Left Volume'
amixer cget name='DAC HPOUT Right Volume'

根据所需调节前级增益:

amixer cset name='DAC HPMIX Left Volume' 1
amixer cset name='DAC HPMIX Right Volume' 1

根据所需调节后级增益:

amixer cset name='DAC HPOUT Left Volume' 18
amixer cset name='DAC HPOUT Right Volume' 18

调节音量(百分比):

amixer cset name='Master Playback Volume' 40

1.3.2. 喇叭

查看codec当前左右声道输出增益:

amixer cget name='DAC LINEOUT Left Volume'
amixer cget name='DAC LINEOUT Right Volume'

根据所需调节前级增益:

amixer cset name='DAC HPMIX Left Volume' 1
amixer cset name='DAC HPMIX Right Volume' 1

根据所需调节后级增益:

amixer cset name='DAC LINEOUT Left Volume' 3
amixer cset name='DAC LINEOUT Right Volume' 3

调节音量(百分比):

amixer cset name='Master Playback Volume' 40

1.4. 录音

1.4.1. 查看声卡

cat /proc/asound/cards
0 [rockchiprk3308b]: rockchip_rk3308 - rockchip,rk3308b-acodec
                     rockchip,rk3308b-acodec
1 [Audio          ]: USB-Audio - AC108 USB Audio
                     XPowers AND ST AC108 USB Audio at usb-ff440000.usb-1.1, full speed
7 [Loopback       ]: Loopback - Loopback
                     Loopback 1
  • card 0: rk3308b 内置声卡

  • card 1: usb 声卡

  • card 7: aloop 生成的虚拟声卡

1.4.2. 内置codec的mic增益调整

  • Group n

    • Group 0: mic1和mic2

    • Group 1: mic3和mic4

    • Group 2: mic5和mic6

    • Group 3: mic7和mic8

  • “ADC MIC”前缀:表示调节前级MIC PGA线性放大增益

  • “ADC ALC”前缀:表示调节后级ALC线性放大增益

amixer cset name='ADC MIC Group 0 Left Volume'  3   # mic1,range 0->3
amixer cset name='ADC MIC Group 0 Right Volume' 3   # mic2,range 0->3
amixer cset name='ADC ALC Group 0 Left Volume'  13  # mic1,range 0->31
amixer cset name='ADC ALC Group 0 Right Volume' 13  # mic2,range 0->31

采集8通道声卡0音频数据:

arecord -D hw:0,0 -c 8 -r 16000 -f S16_LE test.wav

采样率大于16000hz时,录音命令要加上--period-size=1024 --buffer-size=4096参数,例如:

arecord -D hw:0,0 -c 8 -r 44100 -f S16_LE --period-size=1024 --buffer-size=4096 test.wav

1.4.3. 内置codec的mic录音没声音

  • 使用有源MIC

  • 使用无源MIC

    • 检查是否有接偏置电压?(偏置电压可使用MICBIAS1或者MICBIAS2)

    • 参考电路

      img/IHC-3308GW/micbias.png

1.5. SoX - Sound eXchange

提取双声道音频文件中单个声道的数据并作为单声道音频输出

sox stereo.wav left.wav  remix 1 	#提取左声道音频
sox stereo.wav right.wav remix 2 	#提取右声道音频

1.6. 语音识别开发

关于ROC-RK3308B-CC-PLUS(或者ROC-RK3308B-CC)开源主板支持的语音套件,客户如需更深入的业务定制合作,需要与我司或者对应的语音公司进行商务沟通。

1.7. 显示屏

  • 支持RGB接口

    • RGB888

    • RGB666

    • RGB565

  • 支持 MCU i80接口

  • 最大分辨率是720p

1.8. AndroidTool

1.8.1. 单独烧写分区镜像,分区地址错误

AndroidTool在加载parameter.txt时,会自动根据parameter分配分区地址,所以每次单独烧写分区镜像时,顺便加载parameter.txt,就不需要手动修改分区地址了。

1.9. parameter.txt

1.9.1. 单个分区说明

例如:0x00004800@0x0000A800(boot),@符号之前的数值是分区的大小,@符号之后的数值是分区的起始位置,括号里面的字符是分区的名字。所有数值的单位是sector,1个sector为512Bytes。

为了性能,每个分区起始位置需要32KB(64 sectors)对齐,大小也需要32KB的整数倍。

1.10. I2C

1.10.1. i2cdetect检测不到i2c3所挂载的设备

  • 内核dts有没有使能i2c3

  • 检查i2c3所使用的pin脚有没有被复用成其他功能

  • 检查i2c3有没有接上拉电压,可参考原理图i2c1

  • 检测i2c3所挂载的设备有没有正常供电

其他i2c同理。

1.11. VAD

1.11.1. 使用内置codec的mic

  • rockchip,adc-grps-route = <1 0 3 2>;:其对应的内置codec的mic的0到7通道顺序是MIC3,MIC4MIC1,MIC2MIC7,MIC8MIC5,MIC6

  • rockchip,det-channel = <0>;:vad检测的通道是0。

检查所使用的dts里rockchip,det-channel的通道与rockchip,adc-grps-route所对应内置codec的mic通道是否一致?

1.11.2. 寄存器配置

如果想要比较理想的唤醒效果,需要配置VAD的寄存器,具体可以参考SDK/docs/soc_internal/RK3308/目录下的《Rockchip_RK3308_Developer_Guide_Linux_VAD_Register_Configuration_CN.pdf》文档。

1.12. watchdog

1.12.1. 使用步骤

  • kernel所使用的dts里使能wdt

&wdt {
	status = "okay";
};
  • 可执行文件demo

    • open: 打开设备节点/dev/watchdog,从而启动看门狗

    • ioctl: WDIOC_SETTIMEOUT设置超时时间

    • write: 喂狗

具体程序(可以参考互联网上的文章)需要自己编写并编译。

1.12.2. 测试方法

  • 板子启动后,运行demo文件,会启动看门狗并进行喂狗。

  • 把该进程结束掉,就不进行喂狗了,超时后机器就会重启。

1.13. SSH

1.13.1. 使用方法

  • 使能SSH相关选项

    • openssh

    BR2_PACKAGE_OPENSSH=y
    
    • 配置登录的账户root和密码

    BR2_TARGET_ENABLE_ROOT_LOGIN=y
    BR2_TARGET_GENERIC_ROOT_PASSWD="123"
    
  • 确定rootfs是否为可读写

  • 修改配置文件

    • 修改板卡里/etc/ssh/sshd_config文件

    PermitRootLogin yes
    

1.14. USB Camera

1.14.1. 使能配置

kernel使能config如下:

CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=y
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y

1.15. 写号工具

注意:如果开发板进行了eMMC擦除操作,之前写入的数据也会被清除。

1.15.1. Windows方式

  • 安装RKDevInfoWriteTool

  • RKDevInfoWriteTool的设置里选中”RPMB”

  • 根据需要在RKDevInfoWriteTool的设置里配置”SN”,”WIFI MAC”,”LAN MAC”,”BT MAC”等

  • 开发板进入loader模式

  • RKDevInfoWriteTool进行写入或者读取操作

具体操作可以参考RKDevInfoWriteTool安装目录下的《RKDevInfoWriteTool使用指南》PDF文档。

1.15.2. Linux方式

开发板自身写号方式

  • buildroot使能BR2_PACKAGE_VENDOR_STORAGE

  • 通过vendor_storage命令进行读写操作

    • SN

    vendor_storage -w VENDOR_SN_ID -t string -i cad895bedb8ee15f
     vendor_storage -r VENDOR_SN_ID
    
    • LAN MAC

    vendor_storage -w VENDOR_LAN_MAC_ID -t string -i AABBCCDDEEFF
     vendor_storage -r VENDOR_LAN_MAC_ID
    

    其他可以根据vendor_storage -h提示进行操作。

应用程序如何读取,可以参考buildroot/package/rockchip/vendor_storage/vendor_storage.c里的vendor_storage_read函数。

1.15.3. 说明

1.15.3.1. WIFI MAC

1.15.3.1.1. RTL8188EU

VENDOR_WIFI_MAC_ID的值是给了p2p0的MAC地址,而wlan0的MAC地址是VENDOR_WIFI_MAC_ID的值的第一个字节&= ~0x2所得。

1.15.3.1.2. AP6236

需要做如下修改:

diff --git a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile
index 2550ff6..ecd4028 100644
--- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile
+++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/Makefile
@@ -23,7 +23,7 @@ DHDCFLAGS = -Wall -Wstrict-prototypes -Dlinux -DBCMDRIVER                 \
        -DKEEP_ALIVE -DPKT_FILTER_SUPPORT -DPNO_SUPPORT -DDHDTCPACK_SUPPRESS  \
        -DDHD_DONOT_FORWARD_BCMEVENT_AS_NETWORK_PKT                           \
        -DMULTIPLE_SUPPLICANT -DTSQ_MULTIPLIER -DMFP                          \
-       -DWL_EXT_IAPSTA -DSUPPORT_P2P_GO_PS                                   \
+       -DWL_EXT_IAPSTA -DSUPPORT_P2P_GO_PS -DGET_CUSTOM_MAC_ENABLE           \
        -DENABLE_INSMOD_NO_FW_LOAD -DDHD_UNSUPPORT_IF_CNTS                    \
        -Idrivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd \
        -Idrivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/include

1.16. UAC

1.16.1. 使用方法

  • kernel配置文件使能相关选项

CONFIG_USB_CONFIGFS_F_UAC1=y

or

CONFIG_USB_CONFIGFS_F_UAC2=y
echo usb_uac1_en > /etc/init.d/.usb_config

or

echo usb_uac2_en > /etc/init.d/.usb_config
  • 开发板重启

1.16.2. 测试方法

参考SDK/docs/driver/USB/目录下的《Rockchip-Developer-Guide-Linux4.4-USB-Gadget-UAC-CN.pdf》文档。

1.17. 改写MAC地址

ROC-RK3308B-CC-PLUS以太网芯片RTL8152B的MAC地址可通过/oem/Rtl8152b_mac_tool下的工具进行改写

  • EF8152B.cfg中的NODEID修改成要烧写的MAC地址,NODEID的地址要满足在STARTIDENDID所构成的范围之间, 这个范围也是可以改的

    NODEID = 00 E0 4C 36 00 01
    STARTID = 00 E0 4C 36 00 01
    ENDID = 00 E0 4C 36 FF FF
    
  • /oem/Rtl8152b_mac_tool目录下执行./rtunicpg-aarch64 /s 搜索设备, 当前的MAC地址C2:20:D1:D3:00:9A是随机生成的,未烧写过MAC地址时,系统每一次重启都不一样

    ./rtunicpg-aarch64 /s
    
    *************************************************************************
    *   RTUNicPG  - EFUSE/EEPROM/FLASH Programming Utility for
    *         RTL8152/RTL8153 Family USB FE/GBE Network Adapter
    *   Version : v2.0.6.9
    * Copyright (C) Realtek Semiconductor Corp. 2017. All Rights Reserved.
    *************************************************************************
    - RTL8152B
    
    0      eth1    VID:0BDA   PID:8152   bcdDevice:2000   C2:20:D1:D3:00:9A   path:1.4
    
  • 由于只有一个设备,直接运行./rtunicpg-aarch64 /efuse 进行初次烧写

烧写成功后执行ifconfig eth1可以看出MAC地址已被改写成00:E0:4C:36:00:01,重启系统再次查看MAC地址依旧不变

后续需要烧写时可采用./rtunicpg-aarch64  /efuse /nodeid 00E04C360002 的方式,因为efuse空间有限,所以烧写MAC地址的次数尽量不要超过10次

1.18. 串口波特率9600改为115200

设备树使能了串口后可以通过stty [-F DEVICE | --file=DEVICE] [-a|--all]去查看串口的波特率,默认是9600,以下两种方式都可以将波特率改为115200

  • 在应用层中修改, 如ttyS3

    stty -F /dev/ttyS3 speed 115200
    
  • 修改驱动

    diff --git a/kernel/drivers/tty/serial/serial_core.c b/kernel/drivers/tty/serial/serial_core.c
    index 87625fa..39e7d0c 100644
    --- a/kernel/drivers/tty/serial/serial_core.c
    +++ b/kernel/drivers/tty/serial/serial_core.c
    @@ -2394,8 +2394,8 @@ int uart_register_driver(struct uart_driver *drv)
            normal->type            = TTY_DRIVER_TYPE_SERIAL;
            normal->subtype         = SERIAL_TYPE_NORMAL;
            normal->init_termios    = tty_std_termios;
    -       normal->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
    -       normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 9600;
    +       normal->init_termios.c_cflag = B115200 | CS8 | CREAD | HUPCL | CLOCAL;
    +       normal->init_termios.c_ispeed = normal->init_termios.c_ospeed = 115200;
            normal->flags           = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
            normal->driver_state    = drv;
            tty_set_operations(normal, &uart_ops);
    

应用层修改的方式在系统重启后需要重新设置,而修改驱动的方式则会将所有串口的默认波特率改成115200