LCD的SPI介面分析

來源:互聯網
上載者:User

         LCD與CPU的接線分控制線和資料線,控制線一般基於SPI協議,我們初始化LCD的寄存器就是通過這個,在主晶片的輸出格式固定的前提之下,調LCD也就是剩下始化寄存器而已,一般LCD移植,我們就是要關心這部分;資料線就是用來傳送像素資料到LCD,這部分一般不需要我們來控制了,只要接線沒問題,一般就是OK的。   我一直不解既然這部分是定死的代碼,為何不有IC廠商做成firmware,這樣豈不能省出控制線部分,有位老兄這樣解釋:

我們可以從另一個角度來看,初始化寄存器的數值充其量也就十幾B,遠遠達不到1KB。如果僅僅為這幾十B的資料而添加一個存放裝置,無形中增加了成本。所以很多LCD在使用之前都需要初始化其寄存器。呵呵,技術上講不通的,都是因為COST  DOWN。

下面針對ILI9481DS的driver ic 講解一下控制部分也就是SPI部分,下面是ili9481ds SPEC 的Serial Interface時序圖:

 

 從可以提取以下資訊:

1)SCL的上升沿LCD 讀取資料,下降沿SDA上的電平變化

2)傳輸單位為9bit,其中第一個bit 用來區分下面的8bit是command還是data, 第一個bit為0則是cmd,為1這是data

於是代碼如下,分發命令和資料兩個函數:

發命令的函數

static void ILI9481DS_spi_write_cmd_byte(u8 val){int i;gpio_set_value(spi_cs, 0);   //"Low" enablegpio_set_value(spi_sclk, 0);gpio_set_value(spi_sdi, 0);udelay(1);gpio_set_value(spi_sclk, 1);//clk產生上升沿,讀取sdi電平為0,根據spec下面的8bit是command而不是dataudelay(1);/*取val二進位的各位,並通過sdi發送出去*/for (i = 0; i < 8; i++) {/* #1: Drive the Data (High or Low) */gpio_set_value(spi_sclk, 0);if (val & bit_shift[i]) //gpio_set_value(spi_sdi, 1);elsegpio_set_value(spi_sdi, 0);/* #2: Drive the Clk High and then Low */udelay(1);gpio_set_value(spi_sclk, 1);//clk產生上升沿,從機會讀取sid上的電平udelay(1);}/*FIXME: Idle state of sdi should be low */if (gpio_get_value(spi_sdi)) {gpio_set_value(spi_sdi, 0);}gpio_set_value(spi_cs, 1);  //disable LCD chip}

發資料的函數

static void ILI9481DS_spi_write_data_byte(u8 val){int i;gpio_set_value(spi_cs, 0);   //"Low" enablegpio_set_value(spi_sclk, 0);gpio_set_value(spi_sdi, 1);  // dataudelay(1);gpio_set_value(spi_sclk, 1);//clk產生上升沿,讀取sdi電平為1,根據spec下面的8bit是data而不是commandudelay(1);/*取val二進位的各位,並通過sdi發送出去*/for (i = 0; i < 8; i++) {/* #1: Drive the Data (High or Low) */gpio_set_value(spi_sclk, 0);if (val & bit_shift[i]) //gpio_set_value(spi_sdi, 1);elsegpio_set_value(spi_sdi, 0);/* #2: Drive the Clk High and then Low */udelay(1);gpio_set_value(spi_sclk, 1);//clk產生上升沿,從機會讀取sid上的電平udelay(1);}/*FIXME: Idle state of sdi should be low */if (gpio_get_value(spi_sdi)) {gpio_set_value(spi_sdi, 0);}gpio_set_value(spi_cs, 1);  //disable LCD chip}

兩個函數的區別僅僅是紅色標識部分!

補充一點,關於通過SPI寫入lcd的資料,什麼是cmd什麼是data,可以看一下這個文章

http://www.52rd.com/bbs/Detail_RD.BBS_214230_5_1_1.html

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.