LCD rgb接口如何区分cmd和data?
两个接口如下:
[CODE]
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);
}
[/CODE]
从代码看是通过传输前是高低来区分的,
但这是有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?
对于3线SPI接口,没有D/CX管脚,这个信息包含在数据线上,每传一次包含 一位D/CX 和 8位数据。
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);
}
这个就是先传一个 命令、数据识别位,再传8 bit data