[技术问答] 新塘EBI控制LCD驱动芯片,命令写入错误,读取也不正确

[复制链接]
 楼主| Regsen 发表于 2013-10-14 16:23 | 显示全部楼层 |阅读模式
这两天搞7寸彩屏的驱动。使用新塘NCU130芯片。屏幕驱动芯片用了SSD1963。现在仿真时候,读取写入的初始化命令仍旧是默认值。而且对于多参数的寄存器命令,读取的默认数据也不完全正确。现象是(对于参数值大于3的寄存命令):第一个默认参数正确,然后一直读取到第三个默认参数。现在比较纠结,求大家帮忙分析下。原理图我贴出来了。程序也给出。
这一段是主函数内的测试程序。
  1. //system_status_led
  2.                 GPIOB->DOUT ^=BIT15;
  3.                
  4.                 //×¼±¸ÏÔʾµÄ³õʼ»¯´úÂ룬ÏÖÔÚ¿ÉÒÔ²»Óÿ¼ÂÇ
  5.     SSD1963_WRITE_BLOCK(0X10,0X10);
  6.                
  7.                 //ÃüÁîÅäÖÃÕýÈ·Óë·ñµÄ״̬µÆ
  8.           GPIOB->DOUT &=~BIT8;
  9.                 DELAY();
  10.                
  11.                 //оƬID
  12.                 WRITE_SSD1963(0X00A1,SSD1963_COMMAND);
  13.                 M=READ_SSD1963();

  14.                 N=READ_SSD1963();

  15.                 C=READ_SSD1963();

  16.                 if((M==0X0001)&&(N==0X0057)&&(C==0X0061))
  17.                         GPIOB->DOUT |=BIT8;
系统时钟初始化
  1. void SystemInit(void)
  2. {
  3.         //
  4.         UNLOCKREG(1);
  5.         SYSCLK->PWRCON.XTL12M_EN = ENABLE;
  6.   SYSCLK->PLLCON.FB_DV = 46;
  7.         SYSCLK->PLLCON.IN_DV = 2;
  8.         SYSCLK->PLLCON.OUT_DV = 3;
  9.        
  10.         //ÉèÖÃPLL±¶Æµµç·µÄʱÖÓԴΪÍⲿ16M¾§Õñ
  11.         SYSCLK->PLLCON.PLL_SRC = 0;
  12.                
  13.         //ÉèÖÃPCLKʱÖÓÔ´µÄʱÖÓ³ýƵÊý
  14.         SYSCLK->CLKDIV.HCLK_N = 0;
  15.        
  16.         //ʹÄÜPLLµç·
  17.         SYSCLK->PLLCON.OE = 0;
  18.        
  19.         while((SYSCLK->CLKSTATUS.PLL_STB==1)&&(SYSCLK->CLKSTATUS.XTL12M_STB==1));
  20.         // SELECT PLLOUT AS HCLK_SOURCE 2
  21.         SYSCLK->CLKSEL0.HCLK_S = 2;
  22.        
  23.         //SELECT HCLK/2 AS SYSTICK
  24.         SYSCLK->CLKSEL0.STCLK_S = 3;
  25.         LOCKREG(0);
  26. }
读写函数代码:
  1. void WRITE_SSD1963(unsigned short int PARAMETER, unsigned char D_C)
  2. {
  3.         while(TE_LOW);
  4.   switch(D_C)
  5.         {
  6.     case SSD1963_DATA : GPIOB->DOUT |= BIT6;//EBI_ALE_MASK
  7.                                           *((volatile unsigned int *)(USER_EBI_BASE)) = PARAMETER ;
  8.                                     break ;
  9.                
  10.                 case SSD1963_COMMAND : GPIOB->DOUT &= ~BIT6;//~EBI_ALE_MASK
  11.                                        *((volatile unsigned int *)(USER_EBI_BASE)) = PARAMETER ;
  12.                                        break;
  13.                        
  14.                 default : ;
  15.   }
  16. }
  1. unsigned short int READ_SSD1963(void)
  2. {
  3.         return (*((volatile unsigned int *)(USER_EBI_BASE)));
  4. }
新塘外部总线配置也贴出来:
  1. void EBI_CONFIG(void)
  2. {
  3.         //½âËøÉÏËø¼Ä´æÆ÷
  4.   UNLOCKREG(1);
  5.        
  6.         //EBIʱÖÓ¿ªÆô
  7.         SYSCLK->AHBCLK.EBI_EN = 1;
  8.        
  9.         //EBI FUNCTION ENABLE
  10.         EBI->EBICON.ExtEN = 1;
  11.        
  12.         //EBI DATA_WIDTH = 16
  13.         EBI->EBICON.ExtBW16 = 1;
  14.        
  15.         //EBIÊä³öʱÖÓ·ÖÆµÆ÷ÉèÖÃ
  16.         /*-0 48-1 24-2 12-3 6-4 3-5 1.5-*/
  17.         EBI->EBICON.MCLKDIV = 0;
  18.        
  19.         //Ëø´æÐźÅALE±£³Öʱ¼ä
  20.         EBI->EBICON.ExttALE = 0;
  21.        
  22.         //INSERT IDLE AFTER READ
  23.         EBI->EXTIME.ExtIR2R = 0X05;
  24.        
  25.         //INSERT IDLE AFTER WRITE
  26.         EBI->EXTIME.ExtIW2X = 0X05;
  27.        
  28.         //ÉèÖ÷ÃÎʱ£³Öʱ¼ä
  29.         EBI->EXTIME.ExttAHD = 0X01;
  30.        
  31.         //ÉèÖ÷ÃÎÊʱ¼ä
  32.   EBI->EXTIME.ExttACC = 0X0F;
  33.        
  34.         //¼Ä´æÆ÷ÉÏËø
  35.         LOCKREG(0);
  36. }
比较纠结,我想问题还是应该出在EBI与SSD1963之间的通讯,求有过经历的前辈指教。多谢了

Touch.pdf

1.32 MB, 阅读权限: 20, 下载次数: 32

硬件原理图

 楼主| Regsen 发表于 2013-10-14 16:29 | 显示全部楼层
请大家多多指教,有关任何想法都可以告诉我,我可以仿真来测试下。现在我测试芯片id,得到的仿真结果贴出来

读取的SSD1963前三个ID参数

读取的SSD1963前三个ID参数
 楼主| Regsen 发表于 2013-10-14 16:41 | 显示全部楼层
数据手册上正确的ID参数是0x01 0x57 0x61 0x01 0xff,见数据手册44页
SSD1963_ID.jpg
奔跑的牛 发表于 2013-10-14 16:53 | 显示全部楼层
本帖最后由 奔跑的牛 于 2013-10-14 16:57 编辑

读取id 01 61 能正确  
应该是你的SSD1963屏 数据线接为16bit模式了。改为8bit应该就好了

评论

是的,问题出在请求地址指针这里。多谢  发表于 2013-10-15 10:01

评分

参与人数 1威望 +4 收起 理由
Regsen + 4 很给力!

查看全部评分

奔跑的牛 发表于 2013-10-14 17:08 | 显示全部楼层
本帖最后由 奔跑的牛 于 2013-10-14 17:12 编辑

SSD1963 那边硬件可以 选择数据是8bit 16bit 还是24bit的
跟NUC这边一致 ID读取正确 就可以了。

评分

参与人数 1威望 +4 收起 理由
Regsen + 4

查看全部评分

 楼主| Regsen 发表于 2013-10-14 21:54 | 显示全部楼层
ssd硬件可以选择数据位数的吗?我没有发现呢!我这么疏忽。。
 楼主| Regsen 发表于 2013-10-14 21:56 | 显示全部楼层
奔跑的牛 发表于 2013-10-14 17:08
SSD1963 那边硬件可以 选择数据是8bit 16bit 还是24bit的
跟NUC这边一致 ID读取正确 就可以了。 ...

想要问下奔牛,EBI设置成16位的话,一次性读取的数据宽度是16位而已,设置成8位的话,一次性读取数据宽度是8位,我的理解是这样的。请问是不是这样的
 楼主| Regsen 发表于 2013-10-14 22:14 | 显示全部楼层
本帖最后由 奔跑的牛 于 2013-10-14 23:44 编辑

我看时序图,他读取16位数据的时候也是一次性进行的。如果是这样,设置EBI的数据宽度为16。读取的时候只取出低8位数据也应该对的。但是情况不是这样的,纠结。。


读取16位数据的时候也是一次性进行的。要看看他 命令寄存器是不是8bit。数据寄存器 是16bit?
奔跑的牛 发表于 2013-10-14 23:41 | 显示全部楼层
本帖最后由 奔跑的牛 于 2013-10-14 23:44 编辑

1.SSD1963数据位数 是有硬件可以控制的
2.ID中的 01  61 你已经读出来了,证明控制信号 时序都没问题。

只是 8 bit 16bit的问题  还一个注意 看你贴的SSD1963的读id寄存器是8bit的。
 楼主| Regsen 发表于 2013-10-15 08:25 | 显示全部楼层
奔跑的牛 发表于 2013-10-14 23:41
1.SSD1963数据位数 是有硬件可以控制的
2.ID中的 01  61 你已经读出来了,证明控制信号 时序都没问题。

你好,奔牛。SSD1963控制器的寄存器命令,以及和寄存器命令对应的参数,他们的格式都是8位的。据我了解的情况是,SSD1963控制器与MCU接口电路对于颜色数据的格式倒是可以由寄存器命令来设置的
 楼主| Regsen 发表于 2013-10-15 08:32 | 显示全部楼层
SSD1963可以设置于MCU接口的像素格式,以及设置和LCD连接的像素格式。不过我先试试讲NUC130的EBI数据宽度设置成8位试试
pixel_format.jpg
pixel_format_command.jpg
 楼主| Regsen 发表于 2013-10-15 09:57 | 显示全部楼层
呵呵,问题算是找到了。
其实问题出在了我想当然的地方。。
我上面贴的代码里面,只要将写函数和读函数的定义修改成短整型指针(unsigned short int *)就行了。如果写成整形指针了,我想EBI会因为所求的地址是32位的,而进行两次读取或者两次写入。
EBI_data_width.jpg
 楼主| Regsen 发表于 2013-10-15 10:00 | 显示全部楼层
分给奔牛哥哥了。这么热情的奔牛,大晚上的还来捧贴,这个必须要非常感谢的
 楼主| Regsen 发表于 2013-10-15 10:03 | 显示全部楼层
大家要引以为戒。小问题最后出大篓子的情况希望不要再次发生了
缥缈九哥 发表于 2013-10-15 11:55 | 显示全部楼层
有关EBI可以 看看我博客。http://blog.163.com/yuan_xihua/ ,有驱动ILI9327的。
 楼主| Regsen 发表于 2013-10-15 14:26 | 显示全部楼层
缥缈九哥 发表于 2013-10-15 11:55
有关EBI可以 看看我博客。http://blog.163.com/yuan_xihua/ ,有驱动ILI9327的。 ...

是的,九哥。九哥的有关使用EBI的例子,我下好了,作为参考,学习。再次谢谢九哥啊
地瓜patch 发表于 2013-11-29 23:21 | 显示全部楼层
学习了
学习了
598330983 发表于 2015-2-28 15:06 来自手机 | 显示全部楼层
已经有库函数可以用了,再也不怕写错了
pxh-ic21 发表于 2018-10-16 11:26 | 显示全部楼层
啥子意思,想看下还要啥阅读权限
643757107 发表于 2018-10-16 17:20 | 显示全部楼层
8BIT的宽还是用8BIT的操作函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Try Hard^^

11

主题

557

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部