ag真人试玩平台-ag真人网站

 
 立即注册
1
返回列表
查看: 2834|回复: 50

硬件spi驱动tm1640 -ag真人试玩平台

[复制链接]
发表于 2023-5-7 17:38:22 | 显示全部楼层 |
tm1640 是一种led(发光二极管显示器)驱动控制专用电路,内部集成有mcu 数字接口、数据锁存器、led 驱动等电路。本产品性能优良,质量可靠。主要应用于电子产品led显示屏驱动。采用sop28的封装形式。

本文仅以驱动tm1640为例,实际上,知道原理后,很容易扩展到其它类似芯片,如tm1668、tm1621等。

tm1640连续写时序如下图:



这个时序既不是i2c,也不是spi,但是,一部分像i2c,有start、stop,一部分像spi。
要实现这个控制时序,有2个要点:数据在时钟低电平时改变;时钟高电平时间至少维持1μs。控制这种芯片,一般做法是纯软件照时序图控制,但是,那样会消耗很多cpu时间。

对于有硬件spi接口的芯片来说,只要简单变通一下,就可以用软硬结合的办法控制tm1640,大大减少cpu时间占用。

大部分芯片spi时序图是这样,只需控制通讯速率就能满足tm1640控制时序。


不过,有的芯片spi时序是这样,需要硬件上处理一下才能满足tm1640控制时序。


控制要点:
(1)确保数据在时钟低电平时改变数据,对于那些spi接口在时钟高电平时改变数据的芯片,在时钟线加rc积分电路把时钟上升沿推后,确保数据在时钟低电平时改变。


部分rc参数测试结果如下:


(2)初始化时不使能spi,只需用一般gpio方式控制mosi和sclk输出高电平。
(3)开始发送数据时,用一般gpio方式控制mosi和sclk输出高电平输出一个启动信号(mosi输出电平一会后sclk输出低电平)。
(4)spi接口初始化配置为:先发送数据低位、cpol=0、cpha=1(空闲时时钟=低电平,数据在第二个边沿采样),使能spi,使能spi中断(数据量不多,dma意义不大),发送command1:设置数据。
(5)在spi中断服务程序中禁用spi,用一般gpio方式控制mosi和sclk输出一个停止信号和一个启动信号,然后使能spi,发送command2:设置地址。
(6)中断方式继续发送数据直到显示数据发送完成。
(7)最后一个字节显示数据发送完成后的spi中断禁用spi,用一般gpio方式控制mosi和sclk输出一个停止信号和一个启动信号,然后使能spi,发送command3:控制显示。
(8)发送command3后的spi中断禁用spi,用一般gpio方式控制mosi和sclk输出一个停止信号,一次显示数据输出完成。

上述处理信号时序如下:


实际信号如下:


扩展应用
对像tm1668那样多了stb通讯线的芯片,只需在输出stb信号的地方禁用spi,输出stb信号,然后使能spi继续通讯即可。


对需要一个前导位 8数据位的spi通讯,只需禁用spi,输出前导位,然后再使能spi发送8位数据即可。


22楼更新代码:

spi,

打赏

家元 100 理由
jf201006 20 謝謝分享
hongo 20 原創內容
cushion 20 優秀文章
aping365 20 優秀文章
慕名而来 20 優秀文章
发表于 2023-5-7 17:53:15 | 显示全部楼层
lz高手,研究的狗透彻
发表于 2023-5-7 18:03:23 | 显示全部楼层
这才是真正研究到位的!赞!!
发表于 2023-5-7 21:04:41 | 显示全部楼层
楼主你好,关于本帖中的最后一个时序图片的实现,我曾经也想利用i/o模拟发送d/cx加硬件spi的方式实现,但是用stc单片机弄了很久未能实现,因为想不到可以用阻容延时来改变起始电平状态所以一直未能实现,很希望楼主能贴一段stc单片机适用的关于这种type c时序的硬件spi代码来学习一下,先谢了。
发表于 2023-5-7 21:49:39 | 显示全部楼层
tm1640是好东西,我开始买了5片作验证,成功后又买了20片作备用。

看我的程序     
 楼主| 发表于 2023-5-7 22:20:34 来自手机浏览器 | 显示全部楼层
慕名而来 发表于 2023-5-7 21:04
楼主你好,关于本帖中的最后一个时序图片的实现,我曾经也想利用i/o模拟发送d/cx加硬件spi的方式实现,但是 ...

如果要控制的设备也是spi接口只是多一位数据的话,是不需要加rc延时的,只需程序上加一位数据即可。我手上没有需要9位格式的通讯的芯片,有空我写一段你试下能不能用。
发表于 2023-5-7 23:27:03 | 显示全部楼层
其实还是io模拟更好,类似i2c, 这种读写数据量很小,也只有键盘扫描或者显示更新才会运行,基本不消耗什么资源, 大可不必简单问题复杂化

spi资源更珍贵,稍微做个复杂点的,spi口都不够用,64/100脚的stm32通常3个spi, 有些spi还会别的复用冲突
发表于 2023-5-8 00:15:18 | 显示全部楼层
反复看了这个帖子,一直不明白用硬件spi驱动tm1640的意义是什么,tm1640的数据量不大,对速度要求不高,任意单片机用io模拟就完全可以了,本身就不是标准的iic,也不是标准的spi。
 楼主| 发表于 2023-5-8 01:43:33 来自手机浏览器 | 显示全部楼层
inthsunshine 发表于 2023-5-7 23:27
其实还是io模拟更好,类似i2c, 这种读写数据量很小,也只有键盘扫描或者显示更新才会运行,基本不消耗什么 ...

本文只是一种方法来讲,当spi接口紧缺而且有更重要的用途,当然要取舍,如果空闲,为什么不用呢?
 楼主| 发表于 2023-5-8 01:54:38 来自手机浏览器 | 显示全部楼层
595953427@qq 发表于 2023-5-8 00:15
反复看了这个帖子,一直不明白用硬件spi驱动tm1640的意义是什么,tm1640的数据量不大,对速度要求不高,任 ...

我个人的习惯是,能用硬件接口通讯就不用软件模拟,就这个tm1640来说,刚开始不加rc电路之前无法点亮,已用软件模拟方式点亮了,但这不是我想要的,于是,想出了这种方法。
发表于 2023-5-8 08:30:30 来自手机浏览器 | 显示全部楼层
mmxx2015 发表于 2023-5-8 01:54
我个人的习惯是,能用硬件接口通讯就不用软件模拟,就这个tm1640来说,刚开始不加rc电路之前无法点亮,已 ...

我的看法完全相反,能用io模拟解决的就不用硬件解决,除非数据量大,速度要快,要用dma,否则就用io模拟
发表于 2023-5-8 09:38:20 | 显示全部楼层

本文只是一种方法来讲,当spi接口紧缺而且有更重要的用途,当然要取舍,如果空闲,为什么不用呢? ...

不过从你的操作过程看,远比io模拟更复杂, 一会开中断一会关中断;io模式一会复用,一会通用,硬件上还要加rc, rc取值还有讲究
 楼主| 发表于 2023-5-8 10:00:21 来自手机浏览器 | 显示全部楼层
本帖最后由 mmxx2015 于 2023-5-8 10:01 编辑
inthsunshine 发表于 2023-5-8 09:38
不过从你的操作过程看,远比io模拟更复杂, 一会开中断一会关中断;io模式一会复用,一会通用,硬件上还 ...


不用关中断啊,只需在中断中禁用spi,发完stop、start再使能spi。
rc的值是可以大概计算的。
发表于 2023-5-8 11:11:08 | 显示全部楼层

如果要控制的设备也是spi接口只是多一位数据的话,是不需要加rc延时的,只需程序上加一位数据即可。我手 ...

多谢,期待看到你的代码,其实我的这个三线spi屏也已经驱动成功很久了,现在使用中的是通过可寻址位变量逐位输出模拟spi的模式,用stc硬件驱动也测试成功了只是需要发送两次8位数据,一直想通过i/o模拟一位数据 8位spi硬件的模式驱动却无法实现,看到你的实验又勾起了我的兴趣想再玩一玩。我现在用的代码如下,这个代码看似复杂其实效率是很高的,stc8h8k64tl单片机时钟频率超过22m就无法通讯了,这种c接口的屏幕貌似通讯速度快不起来的。

  1. voidwrite_data(u8 dat)
  2. {
  3. bitdata=dat;
  4. sda=1;
  5. scl=0;scl=1;//d/c=1写数据
  6. sda=bit7;
  7. scl=0;scl=1;
  8. sda=bit6;
  9. scl=0;scl=1;
  10. sda=bit5;
  11. scl=0;scl=1;
  12. sda=bit4;
  13. scl=0;scl=1;
  14. sda=bit3;
  15. scl=0;scl=1;
  16. sda=bit2;
  17. scl=0;scl=1;
  18. sda=bit1;
  19. scl=0;scl=1;
  20. sda=bit0;
  21. scl=0;scl=1;
  22. }
复制代码


头像被屏蔽
发表于 2023-5-8 14:00:22 | 显示全部楼层
stc8h4k64tl-45mhz-lqfp48,最高频率可以达到45m,放心使用。
发表于 2023-5-8 18:27:06 来自手机浏览器 | 显示全部楼层
慕名而来 发表于 2023-5-8 11:11
多谢,期待看到你的代码,其实我的这个三线spi屏也已经驱动成功很久了,现在使用中的是通过可寻址位变量 ...

速度太快通迅异常,有没有可能是芯片io口的速度跟不上cpu的速度?

一般spi接口的液晶屏的接口速度是非常快的
发表于 2023-5-8 21:23:16 | 显示全部楼层

速度太快通迅异常,有没有可能是芯片io口的速度跟不上cpu的速度?

一般spi接口的液晶屏的接口速度是非常 ...

这我就不太清楚了,我也只是能做到模拟时序实现基本驱动,如楼主那样清晰的分析原理我还做不来。
发表于 2023-5-8 22:07:52 | 显示全部楼层

这我就不太清楚了,我也只是能做到模拟时序实现基本驱动,如楼主那样清晰的分析原理我还做不来。 ...

一般的芯片都是cpu的速度比外设的速度快,比如stm32f103,cpu速度是72m,gpio的速度最高只有50m,如果cpu不停的让io输出高低电平,可能io会反应不过来,导致实际输出的波形出错,然后导致通讯出错。
发表于 2023-5-8 22:21:39 来自手机浏览器 | 显示全部楼层
大多情况下是cpu性能过剩,一般项目不会这么折腾,但有研究的意义
发表于 2023-5-8 22:24:38 | 显示全部楼层

一般的芯片都是cpu的速度比外设的速度快,比如stm32f103,cpu速度是72m,gpio的速度最高只有50m,如果cpu ...

明白了,找时间我用stm32再测试一下这段代码,谢谢。
1
返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

app||小黑屋|关于ag真人试玩平台|联系ag真人网站|法律条款|ag真人试玩平台-ag真人网站

gmt 8, 2023-9-12 10:50 , processed in 0.218401 second(s), 12 queries , redis on.

powered by

© 2006-2023 smzj.net

返回列表
网站地图