OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4165|回复: 8

ST7789V读取寄存器时序异常

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-6-20
在线时间
5 小时
发表于 2019-12-10 15:05:10 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 O-Y-T 于 2019-12-10 15:30 编辑

使用ST7789V的 3-line Serial接口

在驱动液晶之前,为了测试连接及时序是否正常,尝试先读取设备ID,参看数据手册Read Function部分,读取设备ID,以及后面04H寄存器部分


1.png 2.png

可知在写完命令(d/c=0)后,应该有8bit的dummy(空周期)之后才能正常读数,04H的flow chart中同样提供了信息
4.png
接下来贴出实现代码:
unsigned int Serial_ReadId(void)
{
    unsigned short addr=0x0004;
    unsigned int id=0;
    addr|=(LCD_COMMAND<<8);
    SDA_Write();
    LCD_CS_H;
    LCD_SCL_L;
    delay_ns(60);       //预留时间让引脚状态固定
    LCD_CS_L;
    for(int i=8;i>=0;i--)//传输9个bit
    {
        if((addr>>i)&0x0001)
            LCD_SDA_H;
        else
            LCD_SDA_L;
        delay_ns(60);
        LCD_SCL_H;
        delay_ns(60);
        LCD_SCL_L;
    }                       //写入地址
    delay_ns(60);
    SDA_Read();
    for(int i=31;i>=0;i--){   
        LCD_SCL_H;
        delay_ns(60);               
        LCD_SCL_L;
        delay_ns(60);   
        if(i<=31)
            id|=(SDA_READ<<i);
    }                      //读出id
    LCD_CS_H;
    delay_ns(60);
    return id;   
}


上述代码读出id为0x858552ff,上述代码没有加dummy clock,读出数据不太正常,按照上面的分析,读数应该为0x**858552,其中**部分对应8bit 的dummy clock,理论上应该为任意值,考虑到SDA有上拉,应该为0xff858552

但如果按照手册,加了8bit dummy clock后读数就会变成0x008552ff,于是我怀疑是不是数据手册有疏漏,于是试了试读其他寄存器

当然,如果只是这样就不会浪费大家时间了,我再次尝试读取DAH/DBH/DCH

3.png 按照数据手册,这三个寄存器分别是ID的第1/2/3个byte,也即0x85,0x85,0x52,且读取这三个寄存器不需要dummy clock
同样用上面的程序读取之后,当然改成读取8bit,得到的值为0x0b/0x0b/0xa5

补充:
1.主频72Mhz,MCU为 STM32F103C8

可能原因:
1.延时问题,仿真和实际运行均为上述结果,故不可能
2.时序不正确,SDA在写完地址后确实有数据返回,故不可能
3.芯片手册不对应,粗略的看了一下矽创的有3-line serial接口的芯片,时序和dummy clock部分都是一样的

想了两天还是没找到原因,希望有做过的大神不吝赐教,或者有底层驱动可以参考一下




最佳答案

查看完整内容[请看2#楼]

自己来回答一下,事实上读驱动的问题还是这样,读出来的不对 但是写没什么问题,所以放弃读寄存器了 这个问题也不算解决,不过我看市面上大部分的代码和例程,甚至询问液晶厂厂家给出来的答复也是一般不读寄存器 总之先结题吧,要是有人遇到这个问题拗不过去,不妨先试试直接写sleep out 和 display on 寄存器看看液晶能否被点亮,能够点亮一般是时序没啥问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2016-6-20
在线时间
5 小时
 楼主| 发表于 2019-12-10 15:05:11 | 显示全部楼层
自己来回答一下,事实上读驱动的问题还是这样,读出来的不对
但是写没什么问题,所以放弃读寄存器了
这个问题也不算解决,不过我看市面上大部分的代码和例程,甚至询问液晶厂厂家给出来的答复也是一般不读寄存器
总之先结题吧,要是有人遇到这个问题拗不过去,不妨先试试直接写sleep out 和 display on 寄存器看看液晶能否被点亮,能够点亮一般是时序没啥问题
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-12-10 16:13:59 | 显示全部楼层
帮顶                                               
成功没有捷径
回复

使用道具 举报

5

主题

424

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1020
金钱
1020
注册时间
2014-9-4
在线时间
199 小时
发表于 2019-12-10 16:55:44 | 显示全部楼层
顶一顶
回复

使用道具 举报

0

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2019-9-24
在线时间
33 小时
发表于 2019-12-11 14:35:21 | 显示全部楼层
帮顶            
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-8-8
在线时间
1 小时
发表于 2020-3-3 18:45:45 | 显示全部楼层
最近两天在RDA平台调试ST7789V,遇到了和楼主同样的问题,楼主可以抓取波形分析一下。其实在我来看,dummy clock 其实就是一个时钟周期,而并不是发送8bit dummy clock。看下读取32bit的时序图,就可以理解了 。。真正要读取的不是4个字节,而是3个字节。ST7789V会在你发送0x04h 后的一个时钟周期(dummy clock)后开始控制SDA
回复

使用道具 举报

10

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2019-9-15
在线时间
126 小时
发表于 2020-6-2 10:18:33 | 显示全部楼层
你好,可以分享一份,7789得码源吗?谢谢
回复

使用道具 举报

7

主题

98

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2020-11-13
在线时间
135 小时
发表于 2020-12-8 16:03:07 | 显示全部楼层
O-Y-T 发表于 2019-12-10 15:05
自己来回答一下,事实上读驱动的问题还是这样,读出来的不对
但是写没什么问题,所以放弃读寄存器了
这个 ...

哥们,spi接口刷屏速度如何?用过rgb接口吗?求支援
回复

使用道具 举报

1

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2022-11-1
在线时间
25 小时
发表于 2023-12-4 13:14:17 | 显示全部楼层
LCD_COMMAND的值是多少?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 17:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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