一、引言
串行总线的设计较为简单, 但速度较低, 在FPGA提供资源中也存在着高速串行资源, 像HDMI中就常用到的serdese就是常用的串并转换的接口, 本文主要分析是较为低速的三种串行总线接口协议UART, SPI (三线制) , IIC。
二、UART串行总线时序设计及原理
在单片机中我们上位机 (PC) 控制下位机经常用到串口助手, 在一些大型器件的低速信息传输中的RS232都是UART的一种。芯片上一根总线用来接收数据的RXD (Receive Data) , 一根总线用于发送数据TXD (Transmit Data) 。在URAT未传输数据时默认应保持高电平, 传输的第一个数据前将数据线提前拉低标志数据的开始, 在一个8bit数据发送结束后将数据线拉高标志数据截止。这既是UART的传输协议。在实验中UART的驱动芯片使用的是PL2303。在芯片的众多引脚中实际用到的引脚并不多, 。真正与FPGA开发板连接的只有RXD和TXD两个引脚, 假定现在有一个串口助手他的传输速率为9600波特率, FPGA的晶振时钟为50M, UART传输一个字节就需要52070个时钟周期。前面提到UART传输时默认是高电平起始位时将信号线拉低。则在接收时开始接受数据的起始点就是信号线的下降沿, 因为起始位, 终止位各占用数据线上的1bit, 所以需要8bit数据在发送端发送数据的10bit中的第2~9bit。同时为满足传输数值时的稳定状态还需要消抖处理和同步到时钟网络, 通过在不同时段的采集最终将8bit的串行数据提取并拼接成并行数据。基本时序如图1。FPGA做发送端时对数据的处理逻辑是相反的, 每个数据对应有一个标志位, 在标志位到来时先将信号线拉低并计数, 因此加计数器对bit计数, 当计到8时直接将信号想拉高即可代表截至位。时序如图2。
三、SPI串行总线设计 (FLASH类)
对于SPI总线来说, 它的时序要与实际硬件配合使用, 以M25P64为例进行分析, 并参照相关硬件手册。SPI三线制的接口有CS_n (片选信号) , CLK (时钟) , D (数据线) 线。其中SCL默认为低电平, D的控制方式和UART的控制方式有相同之处, 默认时都是高电平。
对于CS_n信号, 在传输有效数据时一定要为低电平。
在配置SPI总线数据时SCL时钟线的频率是根据相关硬件的数据手册设计的, 对应不同硬件的驱动时钟略有不同。对应M25P64采用12.5M的时钟时采用4分频, (原始时钟为50M) 数据线上的数据为8bit换算出来一个结果, 在有数据传输时需要32个时钟周期。M25P64在配置完数据后需要等待其时间远小于32个时钟周期。与数据的32计数器可以共用。对应不同芯片配置还需参照手册。基本时序设计如图3。
四、IIC串行总线设计 (针对传感器配置)
对于IIC总线选用AD7417芯片, IIC总线有就两根线, 一根为时钟线 (SCL) , 一根为数据线 (SDA) , 要完成收发双工通信和前面的SPI是一样的, 都是要先写指令, 控制被操作芯片读或写。
IIC是有应答位的, 可以理解成一个简单的握手机制。在发送数据端 (此处不区分上位机还是下位机) 每配置完一个8bit数据时接收端都要发送一个ACK (应答位) 给发送端, 表示数据已被接收端接收。
在数据线和时钟线的配置上与前面的串行总线的设计基本一致, 在无数据传输时为高电平, 在使用IIC传输数据时不管使用的是什么芯片都会有一下几个步骤并且顺序固定。
1. 产生起始位 (在SCL为高时将SDA拉低产生下降沿) ;
2. 确定芯片器件 (以AD7416~AD7418为例从器件手册可知AD7416-1001, AD7417和AD7418-0101) ;
3. 查找芯片地址 (此地址根据芯片P11~P13连接情况而定) ;
4. 配置读写;
5. 接受应答 (0对方接收, 1的话检擦时序和地址数据) ;
6. 发送相关数据。
针对AD7417设计时, FPGA系统时钟为50M, SCL时钟为100k, 计数器从0计数到499。每个数据用8bit表示。针对ACK应答信号, 需要一个三态门进行控制接收ACK。数据变换点配合比特计数在ACK应答位置上拉高一个标志作为三态开关来控制SDA的输入 (用于接收ACK) 输出 (发送配置数据) 。SDA由于同时作为输入输出, 定义为inout。
五、结束语
UART, SPI, IIC三种串行的使用场景相对较为固定, UART主要用于串口通信以及板级间的数据交互, 或接收PC端的数据指令和上报数据给PC端。SPI和IIC主要用于接收或控制传感器的数据, 配合掉电不失数据的寄存器, 如FLASH和EEPROM来完成数据的传输。这三种串行总线虽然速率较低, 但实际短周期的集成模块非常多, 对于数据量传输不是很大的应用非常方便。
摘要:串行总线广泛应用与板级间的通信, 本文主要基于FPGA技术针对串行总线UART (全双工) , SPI (分三线, 四线。三线半双工, 四线全双工) 和IIC (半双工) 进行了设计, 实现了主机控制从机和芯片间的数据通信。
关键词:UART,SPI,IIC,全双工,半双工
参考文献
[1] 吴厚航.勇敢的芯伴你玩转xilinx FPGA[M].2017 (1) .
[2] STMicro electronics.M25P64[P].2005-2.
[3] Prolific.PL-2303 USB to RS232 Bredge Controller Product Datasheet[P].2002-7.
[4] ANALOG DEVICES. 10-Bit Digital TemperatureSensor (AD7416) andFour Single-Channel ADCs (AD7417/AD7418) [P].2004.