rk3566 泰山派 小手机项目 的后续。

文章讲述了作者在编译Android源码过程中遇到的问题,如boot.img编译、设备树配置、屏幕时序调整、Mipi初始化错误及触摸板设计等,展示了调试过程和解决步骤。
摘要由CSDN通过智能技术生成

已经是 repo sync 好了。

在内核的目录下,执行,这个git 命令具体的含义 我还不清楚。

在源码的根目录下  执行这个命令 ,这个应该是在使用 repo 切换版本。

安装一下 需要的环境。

apt-get update && sudo apt-get install -y git python make openjdk-8-jdk git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libgl1-mesa-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libxml2-utils xsltproc unzip python bc imagemagick ccache schedtool libssl-dev libncursesw5-dbg libncursesw5-dev libncurses5 libncursesw5 libncursesada5-dev libncurses5-dbg libncurses5-dev libncursesada-doc libncursesada5 libncurses-dev libncurses-gst libncurses5-dev clang

接下来就是开始 真正的编译 Android源码了。

cd u-boot && ./make.sh rk3566
cd ../kernel && make clean && make distclean && make ARCH=arm64 tspi_defconfig rk356x_evb.config android-11.config && make ARCH=arm64 tspi-rk3566-user-v10.img -j16
cd .. && source build/envsetup.sh && lunch rk3566_tspi-userdebug && make installclean -j16 && make -j16

./mkimage.sh

./build.sh -u

最终生成了最终的镜像。

接下来就是测试镜像了。

正在烧写。

可以确定,硬件以及默认的源码是没有问题的。

接下里我单独烧写一下 boot.img 测试一下。

也是可以启动的。

接下来,修改 成官方的mipi 的设备树在测试一下。

编译并烧写测试。

会进入到这个界面 ,这是不正常的。

到这里就是不对的了。

找到了不对的原因了。

我在写 mipi 的初始化指令时, 少写了参数,导致 在uboot 启动的时候,报错。把这些初始化参数写对之后,就会进入系统。

我的疑问, mipi参数不对,关uboot 什么事情呢?

接下来是用 官方默认的 mipi 的设备树的参数,启动一下屏幕,就算屏幕的什么参数都是不对的,但是 PWM 应该是对的吧,起码它会亮。

编译+烧写, 测试一下。

可以看到,屏幕是没有问题的,我的连接也是没有问题的。

基本可以断定就是我之前的设备树改的不对的问题了。

继续去改Mipi的设备树,这次直接再之前的设备树文件中改动,然后复制一份设备树文件。

先只改 时序参数,编译+烧写测试一下。

依然是可以启动的。

这次去改初始化命令。

我是这个改的。

编译+烧写测试一下

出现了这个错误,这说明之前的错误,也是因为 初始化命令引起的。

网上查资料:

不明白,初始化命令里面的0x01 是什么含义。

按照他的格式继续去修改我自己的设备树的信息。

继续编译+烧写 测试。

这次成功启动了。但是图像没有了,屏幕有背光,但是黑屏了。

编译+烧写 测试:

依然是有背光 + 黑屏。

继续编译+烧写测试。

结果还是 黑屏。

网上看到这个资料

连接串口去看一下我的打印信息。

只有这些信息,跟他描述的不一样。

那么现在怎么办呢? 只有去请教一下厂家了。

先暂时搁置吧。

2024.04.15 ,继续mipi 屏幕的调试

我测试一下。 这是我的编译脚本

root@lckfb:/home/lckfb# cat mybash.sh
cd u-boot && ./make.sh rk3566
cd ../kernel && make ARCH=arm64 tspi_defconfig rk356x_evb.config android-11.config && make ARCH=arm64 tspi-rk3566-user-v10.img -j16
cd .. && source build/envsetup.sh && lunch rk3566_tspi-userdebug && make installclean -j16 && make -j16
./mkimage.sh
./build.sh -u

执行测试。

其实我觉得有必要分析一下 rk3566 的编译脚本

还是不正常。

修改一下时钟,然后继续 只编译 boot.img .

编译脚本如下。

root@lckfb:/home/lckfb# cat mybash.sh
#cd u-boot && ./make.sh rk3566
#cd ../kernel && make ARCH=arm64 tspi_defconfig rk356x_evb.config android-11.config && make ARCH=arm64 tspi-rk3566-user-v10.img -j16
cd kernel && make ARCH=arm64 tspi_defconfig rk356x_evb.config android-11.config && make ARCH=arm64 tspi-rk3566-user-v10.img -j16
#cd .. && source build/envsetup.sh && lunch rk3566_tspi-userdebug && make installclean -j16 && make -j16
#./mkimage.sh
#./build.sh -u

事实证明这种方式 是不能启动的。再第一次启动的时候,会进入这里。

然后是 进入到的不是 android 命令行,

再屏幕上显示的是,感觉画面好像变大了。

就直接去编译 update.img 吧。

目前mipi 屏幕的问题已经解决了,是时钟的问题。

我具体的配置是:

&dsi1 {
        status = "okay";
//      rockchip,lane-rate = <1000>;
        dsi1_panel: panel@0 {
                status = "okay";
                compatible = "simple-panel-dsi";
                reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>;
                pinctrl-names = "default";
                pinctrl-0 = <&dsi1_rst_gpio>;
                reg = <0>;
                backlight = <&backlight>;
                reset-delay-ms = <220>;
                enable-delay-ms = <120>;
                prepare-delay-ms = <100>;
                unprepare-delay-ms = <120>;
                disable-delay-ms = <100>;
                //init-delay-ms = <120>;
                init-delay-ms = <120>;
                mipi-data-delay-ms = <200>;

                width-mm = <135>;
                height-mm = <216>;

                dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
                        MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
                dsi,format = <MIPI_DSI_FMT_RGB888>;
                dsi,lanes  = <4>;
 panel-init-sequence = [
//                      39 00 03  E0 AB BA
//                      39 00 03  E1 BA AB
//                      39 00 05  B1 10 01 47 FF
//                      39 00 07  B2 0C 14 04 50 50 14
//                      39 00 04  B3 56 53 00
//                      39 00 04  B4 33 30 04
//                      39 00 08  B6 B0 00 00 10 00 10 00
//                      39 00 06  B8 05 12 29 49 48
//                      39 00 39  B9 7C 65 55 49 46 36 3B 24 3D 3C 3D 5C 4C 55 47 46 39 26 06 7C 65 55 49 46 36 3B 24 3D 3C 3D 5C 4C 55 47 46 39 26 06
//                      39 00 17  C0 FF 87 12 34 44 44 44 44 98 04 98 04 0F 00 00 C1
//                      39 00 11  C1 54 94 02 85 9F 00 7F 00 54 00
//                      39 00 13  C2 17 09 08 89 08 11 22 20 44 FF 18 00
//                      39 00 23  C3 86 46 05 05 1C 1C 1D 1D 02 1F 1F 1E 1E 0F 0F 0D 0D 13 13 11 11 00
//                      39 00 23  C4 07 07 04 04 1C 1C 1D 1D 02 1F 1F 1E 1E 0E 0E 0C 0C 12 12 10 10 00
//                      39 00 03  C6 2A 2A
//                      39 00 09  C8 21 00 31 42 34 16
//                      39 00 03  CA CB 43
//                      39 00 09  CD 0E 4B 4B 20 19 6B 06 B3
//                      39 00 05  D2 E3 2B 38 00
//                      39 00 12  D4 00 01 00 0E 04 44 08 10 00 00 00
//                      39 00 09  E6 80 01 FF FF FF FF FF FF
//                      39 00 06  F0 12 03 20 00 FF
                      15 00 02 21 00
                      05 78 02 11 00
                      05 14 02 29 00
                ];





                panel-exit-sequence = [
                //      05 00 01 28
                //      05 00 01 10
                ];

                disp_timings1: display-timings {
                        native-mode = <&dsi1_timing0>;
                        dsi1_timing0: timing0 {
//                              clock-frequency = <77000000>;
                                clock-frequency = <205000000>;
                                hactive = <800>;   //与 LCDTiming.LCDH 对应
                                vactive = <1280>;   //与 LCDTiming.LCDV 对应
                                hfront-porch = <80>;   //与 LCDTiming.HFPD 对应
                                hsync-len = <4>;   //与 LCDTiming.HSPW 对应
                                hback-porch = <80>;   //与 LCDTiming.HBPD 对应
                                vfront-porch = <20>;   //与 LCDTiming.VEPD 对应
                                vsync-len = <4>;   //与 LCDTiming.VsPW 对应
                                vback-porch = <12>;   //与 LCDTiming.VBPD 对应
                                hsync-active = <0>;
                                vsync-active = <0>;
                                de-active = <0>;
                                pixelclk-active = <0>;

                                swap-rb = <0>;
                                swap-rg = <0>;
                                swap-gb = <0>;
                        };
                };

                ports {
                        #address-cells = <1>;
                        #size-cells = <0>;

                        port@0 {
                                reg = <0>;
                                panel_in_dsi1: endpoint {
                                        remote-endpoint = <&dsi1_out_panel>;
                                };
                        };
                };
        };

        ports {
                #address-cells = <1>;
                #size-cells = <0>;

                port@1 {
                        reg = <1>;
                        dsi1_out_panel: endpoint {
                                remote-endpoint = <&panel_in_dsi1>;
                        };
                };
        };

};


77000000 是正确的。

这里有几点需要注意:

1 厂商给的屏幕的数据手册没有 时钟的参数,所以需要自己算。

2 不同的平台 具体的算法还不一样,最完整的是,

 (HBP+HFP+HS+1280)*(VBP+VFP+VS+800)* 60 * 3 * 8 / 4 

但是瑞芯微不是这个 算的, 参考它其他的屏幕的配置, 只有 (HBP+HFP+HS+1280)*(VBP+VFP+VS+800)* 60  即可。

先去调试 EDP 屏幕

首先 确定 板卡的第一脚 在哪里-->确定 屏幕的第一脚在哪里(万用表测)------>排线的连接方式是不是 意义对应的。

确定好之后,开始 去改 edp 屏幕的时序参数。

        

设备树的编写我只是 凑出了一个 blanking 。

编译+烧写进行测试

结果是可以的。

结果板卡烧了,电源管理芯片爆炸,原因可能是 这里。造成了短路。

返修之后发现,rk809+ rk3566 烧了。

返修回来之后发现两个屏幕都是好的。

去继续mipi 屏幕的测试。

屏幕目前已经调试好了,接下来去调试触摸。
 

首先是画一个触摸的转接板。

1 确定 开发板的接口。

2 了解触摸的接口。

至于是正排线,还是反排线,我就不管,直接按照直接连接的方式画板。

关于触摸的结构。

我自己的安排是:

所以: 开发板我是不动的。

触摸板 我是要反向的。

开始画图了。

输入 网址  lceda.cn ---> 专业版

新建一个工程

搜索器件

开始放置网络标签

设计--->更新到PCB

防止板框。

在走线中添加过孔: alt+v,  切换底层:alt+b,   切换顶层: alt+t.

这里有个问题就是 无法在底层 铺铜。

网上的资料

我在底层铺铜的时候,底层是没有网络的。而默认铺铜是 GND的网络。

所以 可以把 GND打个过孔,或者是 保留孤岛 就行。

然后加上排针。

然后是检查DRC

设计--->DRC 检验

画好了,开始下单。

下单---> PCB下单。

首先通过  嘉立创下单助手 领取优惠券。

下单的时候需要注意的

板材

板子尺寸, 这个可以通过, 放置--->尺寸--->长度  去测量。

板子层数

板子厚度,默认是1.6

是否贴片

是否开钢网

手动确认订单

确认生产稿

剩下的就默认就行。

然后直接下单,支付0元。

fpc 的座椅+ 排线 ,我也在淘宝网上下单了,就等着回来焊接+调试触摸了。

然后是调试官方的驱动,直到可以使用。

然后是自己动手写一个 触摸的驱动。

接下来是关于触摸模组的转接板的设计。

1 原理图的设计

先照着抄,基本完成

接下来进行drc 检验

有一些错误

然后是 检查一下 警告。

2 PCB的设计

更新原理图到pcb

下载并放置结构文件

接下来开始摆放元器件

将结构文件 边框改成 边框层,将其他部分改成文档层。

然后将结构文件固定。

然后将一些器件 放到特定的位置。

接下来是 层叠阻抗设计

mipi 信号的阻抗要求。

阻抗计算网址。

嘉立创阻抗计算

接下来设置 规则。

这是说的是 导线与导线之间的间距。

接下来创建规则,导线的宽度

创建的电源的线宽

关于差分对的线宽与间距, 这是计算出来的。

关于过孔的规则

接下来是关于导线规则的应用

设置电源的规则,其他的默认

差分对的规则

一共三队差分对。

最后点击应用。

接下来设置 叠层

隐藏GND+VCC的飞线

接下来就开始布线了。

首先布线 差分信号。

关于布线的原则。

画好差分线, 1 画差分线,2 包地,3 打过孔

然后把地 全部 打上过孔。

1 鼠标左键选中之后,H,键可以高亮, 2 给每个地打上过孔。

再电源部分开始铺上铜皮。

对于高速信号,尽量少打过孔。

在设计的收,尽量 底层往一个方向走,然后顶层往一个方向走,这样走线永远都有空间。

开始绕等长,再绕绕等长之前,需要先将 几对差分线 调到差不多的距离。

1 对与对之间要有差不多的距离。

2 对内要有差不多的距离。再10ml 距离之内

开始设置差分对的 等长。

结果是:

最终都链接好了。

接下来是铺铜。

查看飞线,看看还有没有飞线没有完成。

接下来开始 打过孔。

接下来放置泪滴。

结果:

但是检验DRC 会出现这个报错。

关于内电层的含义。

3 关于打板

领取优惠卷

bom 表用于 元器件采购+SMT贴片。

坐标文件 用于 SMT贴片

pcb GERber 用于PCB制版。

我这里直接下单

下单完成,

自己去买原料。

直接再 嘉立创进行物料的下单。

目前就等着 PCB板 打回来, 然后元器件 到货了。

目前可以去看一下 ,关于触摸的部分。看看能不能正常把 触摸驱动起来。

再 泰山派端使用的是 反排线, 触摸端使用的是 正排线。

触摸芯片使用的是GT911

触摸驱动是 内核里面自带的,所以,我只需要使能就可以了。

接下来就去修改设备树。

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值