I2C通讯协议具有运行可靠、成本低廉、占用IO资源少等优点,广泛应用于多级通讯中;中颖芯片硬件TWI(两线串行接口)接口完全兼容I2C总线协议。
中颖芯片硬件TWI支持功能:
开漏输出,通讯电平不受VDD影响;
支持主机模式和从机模式;
各个模式均支持发送和接受;
支持多级通讯的仲裁功能;
具有SCL低电平/高电平超时判断;
器件地址可编程,带多个地址屏蔽位,支持广播功能;
支持标准模式(100K)和快速模式(400K);
支持Clock Stretch功能
支持内部上拉电阻功能
中颖芯片硬件TWI注意事项:
硬件TWI在传输ACK/NACK响应信号时,在SCL由低跳高后产生TWI中断标志(TWINT),并在SCL由高跳低时拉低SCL,在TWI中断标志清除后释放SCL;
TWI中断标志(TWINT)在被清除前,TWI通讯会暂停,应用程序必须在TWI中断标志(TWINT)清除前决定后续的动作;
硬件TWI规定通讯过程中SCL总线维持高电平超过TFREE定义的时钟个数时为“空闲”状态,释放总线;此功能无法关闭。
硬件TWI规定参与传输的所有器件,将时钟线SCL维持低电平超过CNT定义的时钟个数时为“总线超时”,释放总线;此功能无法关闭。
硬件TWI通讯注意事项:
TWI中断标志(TWINT)置起后,软件配置TWI即将执行的动作(如发送数据、回应ACK/NACK、发送STO/清除STA信号等)后方可清除TWI中断标志(TWINT);
硬件TWI作为从机时,在每次通讯开始前,提前将应答信号准备好(AA=1);
为了增强通讯抗干扰能力,程序中建议增加SCL高电平超时判断、总线超时判断、特殊状态机(00H)判断;
硬件TWI操作流程示意图:
硬件TWI出错案例:
硬件TWI通信错误(从机)
原因:外界存在干扰。
当从机TWI状态机为B8时,从机继续向主机发送数据,且准备NACK信号,此时若外接干扰造成从机识别主机回传的信号非正常信号,则从机状态机会跳到非正常状态机中,此时程序中未对应答信号做处理,造成当此轮通讯结束后,在开始下一轮通讯时,从机无ACK信号造成无法响应主机通讯。
TWI默认开启SCK高电平超时功能,待发送完最后一个字节,此时AA清零;此时若存在因主机通讯或干扰造成SCK高电平超时时,TWI模块会自动释放总线,此时AA仍然保持为之前的NACK状态,造成在下一轮通讯时无法响应主机通讯,通讯异常;
改善方案: 在传输完成最后一个字节数据后AA置位,这样即使发生异常情况,待下一组时序到来时,从机仍能够正常响应主机;在程序其他异常状态下置位AA,即使通信受到干扰,跳转到异常状态,仍能进行下一次的通讯响应。下图列出TWI中断代码改善前后的代码。
图1改善前
图2改善后
审核编辑:刘清
-
TWI
+关注
关注
0文章
7浏览量
8029 -
SCL
+关注
关注
1文章
239浏览量
16979 -
I2C接口
+关注
关注
1文章
124浏览量
25012 -
VDD
+关注
关注
1文章
310浏览量
32453
原文标题:硬件TWI使用说明及案例
文章出处:【微信号:SINO_25181447,微信公众号:中颖电子】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
全志R128 SDK HAL 模块开发指南——TWI
【LeMaker Guitar试用体验】9.Lemuntu系统twi接口分析1
TWI为什么会分出800KHz的工作频率呢
Arduino/8266 I2C无法找到与twi.h一起使用的twi.cpp怎么解决?
AVR TWI读写范例程序(AT24C02)
AVR单片机的TWI总线的原理及应用
![AVR单片机的<b class='flag-5'>TWI</b>总线的原理及应用](https://file1.elecfans.com//web2/M00/A5/A8/wKgZomUMOXWAFn-DAABvZIQrLy4204.jpg)
AVR单片机的TWI总线的原理是怎样的有什么样的应用
![AVR单片机的<b class='flag-5'>TWI</b>总线的原理是怎样的有什么样的应用](https://file.elecfans.com/web1/M00/69/39/pIYBAFvSvQCAcWAtAABfsavOwXE184.png)
将TWI模块作为I2C主器件
AVR315:将TWI模块作为I2C主器件
![AVR315:将<b class='flag-5'>TWI</b>模块作为I2C主器件](https://file.elecfans.com/web1/M00/E8/40/pIYBAGBj4YKAdLieAABE1KxnKtQ856.jpg)
评论