From 956de4dbcb5c92bd713e12b3de2827fc1101892e Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Mon, 21 Apr 2025 23:44:24 +0800 Subject: [PATCH] Update RK3568 doc --- RK3568_Android_SDK开发文档/RK3568_Android_SDK开发文档.md | 458 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 458 insertions(+), 0 deletions(-) diff --git "a/RK3568_Android_SDK\345\274\200\345\217\221\346\226\207\346\241\243/RK3568_Android_SDK\345\274\200\345\217\221\346\226\207\346\241\243.md" "b/RK3568_Android_SDK\345\274\200\345\217\221\346\226\207\346\241\243/RK3568_Android_SDK\345\274\200\345\217\221\346\226\207\346\241\243.md" index 4dd2c8b..db19c6c 100644 --- "a/RK3568_Android_SDK\345\274\200\345\217\221\346\226\207\346\241\243/RK3568_Android_SDK\345\274\200\345\217\221\346\226\207\346\241\243.md" +++ "b/RK3568_Android_SDK\345\274\200\345\217\221\346\226\207\346\241\243/RK3568_Android_SDK\345\274\200\345\217\221\346\226\207\346\241\243.md" @@ -743,6 +743,464 @@ +## 3.9 AIN 电流电压测试 + +### 3.9.1 硬件原理图说明 + + + + + +### 3.9.2 AIN 电流测试 + +首先我们需要将ADC采样程序烧录到开发板上的单片机中 + +连接J6000 TTL下载调试串口 Debug_RXD_CN连接串口的TXD Debug_TXD_CN连接串口的RXD GND相连 + + + + + + + +**打开FlyMcu.exe烧录工具,选择准备好的.hex 的单片机程序** + + + + + +**点击开始编程后就开始烧录程序,烧录成功如下图,并且可以看到单片机的LED灯在闪烁绿光** + + + + + +单片机程序烧录好后,我们需要使能RK3568的UART6,根据原理图可以看到,RK3568和MCU通信串口为UART6,所以需要在设备树中设置UART6设备节点 + +打开`~/rk3568/sdkv1.4.0_linux5.10/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10-linux.dts` + +加入URAT6节点 + +``` +&uart6{ + dma-names = "tx", "rx"; + pinctrl-names = "default"; + pinctrl-0 = <&uart6m1_xfer>; + status = "okay"; +}; +``` + + + +重新编译设备树后烧录到开发板中启动开发板,在/dev下看看是否有ttyS6 + + + + + + + + + +按照上图连接电路后,用XCOM软件打开单片机的调试串口,配置如下图所示 + + + + + +在RK3568上运行comport程序,此程序可以配置串口的波特率,停止位,数据位,奇偶校验以及指定使用哪个串口设备 + +源代码在[framwork.git - Gitblit (iot-yun.club)](http://main.iot-yun.club:8088/tree/framwork.git/master/booster) + +但是这个代码需要做一定的修改,因为这个程序只能让串口输出字符串数据,但是我们在测试中需要发送十六进制数据给单片机。 + + + +此时就需要了解ADC串口协议,RK3568发送读指令给MCU,MCU会响应RK3568返回ADC采样数据 + + + +示例如下: + +示例: + +1、读第0通道电压: + +AA 55 02 00 30 8C //CRC:0x8C30 + +AA 55 02 00 EE 0D 99 C0 //0D EE -> 3566mv, CRC:0x0C99 + +2、读第1路通道电压: + +AA 55 02 01 F1 4C + +AA 55 02 01 06 00 47 C5 //00 06 -> 6mv + +3、读第2路通道电压: + +AA 55 02 02 B1 4D + +AA 55 02 02 06 00 B7 C5 //6mv + +4、读第3路通道电压: + +AA 55 02 03 70 8D + +AA 55 02 03 06 00 E6 05 //6mv + +5、读第0路电流 + +AA 55 01 00 30 7C + +AA 55 01 00 95 01 BB 71 //01 95 -> 405 单位0.01mA,即4.05mA, CRC:0x71BB + +6、读第1路电流 + +AA 55 01 01 F1 BC + +AA 55 01 01 95 01 EA B1 + +7、读第2路电流 + +AA 55 01 02 B1 BD + +AA 55 01 02 95 01 1A B1 + +8、读第3路电流 + +AA 55 01 03 70 7D + +AA 55 01 03 95 01 4B 71 + + + +以下AIN电流测试以测试第0路电流为例 + +在RK3568上输入`./comport -d /dev/ttyS6 -b 115200 -s 8N1N -x` + +在XCOM上可以看到MCU的调试信息,旋转电位器旋钮至最左或最右分别测量最小电流和最大电流,量程约为1.22mA~22.79mA(测试其他三路电流时最小电流约为0.006mA) + + + + + +### 3.9.3 AIN 电压测试 + +准备工作和AIN电流测试一样,不再赘述 + + + +运行comport程序让rk3568输出读取电压的指令给mcu + +同样在XCOM上也能看到MCU的采样调试信息,旋转电位器旋钮至最左或最右分别测量最小电流和最大电流,量程约为0.017V~5.882V + + + + + +## 3.10 MIPI DSI 测试 + +### 3.10.1 独立TP的屏幕 + +在rk3568-evb1-ddr4-v10.dtsi中确认一下节点是否打开 + +``` +&dsi0 { + status = "okay"; +}; + +&dsi0_in_vp1 { + status = "okay"; +}; + +&dsi1_panel { + power-supply = <&vcc3v3_lcd1_n>; +}; + +&route_dsi0 { + status = "okay"; + connect = <&vp1_out_dsi0>; +}; +``` + +在rk3568-evb.dtsi中设置屏参,这里的屏参需要根据实际的屏幕手册里给的数据计算得出,不同屏幕参数大不相同 + +``` +disp_timings0: display-timings { + native-mode = <&dsi0_timing0>; + dsi0_timing0: timing0 { + clock-frequency = <149600000>; + hactive = <1920>; + vactive = <1080>; + hfront-porch = <48>; + hsync-len = <32>; + hback-porch = <147>; + vfront-porch = <3>; + vsync-len = <6>; + vback-porch = <51>; + hsync-active = <0>; + vsync-active = <0>; + de-active = <0>; + pixelclk-active = <1>; + }; +}; + +``` + + + +**接线如下图所示** + + + + + + + +### 3.10.2 自带TP的屏幕 + +在rk3568-evb1-ddr4-v10.dtsi中确认一下节点是否打开 + +``` +&dsi0 { + status = "okay"; +}; + +&dsi0_in_vp1 { + status = "okay"; +}; + +&dsi1_panel { + power-supply = <&vcc3v3_lcd1_n>; +}; + +&route_dsi0 { + status = "okay"; + connect = <&vp1_out_dsi0>; +}; +``` + +在rk3568-evb.dtsi中设置屏参,这里的屏参需要根据实际的屏幕手册里给的数据计算得出,不同屏幕参数大不相同 + +``` +disp_timings0: display-timings { + native-mode = <&dsi0_timing0>; + dsi0_timing0: timing0 { + clock-frequency = <149600000>; + hactive = <1920>; + vactive = <1080>; + hfront-porch = <48>; + hsync-len = <32>; + hback-porch = <147>; + vfront-porch = <3>; + vsync-len = <6>; + vback-porch = <51>; + hsync-active = <0>; + vsync-active = <0>; + de-active = <0>; + pixelclk-active = <1>; + }; +}; + +``` + + + +**接线如下图所示** + + + + + +## 3.11 LVDS 测试 + +首先在rk3568-evb1-ddr4-v10.dts 中添加lvds相关节点 + +``` ++ #include <dt-bindings/display/media-bus-format.h> +#include "rk3568-evb1-ddr4-v10.dtsi" +#include "rk3568-android.dtsi" ++ #include <dt-bindings/display/rockchip_vop.h> + +/ { + panel-lvds { + compatible = "simple-panel"; + power-supply = <&vcc3v3_lcd0_n>; + enable-delay-ms = <20>; + prepare-delay-ms = <20>; + unprepare-delay-ms = <20>; + disable-delay-ms = <20>; + bus-format = <MEDIA_BUS_FMT_RGB888_1X7X4_SPWG>; + width-mm = <217>; + height-mm = <136>; + + display-timings { + native-mode = <&timing0>; + timing0: timing0 { + clock-frequency = <73400000>; + hactive = <1280>; + vactive = <800>; + hback-porch = <40>; + hfront-porch = <80>; + vback-porch = <9>; + vfront-porch = <9>; + hsync-len = <40>; + vsync-len = <5>; + hsync-active = <0>; + vsync-active = <0>; + de-active = <0>; + pixelclk-active = <0>; + }; + }; + + ports { + #address-cells = <1>; + #size-cells = <0>; + port@0 { + reg = <0>; + panel_in_lvds: endpoint { + remote-endpoint = <&lvds_out_panel>; + }; + }; + }; + }; + +}; + +&vp0 { + cursor-win-id = <ROCKCHIP_VOP2_CLUSTER0>; +}; + +&vp1 { + cursor-win-id = <ROCKCHIP_VOP2_CLUSTER1>; +}; + +&lvds { + status = "okay"; + ports { + port@1 { + reg = <1>; + lvds_out_panel: endpoint { + remote-endpoint = <&panel_in_lvds>; + }; + }; + }; +}; + +&lvds_in_vp1 { + status = "okay"; +}; + +&route_lvds{ + status = "okay"; + connect = <&vp1_out_lvds>; +}; + +``` + + + +**因为这个lvds屏幕不支持更改屏幕亮度,所以他不是通过pwm来控制背光的,而是通过gpio控制,只能保证亮屏和灭屏,所以只需要控制gpio电平即可实现** + + + +第一种方法 在rk3568-evb1-ddr4-v10.dtsi更改vcc3v3_lcd0_n + +``` +&vcc3v3_lcd0_n { + gpio = <&gpio0 RK_PC7 GPIO_ACTIVE_LOW>; +// enable-active-high; +}; +``` + +第二种方法 更改panel-lvds节点 + +``` +panel-lvds { + compatible = "simple-panel"; +// power-supply = <&vcc3v3_lcd0_n>; + enable-gpios = <&gpio0 RK_PC7 GPIO_ACTIVE_LOW>; + enable-delay-ms = <20>; + prepare-delay-ms = <20>; + unprepare-delay-ms = <20>; + disable-delay-ms = <20>; + bus-format = <MEDIA_BUS_FMT_RGB888_1X7X4_SPWG>; + width-mm = <217>; + height-mm = <136>; + ...... +}; +``` + + + +最后由于mipi dsi也用到了vp1这个端口所以禁掉mipi dsi相关节点,mipi_dsi相关节点参考3.10.1,提到的节点全部禁掉就可以了 + + + +**接线如下图所示** + + + + + + + +## 3.12 wifi模块测试 + +**选用联发科的mt7601u的USB wifi模块** + +1. 首先获取mt7601u的wifi固件,mt7601u.bin + +2. 修改内核使能wifi设备节点 + + ``` + &wireless_wlan { + status = "okay"; + }; + ``` + +3. 在内核中使能mt7601的驱动,mt7601的驱动位置在drivers/net/wireless/mediatek/mt7601u + + 内核make menuconfig配置 + + ``` + Device Drivers --> + [*] Network device support ---> + [*] Wireless LAN ---> + [*] MediaTek devices ---> + <*> MediaTek MT7601U (USB) support + ``` + +4. **重新编译整个sdk** + +5. 启动开发板后将wifi模块的bin文件拷贝到/vendor/etc/firewarm下 + + 这个步骤只是第一次测试用的方法,更加完整的方法是将固件放进android镜像中让其自带这个固件 + + 方法如下: + + 在vendor/rockchip/common/wifi/firmware中添加mt7601.bin固件 + + 可以看到在上一层的wifi.mk中已经明确指出了会将firmware目录下的所有bin文件都拷贝到编译产物中的vendor/etc/firmware下,然后随着andorid的编译系统一起编译生成.img文件,这样的镜像烧录后就会自带我们得mt7601固件。 + +  + +6. 插入wifi模块可以看到如下信息 + +  + + 通过ifconfig -a 能查看到此时多了一个网卡设备wlan0,这个时候表示wifi模块的驱动加载完成,加载完成后系统会自动的去/vendor/etc/firewarm下找相应的固件。 + +7. 此时我们就可以在android界面操作wifi按钮打开wifi搜索功能,正常连接wifi了 + + 点击打开wifi之后会出现如下信息,大致的意思就是系统在后台会开启wpa_supplicant的服务用来连接wifi的,并且创建了一个wpa_wlan0的socket设备用于通信,当连接上wifi后,会自动分配一个ip地址。 + +  + +  + +  + # 4. ADB调试工具 1. 下载解压platform-tools-latest-windows.zip -- Gitblit v1.9.1