TWI协议

2023-12-21 15:04:54

本篇文章的TWI协议介绍来自于SH367309数据手册

一、TWI 串行通讯接口特性

  • 两线模式,简单快捷
  • 只支持从机模式(Slave)
  • 允许发送数据(Transmitter)和接收数据(Receiver)
  • 具有低电平总线超时判断(Timeout)
  • 支持CRC8校验
  • IDLE状态和SLEEP状态下通信可唤醒系统

二、数据传输格式?

? ? ? ? 数据传输中数据线上的每一个位的传输均需要时钟线上的脉冲。在时钟高电平是数据线应该保持稳定,但是开始条件和终止条件时不需要遵守这个规定。

? ? ? ? 和IIC通讯协议相似,TWI定义了两个特殊的波形:起始条件和终止条件。在时钟线为高电平的时候数据线的下降沿定义为起始条件和终止条件之间,总线定义为“busy”状态。其他主机不应该去试图发起传输。在“busy”状态下,如果主机再一次发送起始条件,那么就定义为“重复起始条件”,表示主机不放弃总线的情况下开始一次新的传输。发送重复起始条件后,总线仍处于“busy”状态,一直到总线出现终止条件。

????????所有的数据包(包括地址包)均有9位组成,包括1个字节和一个应答位。主机负责发出时钟和起始以及终止条件,接收这负责给出应答信号。接收者通过在第九个时钟脉冲处将数据线拉低发出“应答”信号;或维持第九个脉冲处维持高电平表示“不应答”信号。当接收放接收到最后一个字节,或因为某种原因没有继续接收数据的时候,应回应“不应答”信号。TWI采用从高到低诸位进行传输。

????????一次传输通常包括一个起始条件,地址+读写位,一个或者多个数据包和一个终止条件。仅仅包含起始条件和终止条件的数据格式是不合通讯规则的。值得注意的是“线与”结构给主机和从机之间的握手信号提供了方便。当主机相对太快或者从机需要处理其他事物的时候,从既可以通过拉低时钟线的低电平时间,从而降低通讯频率。从机可以拉低时钟线的低电平周期但不会影响到时钟线高电平的周期

三、软件模拟时序

基本的开始信号,终止信号,发送和接收一个字节,有无应答位和IIC一致,不同点如下

(1)写n个寄存器

开始信号+从机地址&W+ack+寄存器地址+ack+(数据+ack)*n+CRC+uack+停止信号

(2)读n个寄存器

开始信号+从机地址&W+ack+(读取数据长度1)*n+ack+开始信号+从机地址&R+ack+(数据+ack)*n+CRC+uack+停止信号

四、如何计算CRC校验

unsigned char CRC8cal(unsigned char *p, unsigned char Length) 
{    
    unsigned char crc8 = 0;    
	for(; Length > 0 ; Length--)
	{    
        crc8 = CRC8Table[crc8^*p];    
	    p++;    
    } 
    return(crc8);       
}

文章来源:https://blog.csdn.net/m0_61973119/article/details/135128576
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。