逼近年关事情多,少了更新。今天冒个泡。说下UART通信接口。
UART扫盲
前面做了SPI和I2C,前两者一个是摩托,一个是飞利浦背书,简单好理解。这个UART就相对复杂一点,全称universal Asynchronous Receiver/Transmitter 通用异步通信协议,也有叫异步全双工通信协议。用线也很少,就俩,TX,RX,和I2C与SPI最大的不同就是少了时钟通讯线。少了时钟通讯线,那就要约定点什么:波特率,数据位,奇偶校验位,停止位等(保命等)。比方说的9600bps,1bit传输就是104.16us,115200bps,1bit传输就是8us。
UART资源
UART很好用,看看有多少片上资源,额,太多,首先支持11个UART,11个中第一个是全功能的UART,怎么个全功能,它是8线制(TXD,RXD,CTS,RTS,CDn,RIn,DTR和DSR),且带64字节的FIFO。然后5个带流式控制(2、4、6、8、10)4线制的(TXD,RXD,CTS,RTS),5个丐版标准制(0、3、5、7、9)。
重点来了,支持三种模式,红外、RS-485、LIN(Local Interconnect Network)模式(迟迟搞不懂的协议)。
RS-485模式
这个是3个中最好理解的,也是最常见到的。
主要它相对于232,首先传输通过的是差分信息(就是两线传递取电压差),这个就是抗干扰能力强,传输距离远,可带的负载多,两根线能挂128设备。但是呢,是半双工的,可能是唯一的缺点了。另外232的电平是5~15V,-5~-15V,可能取负电平为1。458呢是压差2~6V,负-2~6V。
NUC970支持9位传输模式,第9位当是字节代表地址时,会被置为1,当为数据字节时,会被置为0。NUC970支持有三种485工作模式:普通多节点操作模式(NMM)、地址自动匹配模式(AAD)、自动方向控制模式(AUD)
NMM普通多节点操作模式
这个模式的核心是通过控制RX_DIS(UA_FCR[8])来控制是否允许接收器接收数据。
猜测,当下还是猜测,当发现地址位后,判断地址后,可以通过RX_DIS来选择是否接收后续数据。
控制流程如下:(以后对寄存器也要多多记忆^ ^)
- 设置FUN_SEL(UA_FUN_SEL[2:0])为RS485模式;
- 设计RX_DIS(UA_FCR[8])在接收地址位前是否接收数据;
- 通过(UA_ALT_CSR[8])设置RS485_NMM模式。
- 当地址位被发现,硬件为设置RLS_IS(UA_ISR[2])和RS485_ADD_DETF(US_FSR[3])标志位;
- 判断完地址后,软件决定是否再接收数据信息;
- 重复4与5步。
AAD地址自动匹配模式
这个模式就是纯自动化的了,当发现第9位是1以后,拿8位数据和ADDR_MATCH(UA_ALT_CSR[31:24])做匹配,匹配对了,就把数据存进RX-FIFO里。
AUD自动方向模式
这个模式其实和上两者不是并列的,就是引入的RTS线,控制LEV_RTS(UA_MCR[9]),来让控制器进入第三态状态。拉低就是无效,拉高就是允许操作。
LIN模式
这边呢,本来想先写红外模式的,结果发现坑没墙上,就先写LIN模式。LIN模式呢之前接触的少,查资料发现说是简化版的CAN模式(数据传输以帧的形式),说明资料很少,只能从手册中看看了。好在手册讲的挺清楚,NUC970在主机模式下支持空白与分隔的发射与侦听,在从机模式下支持头信息侦听和自动同步功能。
LIN的数据结构,一个完整的帧由主机发送的头和从机的反馈组成。头部又分空白信息,同步信息,帧ID。反馈信息包括数据与字节校验码。核心是帧ID,主机通过不同的帧ID说明帧的目标,而从机通过帧ID判断是否进行回复。
灵魂画手出动:
主机模式下,数据位都是以一个0位开始,跟8个字节,没有奇偶校验,再跟1个停止位(值为1)。总共11位。操作流程如下:
- 设置通讯速率
- 将端口设置为LIN模式
- 设置WLS(UA_LCR[1:0]=11),PBE(UA_LCR[3]=0),NSB(UA_LCR[2]=0),11位数据位,无奇偶校验,1个停止位。
然后NUC970支持帧头的三种不同发送方法,手动、半自动、全自动。通过配置LIN_HEAD_SEL(UA_LIN_CTL[23:22])选择,如果不是全自动,就要把0x55与帧ID写入UA_THR中,全自动就把帧ID写入LIN_IDPEN(UA_LIN_CTL[31:25])
然后LIN的break位可以进行设置。
NUC970可以侦听空白与分隔位,当接收了超过11个低位的信号,则置位LIN_BRDET_F。当只有主机不再发送数据的时候,侦听到空白则会对RDA_IF/FEF进行置位。
主机模式下,只能最多从机8个字节数据。
从机模式(留坑)
红外模式
红外模式的核心是将时序信号转换成脉冲信号,再通过红外发射装置进行发射与接收,此处看后续是否要填坑。