找回密码
 注册
搜索
查看: 2156|回复: 4

[讨论] LCD rgb接口如何区分cmd和data?

[复制链接]
发表于 2012-2-23 15:37:46 | 显示全部楼层 |阅读模式
都是通过spi写入LCD module,都是8bit,如何区分是cmd还是data?
两个接口如下:

  1. static void ILI9481ds_spi_write_reg_byte(u8 val)
  2. {
  3. int i;
  4. gpio_set_value(spi_cs, 0);
  5. gpio_set_value(spi_sclk, 0);  
  6. gpio_set_value(spi_sdi, 0);  //区别就在这里:写cmd时这里是拉低
  7. ndelay(100);
  8. gpio_set_value(spi_sclk, 1);  
  9. ndelay(100);
  10. for (i = 0; i < 8; i++)
  11. {
  12.   /* #1: Drive the Data (High or Low) */
  13.   gpio_set_value(spi_sclk, 0);
  14.   if (val & bit_shift[i])
  15.    gpio_set_value(spi_sdi, 1);
  16.   else
  17.    gpio_set_value(spi_sdi, 0);

  18.   /* #2: Drive the Clk High and then Low */
  19.   //ndelay(100);
  20.   gpio_set_value(spi_sclk, 1);
  21.   ndelay(100);
  22. }
  23. /*FIXME: Idle state of sdi should be low */
  24. if (gpio_get_value(spi_sdi)) {
  25.   //pr_info("%s(): warning spi_sdi may dismatch\\n", __func__);
  26.   gpio_set_value(spi_sdi, 0);
  27. }  
  28. gpio_set_value(spi_cs, 1);
  29. }

  30. static void ILI9481ds_spi_write_data_byte(u8 val)
  31. {
  32. int i;
  33.    
  34. gpio_set_value(spi_cs, 0);  
  35. gpio_set_value(spi_sclk, 0);  
  36. gpio_set_value(spi_sdi, 1);//区别就在这里:写data时这里是拉高

  37. ndelay(100);
  38. gpio_set_value(spi_sclk, 1);
  39. ndelay(100);

  40. for (i = 0; i < 8; i++) {
  41.   /* #1: Drive the Data (High or Low) */
  42.   gpio_set_value(spi_sclk, 0);
  43.   if (val & bit_shift[i])
  44.    gpio_set_value(spi_sdi, 1);
  45.   else
  46.    gpio_set_value(spi_sdi, 0);

  47.   /* #2: Drive the Clk High and then Low */
  48.   //ndelay(100);
  49.   gpio_set_value(spi_sclk, 1);
  50.   ndelay(100);
  51. }

  52. /*FIXME: Idle state of sdi should be low */
  53. if (gpio_get_value(spi_sdi)) {
  54.   //pr_info("%s(): warning spi_sdi may dismatch\\n", __func__);
  55.   gpio_set_value(spi_sdi, 0);
  56. }
  57. gpio_set_value(spi_cs, 1);
  58. }
复制代码

从代码看是通过传输前是高低来区分的,
但这是有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?
发表于 2012-2-28 17:26:12 | 显示全部楼层
对于4线SPI接口,命令和数据是通过D/CX来区分的;
对于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)
   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
点评回复

使用道具 举报

发表于 2012-4-10 00:28:40 | 显示全部楼层
哪位高手知道RGB 屏 中间会有一条一条的 黑条纹是怎么回事啊。。。
点评回复

使用道具 举报

发表于 2012-4-6 13:32:19 | 显示全部楼层
看LCDdriver的datasheet里面写的很清楚。RGB的initial code是通过SPI写入的,SPI写cmd和dat的时序都是有介绍的。
点评回复

使用道具 举报

发表于 2013-1-26 23:23:41 | 显示全部楼层
楼主说的应该是 SPI 3-wire 模式。。3线9位  第一位用来表示写的是command还是parameter。0:command  1:parameter
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-23 14:20 , Processed in 0.044129 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表