1回答

0收藏

[评测分享] 【飞凌嵌入式RK3568J开发板测评】+ 驱动基础-调试mipi屏幕

#板卡评测 #板卡评测 4534 人阅读 | 1 人回复 | 2022-11-19

本帖最后由 eefocus_3828686 于 2022-11-19 14:40 编辑

1、概述飞凌嵌入式RK3568J开发板的屏幕接口支持HDMI、LVDS、MIPI、EDP、RGB,涵盖种类够多。关于各个屏幕之间的切换,可以在uboot启动过程中进入用户配置模式进行切换,也可以在kernel的设备树源码中进行切换。关于在uboot启动过程中切换显示屏幕,在飞凌官方视频中
https://www.bilibili.com/video/B ... 2c8009c69c091533e16
有详细的介绍,本文使用mipi接口将在设备树文件中进行配置,过程在下文会进行提及。使用飞凌嵌入式RK3568J开发板的调试mipi接口屏幕,分为硬件和软件两个部分。

2、硬件部分
2.1首先来看飞凌嵌入式RK3568J开发板底板留出的mipi dsi接口端子位号是P6


实际位置在开发板底部如下图红框处


从硬件图中看出 飞凌嵌入式RK3568J开发板底板留出的mipi dsi接口 资源如下:
4 lane数据mipi加mipi时钟,连接的是RK3568的dsi1
4个IO,分别是MIPI_PWM、MIPI_EN、MIPI_ACC_INT、MIPI_TP_INT
一路I2C接口
一路5V电源

2.2、再来看看用户实际手上的MIPI LCD情况
屏幕接口如下,发现和飞凌嵌入式RK3568J开发板底板接口线序和电平和端子引脚完全对不上 (-_-) 。。。

看来只能自制转接板。

2.3 所需材料
5V转3V3电源芯片,这里选择常用的1117就行
5V转1V8芯片,这里选择SGM2034,电路如下

转接线和转接端子,因为我的屏幕只有24pin,所以我只用24pin的排线和端子
背光升压芯片,5V转10V+,使用SGM3752,电路如下

转接板,使用了一块万能的端子转接板,线路全靠飞 (-_-),如下图

最终通过手工飞线焊接,焊接和调试过程略过,能正常输出3V3和1V8,点亮背光电压约16V,飞凌嵌入式RK3568J开发板底板接口和屏幕端子接口各个信号对接成功。转接板效果如下,这里I2C接口没有使用到因为我的屏幕不带触摸板


3、软件部分
3.1 首先看飞凌嵌入式RK3568J开发板底板所用到设备树文件 kernel\arch\arm64\boot\dts\rockchip\OK3568-C-common.dtsi
修改节点 forlinx_control 使用mipi,其他配置为off,这个节点在uboot里会对显示接口作判断


接着找到dsi1节点



下面介绍节点关于panel重要参数的含义
status = "okay";使能节点

compatible = "simple-panel-dsi";和驱动文件匹配,使用全局搜索可以找到匹配驱动文件为kernel\drivers\gpu\drm\panel\panel-simple.c

reset-delay-ms = <60>;
enable-delay-ms = <60>;
prepare-delay-ms = <60>;
unprepare-delay-ms = <60>;
disable-delay-ms = <60>;这些都是一些上下电延时配置

dsi,format = <MIPI_DSI_FMT_RGB888>;
dsi,lanes  = <4>;mipi参数

panel-init-sequence = [...]; 屏幕上电初始化参数

panel-exit-sequence = [...]; 屏幕下电初始化参数

display-timings 屏幕时序参数

3.2. 这里重点介绍panel-init-sequence和display-timings
首先是panel-init-sequence,里边填写的就是屏幕厂商给出的初始化列表,以下是我的屏初始化参数,是长这样的:
  1. Generic_Long_Write_3P(0xFF,0x98,0x81,0x03);
  2. Generic_Short_Write_1P(0x01,0x00);
  3. Generic_Short_Write_1P(0x02,0x00);
  4. Generic_Short_Write_1P(0x03,0x73);
  5. Generic_Short_Write_1P(0x04,0x00);
  6. Generic_Short_Write_1P(0x05,0x00);
  7. Generic_Short_Write_1P(0x06,0x0A);
  8. Generic_Short_Write_1P(0x07,0x00);
  9. Generic_Short_Write_1P(0x08,0x00);
  10. Generic_Short_Write_1P(0x09,0x01);

  11. Generic_Short_Write_1P(0x0A,0x00);
  12. Generic_Short_Write_1P(0x0B,0x00);
  13. Generic_Short_Write_1P(0x0C,0x01);
  14. Generic_Short_Write_1P(0x0D,0x00);
  15. Generic_Short_Write_1P(0x0E,0x00);
  16. Generic_Short_Write_1P(0x0F,0x1D);
  17. Generic_Short_Write_1P(0x10,0x1D);
  18. Generic_Short_Write_1P(0x11,0x00);
  19. Generic_Short_Write_1P(0x12,0x00);
  20. Generic_Short_Write_1P(0x13,0x00);
  21. Generic_Short_Write_1P(0x14,0x00);
  22. Generic_Short_Write_1P(0x15,0x00);

  23. Generic_Short_Write_1P(0x16,0x00);
  24. Generic_Short_Write_1P(0x17,0x00);
  25. Generic_Short_Write_1P(0x18,0x00);
  26. Generic_Short_Write_1P(0x19,0x00);
  27. Generic_Short_Write_1P(0x1A,0x00);
  28. Generic_Short_Write_1P(0x1B,0x00);
  29. Generic_Short_Write_1P(0x1C,0x00);
  30. Generic_Short_Write_1P(0x1D,0x00);
  31. Generic_Short_Write_1P(0x1E,0x40);
  32. Generic_Short_Write_1P(0x1F,0x80);

  33. Generic_Short_Write_1P(0x20,0x06);
  34. Generic_Short_Write_1P(0x21,0x02);
  35. Generic_Short_Write_1P(0x22,0x00);
  36. Generic_Short_Write_1P(0x23,0x00);
  37. Generic_Short_Write_1P(0x24,0x00);
  38. Generic_Short_Write_1P(0x25,0x00);
  39. Generic_Short_Write_1P(0x26,0x00);
  40. Generic_Short_Write_1P(0x27,0x00);
  41. Generic_Short_Write_1P(0x28,0x33);
  42. Generic_Short_Write_1P(0x29,0x03);
  43. Generic_Short_Write_1P(0x2A,0x00);
  44. Generic_Short_Write_1P(0x2B,0x00);

  45. Generic_Short_Write_1P(0x2C,0x00);
  46. Generic_Short_Write_1P(0x2D,0x00);
  47. Generic_Short_Write_1P(0x2E,0x00);
  48. Generic_Short_Write_1P(0x2F,0x00);
  49. Generic_Short_Write_1P(0x30,0x00);
  50. Generic_Short_Write_1P(0x31,0x00);
  51. Generic_Short_Write_1P(0x32,0x00);
  52. Generic_Short_Write_1P(0x33,0x00);
  53. Generic_Short_Write_1P(0x34,0x04);
  54. Generic_Short_Write_1P(0x35,0x00);
  55. Generic_Short_Write_1P(0x36,0x00);
  56. Generic_Short_Write_1P(0x37,0x00);
  57. Generic_Short_Write_1P(0x38,0x3c);
  58. Generic_Short_Write_1P(0x39,0x35);
  59. Generic_Short_Write_1P(0x3A,0x01);
  60. Generic_Short_Write_1P(0x3B,0x40);
  61. Generic_Short_Write_1P(0x3C,0x00);
  62. Generic_Short_Write_1P(0x3D,0x01);
  63. Generic_Short_Write_1P(0x3E,0x00);
  64. Generic_Short_Write_1P(0x3F,0x00);
  65. Generic_Short_Write_1P(0x40,0x00);
  66. Generic_Short_Write_1P(0x41,0x88);
  67. Generic_Short_Write_1P(0x42,0x00);
  68. Generic_Short_Write_1P(0x43,0x00);
  69. Generic_Short_Write_1P(0x44,0x1f);

  70. Generic_Short_Write_1P(0x50,0x01);
  71. Generic_Short_Write_1P(0x51,0x23);
  72. Generic_Short_Write_1P(0x52,0x45);
  73. Generic_Short_Write_1P(0x53,0x67);
  74. Generic_Short_Write_1P(0x54,0x89);
  75. Generic_Short_Write_1P(0x55,0xAB);
  76. Generic_Short_Write_1P(0x56,0x01);
  77. Generic_Short_Write_1P(0x57,0x23);
  78. Generic_Short_Write_1P(0x58,0x45);
  79. Generic_Short_Write_1P(0x59,0x67);        
  80. Generic_Short_Write_1P(0x5A,0x89);        
  81. Generic_Short_Write_1P(0x5B,0xAB);        
  82. Generic_Short_Write_1P(0x5C,0xCD);        
  83. Generic_Short_Write_1P(0x5D,0xEF);
  84. Generic_Short_Write_1P(0x5E,0x11);
  85. Generic_Short_Write_1P(0x5F,0x01);

  86. Generic_Short_Write_1P(0x60,0x00);
  87. Generic_Short_Write_1P(0x61,0x15);
  88. Generic_Short_Write_1P(0x62,0x14);
  89. Generic_Short_Write_1P(0x63,0x0E);
  90. Generic_Short_Write_1P(0x64,0x0F);
  91. Generic_Short_Write_1P(0x65,0x0C);
  92. Generic_Short_Write_1P(0x66,0x0D);
  93. Generic_Short_Write_1P(0x67,0x06);
  94. Generic_Short_Write_1P(0x68,0x02);
  95. Generic_Short_Write_1P(0x69,0x07);
  96. Generic_Short_Write_1P(0x6A,0x02);
  97. Generic_Short_Write_1P(0x6B,0x02);
  98. Generic_Short_Write_1P(0x6C,0x02);
  99. Generic_Short_Write_1P(0x6D,0x02);

  100. Generic_Short_Write_1P(0x6E,0x02);
  101. Generic_Short_Write_1P(0x6F,0x02);
  102. Generic_Short_Write_1P(0x70,0x02);
  103. Generic_Short_Write_1P(0x71,0x02);
  104. Generic_Short_Write_1P(0x72,0x02);
  105. Generic_Short_Write_1P(0x73,0x02);
  106. Generic_Short_Write_1P(0x74,0x02);
  107. Generic_Short_Write_1P(0x75,0x01);
  108. Generic_Short_Write_1P(0x76,0x00);
  109. Generic_Short_Write_1P(0x77,0x14);
  110. Generic_Short_Write_1P(0x78,0x15);
  111. Generic_Short_Write_1P(0x79,0x0E);
  112. Generic_Short_Write_1P(0x7A,0x0F);
  113. Generic_Short_Write_1P(0x7B,0x0C);
  114. Generic_Short_Write_1P(0x7C,0x0D);

  115. Generic_Short_Write_1P(0x7D,0x06);
  116. Generic_Short_Write_1P(0x7E,0x02);
  117. Generic_Short_Write_1P(0x7F,0x07);
  118. Generic_Short_Write_1P(0x80,0x02);
  119. Generic_Short_Write_1P(0x81,0x02);
  120. Generic_Short_Write_1P(0x82,0x02);

  121. Generic_Short_Write_1P(0x83,0x02);
  122. Generic_Short_Write_1P(0x84,0x02);
  123. Generic_Short_Write_1P(0x85,0x02);
  124. Generic_Short_Write_1P(0x86,0x02);
  125. Generic_Short_Write_1P(0x87,0x02);
  126. Generic_Short_Write_1P(0x88,0x02);
  127. Generic_Short_Write_1P(0x89,0x02);
  128. Generic_Short_Write_1P(0x8A,0x02);

  129. Generic_Long_Write_3P(0xFF,0x98,0x81,0x04);
  130. Generic_Short_Write_1P(0x70,0x00);
  131. Generic_Short_Write_1P(0x71,0x00);
  132. Generic_Short_Write_1P(0x82,0x0F);
  133. Generic_Short_Write_1P(0x84,0x0F);
  134. Generic_Short_Write_1P(0x85,0x0D);

  135. Generic_Short_Write_1P(0x32,0xAC);
  136. Generic_Short_Write_1P(0x8C,0x80);
  137. Generic_Short_Write_1P(0x3C,0xF5);
  138. Generic_Short_Write_1P(0xB5,0x07);
  139. Generic_Short_Write_1P(0x31,0x45);
  140. Generic_Short_Write_1P(0x3A,0x24);
  141. Generic_Short_Write_1P(0x88,0x33);

  142. Generic_Long_Write_3P(0xFF,0x98,0x81,0x01);
  143. Generic_Short_Write_1P(0x22,0x09);
  144. Generic_Short_Write_1P(0x31,0x00);
  145. Generic_Short_Write_1P(0x53,0x93);
  146. Generic_Short_Write_1P(0x55,0xA2);
  147. Generic_Short_Write_1P(0x50,0x81);
  148. Generic_Short_Write_1P(0x51,0x85);
  149. Generic_Short_Write_1P(0x62,0x0D);

  150. Generic_Long_Write_3P(0xFF,0x98,0x81,0x01);
  151. Generic_Short_Write_1P(0xA0,0x00);
  152. Generic_Short_Write_1P(0xA1,0x1A);
  153. Generic_Short_Write_1P(0xA2,0x28);
  154. Generic_Short_Write_1P(0xA3,0x13);
  155. Generic_Short_Write_1P(0xA4,0x16);
  156. Generic_Short_Write_1P(0xA5,0x29);
  157. Generic_Short_Write_1P(0xA6,0x1D);
  158. Generic_Short_Write_1P(0xA7,0x1E);
  159. Generic_Short_Write_1P(0xA8,0x84);
  160. Generic_Short_Write_1P(0xA9,0x1C);
  161. Generic_Short_Write_1P(0xAA,0x28);
  162. Generic_Short_Write_1P(0xAB,0x75);
  163. Generic_Short_Write_1P(0xAC,0x1A);
  164. Generic_Short_Write_1P(0xAD,0x19);
  165. Generic_Short_Write_1P(0xAE,0x4D);
  166. Generic_Short_Write_1P(0xAF,0x22);
  167. Generic_Short_Write_1P(0xB0,0x28);
  168. Generic_Short_Write_1P(0xB1,0x54);
  169. Generic_Short_Write_1P(0xB2,0x66);
  170. Generic_Short_Write_1P(0xB3,0x39);

  171. Generic_Short_Write_1P(0xC0,0x00);
  172. Generic_Short_Write_1P(0xC1,0x1A);
  173. Generic_Short_Write_1P(0xC2,0x28);
  174. Generic_Short_Write_1P(0xC3,0x13);
  175. Generic_Short_Write_1P(0xC4,0x16);
  176. Generic_Short_Write_1P(0xC5,0x29);
  177. Generic_Short_Write_1P(0xC6,0x1D);
  178. Generic_Short_Write_1P(0xC7,0x1E);
  179. Generic_Short_Write_1P(0xC8,0x84);
  180. Generic_Short_Write_1P(0xC9,0x1C);
  181. Generic_Short_Write_1P(0xCA,0x28);
  182. Generic_Short_Write_1P(0xCB,0x75);
  183. Generic_Short_Write_1P(0xCC,0x1A);
  184. Generic_Short_Write_1P(0xCD,0x19);
  185. Generic_Short_Write_1P(0xCE,0x4D);
  186. Generic_Short_Write_1P(0xCF,0x22);
  187. Generic_Short_Write_1P(0xD0,0x28);
  188. Generic_Short_Write_1P(0xD1,0x54);
  189. Generic_Short_Write_1P(0xD2,0x66);
  190. Generic_Short_Write_1P(0xD3,0x39);

  191. Generic_Long_Write_3P(0xFF,0x98,0x81,0x00);

  192. Generic_Short_Write_1P(0x35,0x00);
  193. Generic_Short_Write_1P(0x36,0x03);
  194. Generic_Short_Write_1P(0x11,0x00);
  195. Delay (120);
  196. Generic_Short_Write_1P(0x29,0x00);
  197. Delay (20);
复制代码

转换为panel-init-sequence[]格式是这样
  1. panel-init-sequence = [
  2. 39 00 04 FF 98 81 03
  3. 15 00 02 01 00
  4. 15 00 02 02 00
  5. 15 00 02 03 73
  6. 15 00 02 04 00
  7. 15 00 02 05 00
  8. 15 00 02 06 0A
  9. 15 00 02 07 00
  10. 15 00 02 08 00
  11. 15 00 02 09 01
  12. 15 00 02 0A 00
  13. 15 00 02 0B 00
  14. 15 00 02 0C 01
  15. 15 00 02 0D 00
  16. 15 00 02 0E 00
  17. 15 00 02 0F 1D
  18. 15 00 02 10 1D
  19. 15 00 02 11 00
  20. 15 00 02 12 00
  21. 15 00 02 13 00
  22. 15 00 02 14 00
  23. 15 00 02 15 00
  24. 15 00 02 16 00
  25. 15 00 02 17 00
  26. 15 00 02 18 00
  27. 15 00 02 19 00
  28. 15 00 02 1A 00
  29. 15 00 02 1B 00
  30. 15 00 02 1C 00
  31. 15 00 02 1D 00
  32. 15 00 02 1E 40
  33. 15 00 02 1F 80
  34. 15 00 02 20 06
  35. 15 00 02 21 02
  36. 15 00 02 22 00
  37. 15 00 02 23 00
  38. 15 00 02 24 00
  39. 15 00 02 25 00
  40. 15 00 02 26 00
  41. 15 00 02 27 00
  42. 15 00 02 28 33
  43. 15 00 02 29 03
  44. 15 00 02 2A 00
  45. 15 00 02 2B 00
  46. 15 00 02 2C 00
  47. 15 00 02 2D 00
  48. 15 00 02 2E 00
  49. 15 00 02 2F 00
  50. 15 00 02 30 00
  51. 15 00 02 31 00
  52. 15 00 02 32 00
  53. 15 00 02 33 00
  54. 15 00 02 34 04
  55. 15 00 02 35 00
  56. 15 00 02 36 00
  57. 15 00 02 37 00
  58. 15 00 02 38 3c
  59. 15 00 02 39 35
  60. 15 00 02 3A 01
  61. 15 00 02 3B 40
  62. 15 00 02 3C 00
  63. 15 00 02 3D 01
  64. 15 00 02 3E 00
  65. 15 00 02 3F 00
  66. 15 00 02 40 00
  67. 15 00 02 41 88
  68. 15 00 02 42 00
  69. 15 00 02 43 00
  70. 15 00 02 44 1f
  71. 15 00 02 50 01
  72. 15 00 02 51 23
  73. 15 00 02 52 45
  74. 15 00 02 53 67
  75. 15 00 02 54 89
  76. 15 00 02 55 AB
  77. 15 00 02 56 01
  78. 15 00 02 57 23
  79. 15 00 02 58 45
  80. 15 00 02 59 67
  81. 15 00 02 5A 89
  82. 15 00 02 5B AB
  83. 15 00 02 5C CD
  84. 15 00 02 5D EF
  85. 15 00 02 5E 11
  86. 15 00 02 5F 01
  87. 15 00 02 60 00
  88. 15 00 02 61 15
  89. 15 00 02 62 14
  90. 15 00 02 63 0E
  91. 15 00 02 64 0F
  92. 15 00 02 65 0C
  93. 15 00 02 66 0D
  94. 15 00 02 67 06
  95. 15 00 02 68 02
  96. 15 00 02 69 07
  97. 15 00 02 6A 02
  98. 15 00 02 6B 02
  99. 15 00 02 6C 02
  100. 15 00 02 6D 02
  101. 15 00 02 6E 02
  102. 15 00 02 6F 02
  103. 15 00 02 70 02
  104. 15 00 02 71 02
  105. 15 00 02 72 02
  106. 15 00 02 73 02
  107. 15 00 02 74 02
  108. 15 00 02 75 01
  109. 15 00 02 76 00
  110. 15 00 02 77 14
  111. 15 00 02 78 15
  112. 15 00 02 79 0E
  113. 15 00 02 7A 0F
  114. 15 00 02 7B 0C
  115. 15 00 02 7C 0D
  116. 15 00 02 7D 06
  117. 15 00 02 7E 02
  118. 15 00 02 7F 07
  119. 15 00 02 80 02
  120. 15 00 02 81 02
  121. 15 00 02 82 02
  122. 15 00 02 83 02
  123. 15 00 02 84 02
  124. 15 00 02 85 02
  125. 15 00 02 86 02
  126. 15 00 02 87 02
  127. 15 00 02 88 02
  128. 15 00 02 89 02
  129. 15 00 02 8A 02
  130. 15 00 04 FF 98 81 04
  131. 15 00 02 70 00
  132. 15 00 02 71 00
  133. 15 00 02 82 0F
  134. 15 00 02 84 0F
  135. 15 00 02 85 0D
  136. 15 00 02 32 AC
  137. 15 00 02 8C 80
  138. 15 00 02 3C F5
  139. 15 00 02 B5 07
  140. 15 00 02 31 45
  141. 15 00 02 3A 24
  142. 15 00 02 88 33
  143. 15 00 04 FF 98 81 01
  144. 15 00 02 22 09
  145. 15 00 02 31 00
  146. 15 00 02 53 93
  147. 15 00 02 55 A2
  148. 15 00 02 50 81
  149. 15 00 02 51 85
  150. 15 00 02 62 0D
  151. 15 00 04 FF 98 81 01
  152. 15 00 02 A0 00
  153. 15 00 02 A1 1A
  154. 15 00 02 A2 28
  155. 15 00 02 A3 13
  156. 15 00 02 A4 16
  157. 15 00 02 A5 29
  158. 15 00 02 A6 1D
  159. 15 00 02 A7 1E
  160. 15 00 02 A8 84
  161. 15 00 02 A9 1C
  162. 15 00 02 AA 28
  163. 15 00 02 AB 75
  164. 15 00 02 AC 1A
  165. 15 00 02 AD 19
  166. 15 00 02 AE 4D
  167. 15 00 02 AF 22
  168. 15 00 02 B0 28
  169. 15 00 02 B1 54
  170. 15 00 02 B2 66
  171. 15 00 02 B3 39
  172. 15 00 02 C0 00
  173. 15 00 02 C1 1A
  174. 15 00 02 C2 28
  175. 15 00 02 C3 13
  176. 15 00 02 C4 16
  177. 15 00 02 C5 29
  178. 15 00 02 C6 1D
  179. 15 00 02 C7 1E
  180. 15 00 02 C8 84
  181. 15 00 02 C9 1C
  182. 15 00 02 CA 28
  183. 15 00 02 CB 75
  184. 15 00 02 CC 1A
  185. 15 00 02 CD 19
  186. 15 00 02 CE 4D
  187. 15 00 02 CF 22
  188. 15 00 02 D0 28
  189. 15 00 02 D1 54
  190. 15 00 02 D2 66
  191. 15 00 02 D3 39
  192. 39 00 04 FF 98 81 00
  193. 15 00 02 35 00
  194. 15 00 02 36 03
  195. 15 78 02 11 00
  196. 15 14 02 29 00
  197. ];
复制代码

我们可以通过kernel源码对参数panel-init-sequence的解析来得到转换规则
看kernel\drivers\gpu\drm\panel\panel-simple.c文件里的几个结构体


其中panel_cmd_desc就是和panel-init-sequence对应的
如39 00 04 FF 98 81 03分别对应data_type(39) delay(00) payload_length(04) payload(FF 98 81 03)
如15 00 02 01 00分别对应data_type(15) delay(00) payload_length(02) payload(10 00)

data_type的取值和含义在kernel\include\video\mipi_display.h文件下


在kernel\drivers\gpu\drm\panel\panel-simple.c文件中可知延时参数是在写完本次命令后再近些延时操作


再看看display-timings,其实就是LCD屏的扫描时序参数
屏幕厂商给出的参数是这样


直接按对应的参数填入设备树即可


3.3 驱动框架简单说明
RK3568的显示使用的是drm框架,我们添加屏幕重点关注kernel\drivers\gpu\drm\panel\目录即可,该目录下飞凌嵌入式RK3568J开发板使用的驱动文件是panel-simple.c,设备树中的dsi1节点会和该文件匹配,panel-simple.c文件中依次执行 panel_simple_init() --> mipi_dsi_driver_register() --> panel_simple_dsi_probe() --> panel_simple_probe() --> drm_panel_init() --> drm_panel_add() --> mipi_dsi_attach() 等函数来完成mipi屏幕驱动工作。

4、效果展示
由于使用的屏幕没有触摸功能,使用USB鼠标进行操作即可


分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

xiaoshen-372360

发表于 2022-11-27 10:49:08 | 只看该作者

非常感谢你的分享,学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条