如何创建I2C转UART转换器
日期:2022-12-29
如何使用GreenPAK SLG46855V或任何其他GreenPAK系列的可用资源创建I2C转UART转换器
作者:Volodymyr Paterak,高级应用工程师,瑞萨电子
SLG46855V是一个小型封装(1.6*2.0mm)的GreenPAK芯片,集成大量数字逻辑资源和2.3V-5.5V的宽电源范围。它内部有很多触发器(DFF/LACTH)、查找表(LUT)和计数器/延迟器(CNT),可以配置为各种不同的功能。触发器可用于创建移位寄存器,查找表可作为多路复用器,计数器/延迟可作为频率发生器。并且可以容易地修改设计以适应不同的总线速度。
集成电路间总线,也称为I2C,是一种非常常见的双向通信总线,它使用两条线路在器件之间发送串行信息。该总线用于微控制器系统中的短距离通信。
图1.I2C主机、UART和SLG46855之间的连接框图
基本I2C通信使用8位(bit)/1字节(Byte)的模式进行传输。在正常状态下,SCL和SDA线为高电平。在SCL为高的时候,将SDA线拉低,即为通信从起始位开始。在SCL的每个时钟脉冲期间传送一个比特(bit)。数据首先传输最高有效位(MSB)。SDA线上的数据必须在时钟周期的高电平期间保持稳定,因为SCL为高时SDA线上发生的变化会被解释为控制命令(START或STOP位)。每传输8个比特位(bit)后生成一个ACK(应答)比特位(bit)。该比特位(应答/ACK)由接收机向发射机发送,表明发射机发送的这8个比特位(bit)已被接收机成功接收,并且可以继续发送下一个字节(Byte)。
I2C协议的一个特点是时钟延展。从器件可以在接收到其尚未准备好处理更多数据的减弱指示之后将SCL线保持为低。主机必须等待SCL线变高。时钟延展是从器件控制SCL线的唯一时机。
通用异步收发器(UART)是最简单的通信总线之一,可以只用一根数据线。
基本UART通信用于传输具有奇偶校验位的8位或1字节的数据。在正常状态下,TX线为高电平。当TX线在一个时钟周期内变低时,即为通信从起始位开始。数据首先传输最低有效位(LSB)。在数据位之后,紧接着传输奇偶校验位,该奇偶校验位描述所传输字节的偶数性或奇数性。
图2.智能控制器GreenPAK芯片内部模块框图
GreenPAK设计
设计思路是使用SLG46855存储8位I2C数据并拉低SCL线。如果SCL线被拉低,I2C主机将停止传输。下一步SLG46855将把这个8位数据推送到UART,然后释放SCL线以接收下一个8位数据。图1显示了此应用的I2C主控器、UART和SLG46855之间的连接框图。
主要问题是I2C协议首先传输最高有效位(MSB)而UART首先传输最低有效位(LSB)。这就是为什么我们需要在移位寄存器中保存8位数据,并像堆栈存储器一样按相反顺序推出这些位。但是I2C主器件和UART从器件可以具有不同的总线速度。
输入引脚PIN5(SDA)和PIN6(SCL)配置为数字输入/输出模式(分时复用)。当接收I2C命令时,它们配置为无施密特触发器的数字输入模式,在发送UART命令时配置为输出模式1x开漏NMOS。当DIR信号为1时,PIN6(SCL)配置为输出模式1x漏极NMOS,并拉低SCL线以进行时钟延展。此时,I2C主机停止传输数据,并等待SCL线释放。PIN5(SDA)配置为数字输出,以在接收完每8位数据之后传输应答位(ACK)。
DFF4-DFF8、DFF18和Pipe Delay用于创建移位寄存器矩阵,存储8位数据。3个2位查找表LUT1-3、3位查找表LUT6、3位查找表LUT7、3位查找表LUT11-13和3位查找表LUT8用于控制移位寄存器矩阵的方向。如果DIR信号为“1”,则从SDA引脚推入8位数据到移位寄存器矩阵,当DIR信号是“0”时,则推出这8位数据。在默认状态下,DIR信号为“1”,表示该设计( GreenPAK 芯片)已经准备好存储来自(配置为数字输入模式的)SDA和SCL引脚的数据。在每个SCL引脚的上升沿时刻,从SDA引脚推入数据到移位寄存器矩阵中。I2C命令的最高有效位MSB位存储在Pipe Delay中。该位从PIN5(SDA)输入,依次通过3位LUT8、DFF18、2位LUT3、2位LUT1、DFF4、3位LUT11、DFF5、3位LUT12、DFF6、3位LUT13、DFF7、3位LUT6、DFF8、3位LUT7。当SLG46855发送UART命令时,最高有效位位MSB以相反的顺序通过PIN7(UART_TX)输出。CNT0用于计数SCL引脚上的时钟个数,计数到8个时钟后DIR信号变为“0”。当DIR信号为“0”时,设计拉低SCL线,I2C主控器等待,直到SCL线释放为高。CNT2产生CLK信号以将8位数据从移位寄存器矩阵推出到PIN7 (UART_TX)。您可以使用I2C命令更改UART波特率。CNT2计数器的计数据值被存储在寄存器0x9A中。DFF3用于生成UART命令的起始位。CLK信号定义UART的波特率。当最后一位数据被推出移位寄存器矩阵后,DLY7将在SDA线上产生一个应答信号/ACK(拉低SDA线)。
完整的设计文件可在www.renesas.com/cm-347-gp-file上找到。它是在基于免费GUI(图形化设计界面)的GreenPAK Designer软件中创建的,该软件是Go Configure software Hub的一部分。
为了测试设计,I2C主机将数据0x00、0x01、0x02、0x03、0x04、0x05、0x06、0x07写入地址0x01。
图3.传输试验
图4.放大前面的2个字节
该设计( GreenPAK 芯片)仿真结果分为几个部分。
对于第1部分,I2C主机生成起始位,并向地址为0x01的从器件(UART器件)发送写入命令。该设计( GreenPAK 芯片)接收数据并将SCL线拉至GND。在PIN 7上,用户可以观察UART起始位,并从I2C主机转换从机(UART器件)地址。该设计GreenPAK芯片释放SCL线,并将SDA线拉至GND以产生ACK/应答信号。接着I2C主机发送第2部分的数据0x00、第3部分的数据0xAA和第4部分的数据0xFF给从机(UART器件)。
图5.仿真结果
结论
本文演示了如何使用GreenPAK芯片创建I2C转UART转换器。该设计限于8位的数据长度。SLG46855在一个小封装(1.6*2.0mm)中有大量数字资源,可用于创建独特的数字设计。
www.renesas.com
推荐行业新闻更多