打印
[技术问答]

新塘EBI控制LCD驱动芯片,命令写入错误,读取也不正确

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

                N=READ_SSD1963();

                C=READ_SSD1963();

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

Touch.pdf

1.32 MB, 阅读权限: 20

硬件原理图

沙发
Regsen|  楼主 | 2013-10-14 16:29 | 只看该作者
请大家多多指教,有关任何想法都可以告诉我,我可以仿真来测试下。现在我测试芯片id,得到的仿真结果贴出来

ssd_id.jpg (15.77 KB )

读取的SSD1963前三个ID参数

读取的SSD1963前三个ID参数

使用特权

评论回复
板凳
Regsen|  楼主 | 2013-10-14 16:41 | 只看该作者
数据手册上正确的ID参数是0x01 0x57 0x61 0x01 0xff,见数据手册44页

SSD1963_ID.jpg (184.43 KB )

SSD1963_ID.jpg

使用特权

评论回复
地板
奔跑的牛| | 2013-10-14 16:53 | 只看该作者
本帖最后由 奔跑的牛 于 2013-10-14 16:57 编辑

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

使用特权

评论回复
评论
Regsen 2013-10-15 10:01 回复TA
是的,问题出在请求地址指针这里。多谢 
评分
参与人数 1威望 +4 收起 理由
Regsen + 4 很给力!
5
奔跑的牛| | 2013-10-14 17:08 | 只看该作者
本帖最后由 奔跑的牛 于 2013-10-14 17:12 编辑

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

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
Regsen + 4
6
Regsen|  楼主 | 2013-10-14 21:54 | 只看该作者
ssd硬件可以选择数据位数的吗?我没有发现呢!我这么疏忽。。

使用特权

评论回复
7
Regsen|  楼主 | 2013-10-14 21:56 | 只看该作者
奔跑的牛 发表于 2013-10-14 17:08
SSD1963 那边硬件可以 选择数据是8bit 16bit 还是24bit的
跟NUC这边一致 ID读取正确 就可以了。 ...

想要问下奔牛,EBI设置成16位的话,一次性读取的数据宽度是16位而已,设置成8位的话,一次性读取数据宽度是8位,我的理解是这样的。请问是不是这样的

使用特权

评论回复
8
Regsen|  楼主 | 2013-10-14 22:14 | 只看该作者
本帖最后由 奔跑的牛 于 2013-10-14 23:44 编辑

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


读取16位数据的时候也是一次性进行的。要看看他 命令寄存器是不是8bit。数据寄存器 是16bit?

使用特权

评论回复
9
奔跑的牛| | 2013-10-14 23:41 | 只看该作者
本帖最后由 奔跑的牛 于 2013-10-14 23:44 编辑

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

只是 8 bit 16bit的问题  还一个注意 看你贴的SSD1963的读id寄存器是8bit的。

使用特权

评论回复
10
Regsen|  楼主 | 2013-10-15 08:25 | 只看该作者
奔跑的牛 发表于 2013-10-14 23:41
1.SSD1963数据位数 是有硬件可以控制的
2.ID中的 01  61 你已经读出来了,证明控制信号 时序都没问题。

你好,奔牛。SSD1963控制器的寄存器命令,以及和寄存器命令对应的参数,他们的格式都是8位的。据我了解的情况是,SSD1963控制器与MCU接口电路对于颜色数据的格式倒是可以由寄存器命令来设置的

使用特权

评论回复
11
Regsen|  楼主 | 2013-10-15 08:32 | 只看该作者
SSD1963可以设置于MCU接口的像素格式,以及设置和LCD连接的像素格式。不过我先试试讲NUC130的EBI数据宽度设置成8位试试

pixel_format_command.jpg (124.82 KB )

pixel_format_command.jpg

pixel_format.jpg (201.96 KB )

pixel_format.jpg

使用特权

评论回复
12
Regsen|  楼主 | 2013-10-15 09:57 | 只看该作者
呵呵,问题算是找到了。
其实问题出在了我想当然的地方。。
我上面贴的代码里面,只要将写函数和读函数的定义修改成短整型指针(unsigned short int *)就行了。如果写成整形指针了,我想EBI会因为所求的地址是32位的,而进行两次读取或者两次写入。

EBI_data_width.jpg (44.81 KB )

EBI_data_width.jpg

使用特权

评论回复
13
Regsen|  楼主 | 2013-10-15 10:00 | 只看该作者
分给奔牛哥哥了。这么热情的奔牛,大晚上的还来捧贴,这个必须要非常感谢的

使用特权

评论回复
14
Regsen|  楼主 | 2013-10-15 10:03 | 只看该作者
大家要引以为戒。小问题最后出大篓子的情况希望不要再次发生了

使用特权

评论回复
15
缥缈九哥| | 2013-10-15 11:55 | 只看该作者
有关EBI可以 看看我博客。http://blog.163.com/yuan_xihua/ ,有驱动ILI9327的。

使用特权

评论回复
16
Regsen|  楼主 | 2013-10-15 14:26 | 只看该作者
缥缈九哥 发表于 2013-10-15 11:55
有关EBI可以 看看我博客。http://blog.163.com/yuan_xihua/ ,有驱动ILI9327的。 ...

是的,九哥。九哥的有关使用EBI的例子,我下好了,作为参考,学习。再次谢谢九哥啊

使用特权

评论回复
17
地瓜patch| | 2013-11-29 23:21 | 只看该作者
学习了
学习了

使用特权

评论回复
18
598330983| | 2015-2-28 15:06 | 只看该作者
已经有库函数可以用了,再也不怕写错了

使用特权

评论回复
19
pxh-ic21| | 2018-10-16 11:26 | 只看该作者
啥子意思,想看下还要啥阅读权限

使用特权

评论回复
20
643757107| | 2018-10-16 17:20 | 只看该作者
8BIT的宽还是用8BIT的操作函数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Try Hard^^

11

主题

557

帖子

0

粉丝