【摘要】如何快速驱动和调试IC?以下,将采用TM1629A这款芯片来具体讲解一下芯片的使用过程。

【关键词】TM1629A  芯片  驱动  SPI通讯协议  程序

TM1629A是一种带键盘扫描接口的LED驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动、键盘扫描等电路。采用CMOS工艺,显示模式最多可支持16 段×8 位。采用辉度调节电路(占空比8级可调),设置三个外接串行接口(CLK,STB,DIO),采用内置RC振荡 ,内置上电复位电路,内置数据锁存电路,抗干扰能力强, 内置针对LED反偏漏电导致暗亮问题优化电路,采用SOP32的封装形式。管脚定义可见下图图一。

图一  TM1629A管脚定义

TM1629A采用的是SPI(串行外设接口(Serial Peripheral Interface))通讯协议,这是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时),也是所有基于SPI的设备共有的,它们是MISO( Master Input Slave Output,主设备数据输入,从设备数据输出)、MOSI(Master Output Slave Input,主设备数据输出,从设备数据输入)、SCLK(Serial Clock,时钟信号,由主设备产生)、CS(Chip Select, 从设备使能信号,由主设备控制)。

结合上述描述和TM1629A的管脚功能示意图(图二),可以发现该芯片采用的是3根通讯线路(仅传输功能),TM1629A芯片已经在芯片内部将DIN(MISO)口与DOUT(MOSI)口连接在一起重命名为DIO口,因为只需要MCU对芯片进行单向传输,没有必要再引出一个管脚。DIO可暂时认定为MOSI数据输入线,在时钟上升沿输入串行数据,并且是低位先行的LSB传输顺序。CLK即为SCLK时钟输入线,确保主机和从机处于同一时序内。最后STB就是CS片选端口,该引出脚低电平有效,即当该引出脚为低电平时主芯片对此从芯片的操作才有效。继续阅读其他关于该芯片的引脚说明,可以得知芯片有16个段输出(SEG),和8个位输出(GRID)。需要注意的是,无论是驱动共阴极数码管还是驱动共阳极数码管,SEG引脚只能接LED的阳极,GRID只能接LED的阴极,不可反接。

图二  TM1629A管脚功能说明

接下来对TM1629A的时序图进行分析,见图三。当MCU需要向TM1629A芯片写入数据时,需要将STB管脚拉低后方可继续传输,且前面得知数据在时钟的上升沿写入,因此当CLK处于低电平状态时需要将数据预写入缓冲区,在上升沿处才可以将数据真正写入芯片。

图三  MCU向TM1629A写入数据时序图

将上述时序图用程序语言描述:自定义命名一个写入数据过程的函数,并声明需要写入从机的数据D。首先将STB拉低,确保从机芯片正在被选中进行通信;再将CLK拉低准备数据的预写入,因为传输数据为低位先行(LSB),所以将数据D与0X01做与运算,如果为1则预写入1,为0则预写入0;再将CLK拉高,提供一个上升沿,将数据正式写入。最后将数据D向右移一位,准备写入次低位,如此循环8次,写入一个字节。具体程序见程序一。

程序一  MCU向TM1629A写入数据

再分析一下MCU读取芯片的时序图,见图四,后半部分“读取按键数据”可暂时不管。读取数据的步骤与写入数据是差不多的,因为SPI是全双工通讯,MCU每传输一个数据,都会从从机读取一个数据,所以两者的时序图几乎是一致的,完全可以将MCU对从机的写入套用到MCU对从机的读取,因为MCU对从机的读取也可以理解为从机对MCU的写入。

图四  MCU读取TM1629A数据时序图

另外程序的的编写也几乎是一样的,自定义命名一个读取数据过程的函数,定义即将读取的一字节数据“d”,将STB片选拉低对其进行通讯,再将时钟CLK拉低准备数据的预读取,依照LSB低位先行的传输方式,判断此时DIO口的电平状态。如果为低电平就与0X7F相与将预读取的最高位置0,如果是高电平就与0X80相与将预读取的最高位置1(本处对数据的读取采用了“位与运算&”和“位或运算|”,可以再思考如何用“位非运算”来读取),而后再将CLK拉高,提供一个上升沿,正式读取该位。最后再将数据d向右移一位,准备读取次低位,如此循环7次,得到最后的完整的一个字节数据d。这里需要注意的是,移位这个步骤如果在判断DIO状态并赋值之前需要循环八次,如果在赋值之后则只需要循环七次。

程序二  MCU读取TM1629A数据

继续阅读规格书可以得知芯片写入数据到寄存器中有两种方式,一种是地址自加一的模式,另一种就是固定地址写入的方式,相关的写入模式时序图见下图五、图六。

图五  地址自加一写入数据时序图

图六  固定地址写入数据时序图

上述提到的两种写入模式实际上就是结合前面的写入动作对TM1629芯片进行配置后再根据需要实现的目的对芯片进行写入。需要配置的几个参数Command1、Command2和Command3等等,都可以在规格书中找到,具体可见图七-1,图七-2以及图七-3.

图七-1  数据命令设置

图七-2  显示控制命令设置

图七-3  地址命令设置

以上的相关配置我们已经了解了,现在来详细分析地址自加一模式的写入过程。首先是将STB拉低,然后写入一个字节的数据命令模式,根据规定的指令可以得知自加一的数据命令应该设置为0X40,再将STB拉高后再拉低设置连续写入数据的起始地址,因为该芯片的寄存器不多只有16个,因此可以考虑直接从00H寄存器(地址位0XC0)开始自加一写入,等写满16个寄存器之后再将STB拉高,并在写入控制命令之前再拉低STB。而显示控制命令实际上就是显示亮度的控制,一般配置为中等亮度即可。再将上述描述改用程序语言描述,程序可见程序三。产品的全点亮也非常简单,只需要将程序三中Command3(即显示控制命令data_n)的B3位配置为全点亮“1”即可。

程序三  地址自加一写入数据

而固定地址的传输也不会复杂,与地址自加一模式不同的地方就是在数据的写入前需要先设定写入的寄存器地址,适用于特定的控制方式,比如对产品进行漏光检测等。参考的程序可以见程序四,需要配置的为数据写入地址以及需要写入的数据。需要提示的是,显示控制命令没有体现在此程序中,因为有可能需要写入的每个地方亮度配置是不一样的,可以根据实际情况来对其进行配置。

程序四  固定地址写入数据

以上就是该芯片的基础配置内容了,只要在主函数中写一句“display1(0X8F);”即可以全点亮产品了(见图八1-3)。

注:程序可见附件,包含检测漏光的程序,芯片规格书也见附件

图八-1 

图八-2  漏光检测模式

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐