|
都是通过spi写入LCD module,都是8bit,如何区分是cmd还是data?
两个接口如下:
- static void ILI9481ds_spi_write_reg_byte(u8 val)
- {
- int i;
- gpio_set_value(spi_cs, 0);
- gpio_set_value(spi_sclk, 0);
- gpio_set_value(spi_sdi, 0); //区别就在这里:写cmd时这里是拉低
- ndelay(100);
- gpio_set_value(spi_sclk, 1);
- ndelay(100);
- 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);
- else
- gpio_set_value(spi_sdi, 0);
- /* #2: Drive the Clk High and then Low */
- //ndelay(100);
- gpio_set_value(spi_sclk, 1);
- ndelay(100);
- }
- /*FIXME: Idle state of sdi should be low */
- if (gpio_get_value(spi_sdi)) {
- //pr_info("%s(): warning spi_sdi may dismatch\\n", __func__);
- gpio_set_value(spi_sdi, 0);
- }
- gpio_set_value(spi_cs, 1);
- }
- static void ILI9481ds_spi_write_data_byte(u8 val)
- {
- int i;
-
- gpio_set_value(spi_cs, 0);
- gpio_set_value(spi_sclk, 0);
- gpio_set_value(spi_sdi, 1);//区别就在这里:写data时这里是拉高
-
- ndelay(100);
- gpio_set_value(spi_sclk, 1);
- ndelay(100);
- 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);
- else
- gpio_set_value(spi_sdi, 0);
- /* #2: Drive the Clk High and then Low */
- //ndelay(100);
- gpio_set_value(spi_sclk, 1);
- ndelay(100);
- }
- /*FIXME: Idle state of sdi should be low */
- if (gpio_get_value(spi_sdi)) {
- //pr_info("%s(): warning spi_sdi may dismatch\\n", __func__);
- gpio_set_value(spi_sdi, 0);
- }
- gpio_set_value(spi_cs, 1);
- }
复制代码
从代码看是通过传输前是高低来区分的,
但这是有SPI协议规定的还是由lcd IC规定的?
在datasheet中看到以下内容,
- Parallel interface (D/CX): The signal for command or
parameter select.
Low: Command.
High: Parameter.
我的是RGB接口的,没有D/CX pin
我觉得是由IC决定,每次移植一个IC,都要查看如何区分cmd和data? |
|