电子说
在电子设计领域,UART(通用异步收发传输器)芯片是实现串行通信的关键组件。TI公司的NS16C2552和NS16C2752双串口UART芯片,以其高性能和丰富的功能,在众多应用场景中得到广泛应用。本文将对这两款芯片进行详细解析,帮助电子工程师更好地理解和使用它们。
文件下载:ns16c2552.pdf
NS16C2552和NS16C2752是具有16字节/64字节FIFO的双串口UART芯片,数据传输速率最高可达5 Mbit/s。它们与PC16552D在引脚和功能上兼容,同时增加了许多新特性,如低电压支持、5V容忍输入、增强型寄存器集和更高的数据速率等。芯片采用44 - PLCC或48 - TQFP封装,工作电压范围为2.97 V至5.50 V,工业温度范围为 - 40°C至85°C。
芯片的引脚分为总线接口、串行I/O接口、时钟和复位、电源和接地引脚等几类。每个引脚的功能和作用都有明确的定义,以下是一些关键引脚的说明:
芯片包含两个相同的寄存器集,每个通道一个。寄存器的地址和控制引脚与寄存器选择的关系在表1中进行了总结。以下是一些重要寄存器的功能说明:
用于存储接收到的数据,可通过该寄存器访问接收器FIFO中的数据。
用于存储要发送的数据,是发送FIFO的输入寄存器。
用于使能各种中断源,每个中断源可独立控制,通过设置相应的位来启用或禁用中断。
用于记录中断的优先级和来源,CPU读取该寄存器时,可获取最高优先级的待处理中断信息。
用于启用FIFOs、清除FIFOs、设置FIFO触发级别和选择DMA模式。
用于指定异步数据通信的格式,如数据位长度、停止位长度、奇偶校验等,并设置除数锁存器访问位。
用于控制与调制解调器或外设的接口,包括时钟分频选择、红外编码器/解码器选择、Xon - Any功能启用等。
提供数据传输的状态信息,如接收缓冲区是否有数据、发送器是否空闲、是否发生错误等。
提供调制解调器控制线路的当前状态信息,以及状态变化信息。
每个通道都有一个独立的可编程波特率发生器,可将输入时钟除以1至(2^16 - 1)的任意除数,生成16X时钟,驱动发送器和接收器部分。
芯片具有片上振荡器,可接受标准晶体的并联谐振和基频信号。生成的时钟提供给两个UART通道,频率范围为DC至24 MHz。每个通道都有独立的可编程时钟分频器,因此每个通道可以有不同的波特率。
芯片具有片上上电复位功能,可适应缓慢上升的电源电压。上电复位电路会将设备保持在复位状态2^23个XIN时钟周期。此外,还可以施加外部高电平复位信号。
每个串行通道包含一个8位接收移位寄存器(RSR)和一个16(或64)字节的接收FIFO。RSR使用16X时钟作为定时源,在接收到起始位后,开始对数据进行采样和验证,将数据帧加载到RBR和接收FIFO中,并更新错误标签。
发送器由一个8位发送移位寄存器(TSR)和一个16(或64)字节的发送FIFO组成。TSR以16X内部时钟将数据移出,发送过程包括起始位、数据位、奇偶校验位(如果启用)和停止位。
芯片支持RTS和CTS硬件流控制,可通过设置相应的寄存器位来启用。RTS用于请求远程设备暂停或恢复数据传输,CTS用于监控远程接收器FIFO是否溢出,以暂停或恢复本地发送器的工作。
软件流控制使用编程的Xon或Xoff字符来实现发送/接收流控制。当接收到的字符与编程的值匹配时,发送器会暂停操作,直到接收到Xon字符后恢复传输。
当EFR[5] = 1时,UART可以检测8位特殊字符。检测到特殊字符后,会将其加载到FIFO中,并设置相应的标志位。
为了降低功耗,芯片具有每个通道独立的睡眠模式。当满足一定条件时,通道可以进入睡眠模式,在检测到特定事件时唤醒。
芯片支持内部回环模式,可用于设计验证和诊断故障。在回环模式下,发送的数据会从发送移位寄存器输出循环到接收移位寄存器输入,系统可以接收自己发送的数据。
使用RXRDY和TXRDY信号可以实现更高效的直接内存访问(DMA)传输。DMA传输在CPU周期之间进行,节省了CPU处理带宽。在模式0下,每次RXRDY和TXRDY的断言会导致单次传输;在模式1下,可以进行块传输,进一步提高传输效率。
在使用芯片时,如果设备出现异常,可按照以下步骤进行调试:
在UART传输中,发送器时钟和接收器时钟运行在不同的时钟域,本地振荡器频率和时钟分频器可能会引入波特率误差。UART接收器的内部采样时钟是数据速率的16倍,通过合理设置时钟和分频器,可以确保数据的正确采样和传输。
使用的晶体应满足以下要求:
LCR 0x03.7 = 1
DLL 0x00.7:0 = DIV_L
DLM 0x01.7:0 = DIV_M
LCR 0x03.7 = 0
Save LCR 0x03.7:0 in temp
LCR 0x03.7:0 = 0xBF
EFR 0x02.4 = 1
LCR 0x03.7:0 = 0
MCR 0x04.7 = 1
LCR 0x03.7:0 = 0xBF
EFR 0x02.4 = 0 (optional)
LCR 0x03.7:0 = temp
Save LCR 0x03.7:0 in temp
LCR 0x03.7:0 = 0xBF
Xon1 0x04.7:0 = VAL1
Xoff1 0x06.7:0 = VAL2
LCR 0x03.7:0 = temp
Save LCR 0x03.7:0 in temp
LCR 0x03.7:0 = 0xBF
EFR 0x02.4 = 1
LCR 0x03.7:0 = 0
FCR 0x02.7:0 = VAL
LCR 0x03.7:0 = 0xBF
EFR 0x02.4 = 0 (optional)
LCR 0x03.7:0 = temp
Save LCR 0x03.7:0 in temp
LCR 0x03.7:0 = 0xBF
EFR 0x02.7:6 = 2'b11
EFR 0x02.4 = 1
LCR 0x03.7:0 = 0
IER 0x01.7:6 = 2'b11
MCR 0x04.1 = 1
LCR 0x03.7:0 = temp
Save LCR 0x03.7:0 in temp
LCR 0x03.7:0 = 0
FCR 0x02.0 = 1
FCR 0x02.3 = 1
LCR 0x03.7:0 = temp
| 与PC16552D相比,NS16C2552和NS16C2752在多个方面具有优势,如Tx和Rx FIFO大小、供电电压范围、最高波特率、最高时钟输入频率、工作温度范围、增强型寄存器集、睡眠模式、软件和硬件流控制、中断源ID、Tx FIFO触发级别选择、IrDA v1.0模式和时钟分频器选择等。具体差异如下表所示: | 特性 | PC16552D | NS16C2552 | NS16C2752 |
|---|---|---|---|---|
| Tx和Rx FIFO大小 | 16字节 | 16字节 | 64字节 | |
| 供电电压 | 4.5V至5.5V | 2.97V至5.5V | 2.97V至5.5V | |
| 最高波特率 | 1.5Mbps | 5.0Mbps | 5.0Mbps | |
| 最高时钟输入频率 | 24MHz | 80MHz | 80MHz | |
| 工作温度 | 0 - 70℃ | - 40至85℃ | - 40至85℃ | |
| 增强型寄存器集 | 否 | 是 | 是 | |
| 睡眠模式IER[4] | 否 | 是 | 是 | |
| Xon, Xoff, 和Xon - Any软件自动流控制 | 否 | 是 | 是 | |
| CTS和RTS硬件自动流控制 | 否 | 是 | 是 | |
| 中断源ID在IIR中 | 3位 | 5位 | 5位 | |
| Tx FIFO触发级别选择FCR[5:4] | 1级 | 1级 | 4级 | |
| IrDA v1.0模式MCR[6] | 否 | 是 | 是 | |
| 时钟分频器1或4选择MCR[7] | 否 | 是 | 是 |
NS16C2552和NS16C2752双串口UART芯片以其高性能、丰富的功能和良好的兼容性,为电子工程师提供了一个优秀的串行通信解决方案。通过深入了解芯片的特性、引脚功能、寄存器设置和操作配置,工程师可以充分发挥芯片的优势,设计出更加稳定、高效的通信系统。在实际应用中,还需要注意调试技巧、时钟频率精度和晶体要求等方面的问题,以确保系统的可靠性和稳定性。希望本文能够对电子工程师在使用NS16C2552和NS16C2752芯片时有所帮助。
各位工程师朋友,在使用这两款芯片的过程中,你们遇到过哪些有趣的问题或者有什么独特的应用经验呢?欢迎在评论区分享交流!
全部0条评论
快来发表一下你的评论吧 !