1. Neza-D1开发板芯片很强,但是没有引出RGB接口,板上引出了HDMI与LVDS接口,没引出RGB接口,所以手里的RGB接口的屏用不上了,扩展IO上有引出SPI1接口,看了一下尺寸,刚好可以放的下2.8”的SPI屏幕,正好手里有以前剩下的屏幕,就画了一块扩展板(可惜芯片是BGA封装,即使我能画出来,也没本事焊上啊!),驱动芯片是ili9341 4线SPI,又加了一个触摸芯片上去,如下图
  2. 设备树配置
    lcd_ili9341@0 {
    #address-cells = <1>;
    #size-cells = <1>;
    compatible = “ilitek,ili9341”;
    reg = <0>;
    spi-max-frequency = <32000000>;
    rotation = <0>;
    spi-cpol;
    spi-cpha;
    rgb;
    fps = <30>;
    buswidth = <8>;
    txbuflen = <32768>;
    reset-gpios = <&pcf8574 6 GPIO_ACTIVE_LOW>;
    dc-gpios = <&pcf8574 7 GPIO_ACTIVE_LOW>;
    /backlight = <&backlight>;/
    led-gpios = <&pcf8574 5 GPIO_ACTIVE_HIGH>;
    status = “okay”;
    };
  3. 在内核打开small lcd support选项
    [*] Staging drivers —>
    <*> Support for small TFT LCD display modules —>3
    <*> FB driver for the ILI9341 LCD Controller
  4. 系统启动log
    [ 2.670067] fbtft_of_value: buswidth = 8
    [ 2.674512] fbtft_of_value: backlight = 39
    [ 2.679097] fbtft_of_value: fps = 30
    [ 2.683098] fbtft_of_value: txbuflen = 32768
    [ 2.691259] GPT:Primary header thinks Alt. header is not at the end of the disk.
    [ 2.699560] GPT:625184 != 7774207
    [ 2.703265] GPT:Alternate GPT header not at the end of the disk.
    [ 2.709981] GPT:625184 != 7774207
    [ 2.713688] GPT: Use GNU Parted to correct GPT errors.
    [ 2.719480] mmcblk0: p1 p2 p3 p4
    [ 2.987837] random: fast init done
    [ 3.036258] graphics fb1: fb_ili9341 frame buffer, 240x320, 150 KiB video memory, 32 KiB buffer memory, fps=31, spi1.0 at 32 MHz
  5. 这里有一点需要注意,我使用的GPIO是通过PCF8574扩展出来的,对IO读写操作时可能会导致休眠,因此不能在中断函数里使用
    因此我们需要简单的修改一下驱动文件,用一个宏定义即可,如果不修改操作一次IO,就会出现一堆警告
    #define gpio_set_value gpio_set_value_cansleep
  6. 进系统里可以查看是否有对应设备
    # ls /dev/fb*
    /dev/fb0 /dev/fb1
    测试屏幕
    # cat /dev/urandom > /dev/fb1
    cat: write error: No space left on device
    清屏
    # cat /dev/zero > /dev/fb1
    cat: write error: No space left on device
    显示图片