This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

【转载】使用device tree管理我的BBB LCD CAPE(群创7寸屏)

作者:chenzhufly   QQ36886052    (转载请注明出处)

硬件环境:Beaglebone black+ AT070TN83(群创7寸屏)
软件环境:Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.06.20.img.xz

相关链接:
1、  BBB LCD CAPE 原理图和PCB  http://bbs.eeworld.com.cn/thread-431728-1-1.html
2、  BBB LCD CAPE 视频效果展示  http://bbs.eeworld.com.cn/thread-431637-1-1.html
3、  BBB LCD CAPE主要器件一览   http://bbs.eeworld.com.cn/thread-431581-1-1.html
4、  BBB LCD CAPE 实际效果展示 http://bbs.eeworld.com.cn/thread-431386-1-1.html

最近也见到网友在制作7寸屏cape的过程遇到了一些问题,现把我的制作过程和大家进行分享,供参考,有问题一起讨论,共同进步!

其实BBB 已经支持7寸屏,并且有相关的dts文件,可以在/lib/fireware下面看到
  1. BB-BONE-LCD7-01-00A2.dts  
  2. BB-BONE-LCD7-01-00A3.dts   
  3. BB-BONE-LCD7-01-00A4.dts
复制代码


此次修改的蓝本为BB-BONE-LCD7-01-00A2.dts  把它修改为我设计的BBB LCD CAPE,相关的原理图和PCB间上面的链接。我把它改名称为cape-eeworld-lcd-00A0.dts,LCD接口部分不需要任何修改,主要修改了按键和LED的对应关系。
  1. /*
  2. * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 as
  6. * published by the Free Software Foundation.
  7. */
  8. /dts-v1/;
  9. /plugin/;
  10. / {
  11.         compatible = "ti,beaglebone", "ti,beaglebone-black";
  12.         /* identification */
  13.         part-number = "cape-eeworld-lcd7";
  14.         version = "00A0";
  15.         /* state the resources this cape uses */
  16.         exclusive-use =
  17.                 /* the pin header uses */
  18.                 "P8.45",        /* lcd: lcd_data0 */
  19.                 "P8.46",        /* lcd: lcd_data1 */
  20.                 "P8.43",        /* lcd: lcd_data2 */
  21.                 "P8.44",        /* lcd: lcd_data3 */
  22.                 "P8.41",        /* lcd: lcd_data4 */
  23.                 "P8.42",        /* lcd: lcd_data5 */
  24.                 "P8.39",        /* lcd: lcd_data6 */
  25.                 "P8.40",        /* lcd: lcd_data7 */
  26.                 "P8.37",        /* lcd: lcd_data8 */
  27.                 "P8.38",        /* lcd: lcd_data9 */
  28.                 "P8.36",        /* lcd: lcd_data10 */
  29.                 "P8.34",        /* lcd: lcd_data11 */
  30.                 "P8.35",        /* lcd: lcd_data12 */
  31.                 "P8.33",        /* lcd: lcd_data13 */
  32.                 "P8.31",        /* lcd: lcd_data14 */
  33.                 "P8.32",        /* lcd: lcd_data15 */
  34.                 "P8.27",        /* lcd: lcd_vsync */
  35.                 "P8.29",        /* lcd: lcd_hsync */
  36.                 "P8.28",        /* lcd: lcd_pclk */
  37.                 "P8.30",        /* lcd: lcd_ac_bias_en */
  38.                 "P8.20",        /* lcd: gpio1_31 */
  39.                 "P9.12",        /* led: gpio1_28 */
  40.                 "P9.14",        /* pwm: ehrpwm1a */
  41.                 "P9.15",        /* keys: gpio1_16 */
  42.                 "P9.23",        /* keys: gpio1_17 */
  43.                 "P9.16",        /* keys: gpio1_19 */
  44.                 "P9.27",        /* keys: gpio3_19 */
  45.                 /* the hardware IP uses */
  46.                 "gpio1_31",
  47.                 "gpio1_28",
  48.                 "gpio1_16",
  49.                 "gpio1_17",
  50.                 "gpio1_19",
  51.                 "gpio3_19",
  52.                 "lcd",
  53.                 "ehrpwm1a";
  54.         fragment@0 {
  55.                 target = <&am33xx_pinmux>;
  56.                 __overlay__ {
  57.                         bone_lcd7_cape_led_00A2_pins: pinmux_bone_lcd7_cape_led_00A2_pins {
  58.                                 pinctrl-single,pins = <
  59.                                         0x078 0x2f        /* gpmc_be1n.gpio1_28, INPUT | PULLDIS | MODE7 */
  60.                                 >;
  61.                         };
  62.                         bone_lcd7_cape_lcd_pins: pinmux_bone_lcd7_cape_lcd_pins {
  63.                                 pinctrl-single,pins = <
  64.                                         0x84 0x07        /* gpmc_csn2.gpio1_31, OUTPUT | MODE7 - AVDD_EN */
  65.                                         0xa0 0x08        /* lcd_data0.lcd_data0, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  66.                                         0xa4 0x08        /* lcd_data1.lcd_data1, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  67.                                         0xa8 0x08        /* lcd_data2.lcd_data2, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  68.                                         0xac 0x08        /* lcd_data3.lcd_data3, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  69.                                         0xb0 0x08        /* lcd_data4.lcd_data4, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  70.                                         0xb4 0x08        /* lcd_data5.lcd_data5, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  71.                                         0xb8 0x08        /* lcd_data6.lcd_data6, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  72.                                         0xbc 0x08        /* lcd_data7.lcd_data7, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  73.                                         0xc0 0x08        /* lcd_data8.lcd_data8, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  74.                                         0xc4 0x08        /* lcd_data9.lcd_data9, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  75.                                         0xc8 0x08        /* lcd_data10.lcd_data10, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  76.                                         0xcc 0x08        /* lcd_data11.lcd_data11, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  77.                                         0xd0 0x08        /* lcd_data12.lcd_data12, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  78.                                         0xd4 0x08        /* lcd_data13.lcd_data13, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  79.                                         0xd8 0x08        /* lcd_data14.lcd_data14, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  80.                                         0xdc 0x08        /* lcd_data15.lcd_data15, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT | AM33XX_PULL_DISA */
  81.                                         0xe0 0x00        /* lcd_vsync.lcd_vsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
  82.                                         0xe4 0x00        /* lcd_hsync.lcd_hsync, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
  83.                                         0xe8 0x00        /* lcd_pclk.lcd_pclk, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
  84.                                         0xec 0x00        /* lcd_ac_bias_en.lcd_ac_bias_en, OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT */
  85.                                 >;
  86.                         };
  87.                         bone_lcd7_cape_keys_00A2_pins: pinmux_bone_lcd7_cape_keys_00A2_pins {
  88.                                 pinctrl-single,pins = <
  89.                                         0x040 0x2f        /* KEY_LEFT gpmc_a0.gpio1_16, INPUT | PULLDIS | MODE7 */
  90.                                         0x1ac 0x2f        /* KEY_RIGHT gpio3_21, INPUT | PULLDIS | MODE7 */                                        
  91.                                         0x198 0x2f        /* KEY_UP mcasp0_axr0.gpio3_16, INPUT | PULLDIS | MODE7 */
  92.                                         0x044 0x2f        /* KEY_DOWN gpmc_a1.gpio1_17, INPUT | PULLDIS | MODE7 */        
  93.                                         0x1a4 0x2f        /* KEY_ENTER mcasp0_fsr.gpio3_19, INPUT | PULLDIS | MODE7 */
  94.                                 >;
  95.                         };
  96.                 };
  97.         };
  98.         fragment@1 {
  99.                 target = <&epwmss1>;
  100.                 __overlay__ {
  101.                         status = "okay";
  102.                 };
  103.         };
  104.         fragment@2 {
  105.                 target = <&ehrpwm1>;
  106.                 __overlay__ {
  107.                         status = "okay";
  108.                 };
  109.         };
  110.         fragment@3 {
  111.                 target = <&ocp>;
  112.                 __overlay__ {
  113.                         /* avoid stupid warning */
  114.                         #address-cells = <1>;
  115.                         #size-cells = <1>;
  116.                         tscadc {
  117.                                 compatible = "ti,ti-tscadc";
  118.                                 reg = <0x44e0d000 0x1000>;
  119.                                 interrupt-parent = <&intc>;
  120.                                 interrupts = <16>;
  121.                                 ti,hwmods = "adc_tsc";
  122.                                 status = "okay";
  123.                                 tsc {
  124.                                         ti,wires = <4>;
  125.                                         ti,x-plate-resistance = <200>;
  126.                                         ti,coordinate-readouts = <5>;
  127.                                         ti,wire-config = <0x00 0x11 0x22 0x33>;
  128.                                 };
  129.                                 adc {
  130.                                         ti,adc-channels = <4 5 6 7>;
  131.                                 };
  132.                         };
  133.                         gpio-leds-cape-lcd7 {
  134.                                 compatible = "gpio-leds";
  135.                                 pinctrl-names = "default";
  136.                                 pinctrl-0 = <&bone_lcd7_cape_led_00A2_pins>;
  137.                                 lcd7-led0 {
  138.                                         label = "lcd7:green:usr0";
  139.                                         gpios = <&gpio2 28 0>;
  140.                                         linux,default-trigger = "heartbeat";
  141.                                         default-state = "off";
  142.                                 };
  143.                         };
  144.                         gpio_keys {
  145.                                 compatible = "gpio-keys";
  146.                                 pinctrl-names = "default";
  147.                                 pinctrl-0 = <&bone_lcd7_cape_keys_00A2_pins>;
  148.                                 #address-cells = <1>;
  149.                                 #size-cells = <0>;
  150.                                 button@1 {
  151.                                         debounce_interval = <50>;
  152.                                         linux,code = <105>;
  153.                                         label = "left";
  154.                                         gpios = <&gpio2 16 0x1>;
  155.                                         gpio-key,wakeup;
  156.                                         autorepeat;
  157.                                 };
  158.                                 button@2 {
  159.                                         debounce_interval = <50>;
  160.                                         linux,code = <106>;
  161.                                         label = "right";
  162.                                         gpios = <&gpio4 21 0x1>;
  163.                                         gpio-key,wakeup;
  164.                                         autorepeat;
  165.                                 };
  166.                                 button@3 {
  167.                                         debounce_interval = <50>;
  168.                                         linux,code = <103>;
  169.                                         label = "up";
  170.                                         gpios = <&gpio4 16 0x1>;
  171.                                         gpio-key,wakeup;
  172.                                         autorepeat;
  173.                                 };
  174.                                 button@4 {
  175.                                         debounce_interval = <50>;
  176.                                         linux,code = <108>;
  177.                                         label = "down";
  178.                                         gpios = <&gpio2 17 0x1>;
  179.                                         gpio-key,wakeup;
  180.                                         autorepeat;
  181.                                 };
  182.                                 button@5 {
  183.                                         debounce_interval = <50>;
  184.                                         linux,code = <28>;
  185.                                         label = "enter";
  186.                                         gpios = <&gpio4 19 0x1>;
  187.                                         gpio-key,wakeup;
  188.                                 };
  189.                         };
  190.                         /* Settings for ThreeFive S9700RTWV35TR / LCD7 cape: */
  191.                         panel {
  192.                                 compatible = "tilcdc,panel";
  193.                                 pinctrl-names = "default";
  194.                                 pinctrl-0 = <&bone_lcd7_cape_lcd_pins>;
  195.                                 panel-info {
  196.                                         ac-bias           = <255>;
  197.                                         ac-bias-intrpt    = <0>;
  198.                                         dma-burst-sz      = <16>;
  199.                                         bpp               = <16>;
  200.                                         fdd               = <0x80>;
  201.                                         tft-alt-mode      = <0>;
  202.                                         stn-565-mode      = <0>;
  203.                                         mono-8bit-mode    = <0>;
  204.                                         sync-edge         = <0>;
  205.                                         sync-ctrl         = <1>;
  206.                                         raster-order      = <0>;
  207.                                         fifo-th           = <0>;
  208.                                 };
  209.                                 display-timings {
  210.                                         native-mode = <&timing0>;
  211.                                         timing0: 800x480 {
  212.                                                 hactive         = <800>;
  213.                                                 vactive         = <480>;
  214.                                                 hback-porch     = <40>;
  215.                                                 hfront-porch    = <40>;
  216.                                                 hsync-len       = <48>;
  217.                                                 vback-porch     = <30>;
  218.                                                 vfront-porch    = <13>;
  219.                                                 vsync-len       = <3>;
  220.                                                 clock-frequency = <30000000>;
  221.                                                 hsync-active    = <0>;
  222.                                                 vsync-active    = <0>;
  223.                                         };
  224.                                 };
  225.                         };
  226.                         fb {
  227.                                 compatible = "ti,am33xx-tilcdc";
  228.                                 reg = <0x4830e000 0x1000>;
  229.                                 interrupt-parent = <&intc>;
  230.                                 interrupts = <36>;
  231.                                 ti,hwmods = "lcdc";
  232.                                 ti,power-gpio = <&gpio2 31 0x0>;
  233.                                 ti,allow-non-reduced-blanking-modes;
  234.                         };
  235.                 };
  236.         };
  237. };
复制代码
可从这里下载文件:
把这个文件拷贝到/lib/fireware,执行以下命令,生成cape-eeworld-lcd-00A0.dtbo
  1. dtc -I dts -O dtb -@ cape-eeworld-lcd-00A0.dts > cape-eeworld-lcd-00A0.dtbo
复制代码



接着修改启动uEnv.txt
  1. optargs=run_hardware_test  capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN,
  2. BB-BONE-EMMC-2G capemgr.enable_partno=cape-eeworld-lcd
复制代码
这个时候重启板子可以看到以下信息
启动信息:
  1. [    1.334823] bone-capemgr bone_capemgr.8:  loader: check slot-7 cape-eeworld-lcd:00A0 (prio 0)
  2.   
  3. [    1.363181] bone-capemgr bone_capemgr.8:  loader: after slot-7 cape-eeworld-lcd:00A0 (prio 0)
  4.   
  5. [    1.378235] bone-capemgr bone_capemgr.8:  slot #7: Requesting part number/version based 'cape-eeworld-lcd-00A0.dtbo
  6.   
  7. [    1.401466] bone-capemgr bone_capemgr.8:  slot #7: Requesting firmware 'cape-eeworld-lcd-00A0.dtbo' for board-name  'Override Board Name', version '00A0'
  8.   
  9. [    5.824022] bone-capemgr bone_capemgr.8:  slot #7: dtbo 'cape-eeworld-lcd-00A0.dtbo' loaded; converting to live tree
  10.   
  11. [    5.844223] bone-capemgr bone_capemgr.8:  slot #7: #4 overlays
  12.   
  13. [    6.089835] bone-capemgr bone_capemgr.8:  slot #7: Applied #4 overlays.
  14.   
  15. [    6.097471] bone-capemgr bone_capemgr.8:  loader: done slot-7 cape-eeworld-lcd:00A0 (prio 0)
  16.   
复制代码

进入系统后,执行cat /sys/devices/bone_capemgr.8/slots,可看到cape-eeworld-cape已经加载成功
  1. 0: 54:PF--- 
  2. 1: 55:PF--- 
  3. 2: 56:PF--- 
  4. 3: 57:PF--- 
  5. 4: ff:P-O-- Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
  6. 5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
  7. 6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
  8. 7: ff:P-O-L Override Board Name,00A0,Override Manuf,cape-eeworld-lcd
复制代码

启动画面:
登陆界面如下

进图系统后的界面

至此BBB LCD CAPE的图形界面已经启动成功!
x 出现错误。请重试或与管理员联系。