From ff96fb032fc48ecfe76abdacb75f3ecffd0143c8 Mon Sep 17 00:00:00 2001
From: android <android@lingyun.com>
Date: Thu, 11 Jul 2024 21:10:28 +0800
Subject: [PATCH] Add RK3568 documents

---
 documents/docs/RK3568_Android_SDK开发文档/RK3568_Android_SDK开发文档.md |  458 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 458 insertions(+), 0 deletions(-)

diff --git "a/documents/docs/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/documents/docs/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/documents/docs/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/documents/docs/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 硬件原理图说明
+
+![image-20240530141259975](./images/image-20240530141259975.png)
+
+![image-20240530135607369](./images/image-20240530135607369.png)
+
+### 3.9.2 AIN 电流测试
+
+首先我们需要将ADC采样程序烧录到开发板上的单片机中
+
+连接J6000 TTL下载调试串口 Debug_RXD_CN连接串口的TXD    Debug_TXD_CN连接串口的RXD  GND相连
+
+
+
+![image-20240530140205871](./images/image-20240530140205871.png)
+
+
+
+**打开FlyMcu.exe烧录工具,选择准备好的.hex 的单片机程序**
+
+![image-20240530140731254](./images/image-20240530140731254.png)
+
+
+
+**点击开始编程后就开始烧录程序,烧录成功如下图,并且可以看到单片机的LED灯在闪烁绿光**
+
+![image-20240530140856899](./images/image-20240530140856899.png)
+
+
+
+单片机程序烧录好后,我们需要使能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
+
+![image-20240530142151791](./images/image-20240530142151791.png)
+
+
+
+![image-20240530141055521](./images/image-20240530141055521.png)
+
+
+
+按照上图连接电路后,用XCOM软件打开单片机的调试串口,配置如下图所示
+
+![image-20240530141147705](./images/image-20240530141147705.png)
+
+
+
+在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采样数据
+
+![image-20240530142838339](./images/image-20240530142838339.png)
+
+示例如下:
+
+示例:
+
+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)
+
+
+
+![8e38061a45cded5d0965e8381a90f9e](./images/8e38061a45cded5d0965e8381a90f9e.png)
+
+### 3.9.3 AIN 电压测试
+
+准备工作和AIN电流测试一样,不再赘述
+
+![image-20240530144317972](./images/image-20240530144317972.png)
+
+运行comport程序让rk3568输出读取电压的指令给mcu
+
+同样在XCOM上也能看到MCU的采样调试信息,旋转电位器旋钮至最左或最右分别测量最小电流和最大电流,量程约为0.017V~5.882V
+
+![image-20240530143956558](./images/image-20240530143956558.png)
+
+
+
+## 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>;
+	};
+};
+
+```
+
+
+
+**接线如下图所示**
+
+![image-20240628183823118](./images/image-20240628183823118.png)
+
+![image-20240628183901996](./images/image-20240628183901996.png)
+
+
+
+### 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>;
+	};
+};
+
+```
+
+
+
+**接线如下图所示**
+
+![image-20240628182052917](./images/image-20240628182052917.png)
+
+![image-20240628182336621](./images/image-20240628182336621.png)
+
+## 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电平即可实现**
+
+![image-20240628184602191](./images/image-20240628184602191.png)
+
+第一种方法  在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,提到的节点全部禁掉就可以了
+
+
+
+**接线如下图所示**
+
+![image-20240628185147524](./images/image-20240628185147524.png)
+
+![image-20240628185201219](./images/image-20240628185201219.png)
+
+
+
+## 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固件。
+
+   ![image-20240707190725803](./images/image-20240707190725803.png)
+
+6. 插入wifi模块可以看到如下信息
+
+   ![image-20240707180653408](./images/image-20240707180653408.png)
+
+   通过ifconfig -a 能查看到此时多了一个网卡设备wlan0,这个时候表示wifi模块的驱动加载完成,加载完成后系统会自动的去/vendor/etc/firewarm下找相应的固件。
+
+7. 此时我们就可以在android界面操作wifi按钮打开wifi搜索功能,正常连接wifi了
+
+   点击打开wifi之后会出现如下信息,大致的意思就是系统在后台会开启wpa_supplicant的服务用来连接wifi的,并且创建了一个wpa_wlan0的socket设备用于通信,当连接上wifi后,会自动分配一个ip地址。
+
+   ![image-20240707181132353](./images/image-20240707181132353.png)
+
+   ![image-20240707181301122](./images/image-20240707181301122.png)
+
+   ![image-20240707181315992](./images/image-20240707181315992.png)
+
 # 4.  ADB调试工具
 
 1. 下载解压platform-tools-latest-windows.zip

--
Gitblit v1.9.1