APP下载

基于WK2168 实现多接口四通道异步串口扩展器设计

2023-11-19龙顺宇王连明赵广宇胥勋伟

电子制作 2023年21期
关键词:寄存器电平时序

龙顺宇,王连明,赵广宇,胥勋伟

(1.海南热带海洋学院 海洋信息工程学院,海南三亚,572022;2.成都为开微电子有限公司,四川成都,610093)

0 引言

针对串口扩展的实际需求,各集成电路厂商推出了多种专用芯片[1],市面上常见的串口扩展芯片就有CH438Q、GM812x 系列、ST16C554D、SP2538 等[2~4]。此类芯片通常只支持一种主接口类型[5],各自的功能差异较大[6],有的不能支持宽电压供电[7],有的不支持子串口参数的差异化配置[8~9],有的不具备RS485 自动收发控制[10],有的不支持自动流量控制,还有的读写过程仅支持小数据量的寄存器方式,不支持连续数据量的FIFO 方式[11~12],故而设计人员在芯片选型时会产生困扰。本文选用WK2168 芯片设计的串口扩展器就可以对接这些需求,支持多种主接口类型,可按需应用于不同的设计场景之中。

1 扩展器组成框架

因为WK2168 芯片支持4 种模式的主接口[13],故而在对接实际主控制器时应事先确定接口类型,用户可通过扩展器的MD0 和MD1 引脚进行模式选择[14],改变这两个引脚上的电平组合即可调整接口引脚的复用功能,最终改变芯片内部主接口的转换逻辑,本文设计的串口扩展器组成框架如图1 所示。

图1 WK2168 串口扩展器组成框架图

图中虚线框内部分即为WK2168芯片的内部组成单元,主接口转换逻辑单元负责解析来自外部设备主控制器下达的命令,在内部总线的连接下将数据、地址及控制信号传送至各单元,每个子通道串口都具备一套独立的寄存器,包含了收发FIFO 暂存器、收发流量控制寄存器、波特率发生器和收发移位寄存器,这些寄存器和端口电路的工作状态及配置都受控于子通道控制寄存器。若子串口内部产生特定事件,将触发中断请求(实际表现为IRQ 引脚上的电平变化),外部设备主控制器可响应中断执行特定动作。扩展得到的TX1 至TX4 为串行数据发送引脚,RX1 至RX4 为串行数据接收引脚,RTS1 至RTS4 为请求发送信号引脚,CTS1 至CTS4 为清除发送信号引脚。

2 扩展器硬件设计

串口扩展器的电路原理如图2 所示,U1 即为WK2168芯片,芯片32 脚MD0 和33 脚MD1 的4 种电平组合决定了MP0至MP3引脚的具体功能。若MD0、MD1取值为“00”,则MP0 至MP3 用作SPI 接口;取值为“01”则用作I2C 接口,取值为“10”则用作8 位并口总线接口,取值为“11”则用作UART 接口。根据芯片数据手册可知,MD0 和MD1引脚内建了上拉电路,悬空时默认为“11”状态,MP0 至MP3 引脚则需要外加上拉电阻。

图2 WK2168 核心电路原理图

DAT0 至DAT7 为并口数据总线引脚,若主接口不用做并口时可将其当作GPIO 使用。D1 和R10 构成了供电指示电路,系统供电支持2.5V~5.0V 宽电压范围,C2 和C3 为电源进行滤波和去耦(在PCB 布局时应尽量靠近电源类引脚),R11 为中断引脚IRQ 的外部上拉电阻(以确保IRQ引脚在未产生中断信号时保持为高电平状态)。

R12和C5为WK2168提供上电复位信号(低电平有效)。R5、Y1、C1 和C4 构成了外部石英晶体振荡电路(在PCB布局时应尽量靠近时钟引脚,若有地网络的覆铜层还应增加过孔减少寄生参数影响)。

WK2168 芯片扩展的4 路子串口均遵循正逻辑TTL/COMS 电平标准,若需要将其对接DB9 接口的外部设备则需要添加额外的电平转换单元,将TTL/COMS 电平标准适配到RS232 标准(可基于MAX3232 芯片搭建相关电路单元)。

除此之外,实际场景中还有很多传感器设备、执行器设备是RS485 接口,对接此类接口时可以添加RS485 收发电路(可基于MAX3485 芯片搭建相关电路单元),合理利用子串口的RTS 引脚实现RS485 电路的自动收发功能。RTS引脚的默认电平状态可通过程序配置,当启动数据发送时,RTS 引脚控制RS485 收发器芯片的DE 和RE 引脚实现数据发送,启动数据接收时,RTS 就会反向控制RS485 收发器芯片进入接收模式。值得一提的是WK2168 芯片的每个子串口通道都支持9 位网络地址的自动识别,每个子串口都有一个唯一地址,还具备网络地址寄存器和网络地址使能控制位,所以比较适用于工业/自动化现场RS485 总线下的控制场景。

3 扩展器软件设计

硬件搭建完毕后即可选定一种主接口形式进行程序编写,以测试扩展器数据的收发功能。

若选择8 位并口作为主接口,则需先将主接口模式配置引脚MD0 和MD1取值为“10”,此时MP0 用作数据地址AD 选择引脚,MP1 用作读信号RD控制引脚,MP2 用作写信号WR 控制引脚,MP3 用作片选CS 控制引脚,DAT0至DAT7 为8 位数据总线,将其连到主控制器的一组I/O 端口即可,操作时序上兼容传统的MCS-51 单片机并行读写时序(P0 端口组做数据总线,P3.6/P3.7 为读写控制线)。

若选择三线异步UART作为主接口,则需先将主接口模式配置引脚MD0 和MD1 取值为“11”,此时MP0 和MP3 引脚不用,MP1 用作主接口串行数据发送MTX 引脚,MP2 用作主接口串行数据接收MRX 引脚,操作时序上与WK21xx 系列芯片中的WK2114 芯片一致[15]。

若选择四线SPI 作为主接口,则需先将主接口模式配置引脚MD0 和MD1 取值为“00”,此时MP0 用作主设备输入/从设备输出MISO 引脚,MP1 用作主设备输出/从设备输入MOSI 引脚,MP2 用SPI 串行时钟SCLK 引脚,MP3用作SPI 片选SSEL 引脚,操作时序上与WK21xx 系列芯片中的WK2124 芯片一致[16]。

若选择两线I2C 作为主接口,则需先将主接口模式配置引脚MD0 和MD1 取值为“01”,此时MP0 用作串行数据SDA 引脚,MP1 用作I2C 器件低位地址IA0 引脚,MP2 用串行时钟SCL 引脚,MP3 用作I2C 器件高位地址IA1 引脚,操作上与标准的I2C 时序类似。

主控制器可操作WK2168 芯片内部寄存器或FIFO 暂存器去控制子串口实现数据收发。本文以I2C 主接口为例,通过I2C 主接口写FIFO 暂存器的操作时序如图3 所示。

图3 I2C 接口写数据到FIFO 时序

在写入时序中,当串行时钟SCL 线路为高,串行数据SDA 线路出现下降沿时便产生了I2C 通信时序的起始信号START。此时主控制器需要向扩展器写入一个命令字节Command(具体取值等于I2C 从机地址、子串口通道号和“0x22”三者进行按位或运算的结果),明确本次操作为写入FIFO,随后写入FIFO 寄存器地址,最后写入数据内容,数据字节寄存器的地址会随着写入字节数量而自增,且每次写入操作后都会收到来自扩展器的从机应答ACK 信号,写入数据完毕后再由主控制器产生终止信号STOP 即可(即在串行时钟SCL 线路为高时,让串行数据SDA 线路出现上升沿)。

编程时可用C51 语言将该时序进行描述,将具体操作封装为WK2XXX_Write_FIFO(u8 num,u8 count,u8 *fifo_buff)函数,形参“num”为子串口通道号,形参“count”为欲写入的字节数量,形参“*fifo_buff”指针用于指向写入数组首地址,具体的源码实现如下:

在写时序的命令字节中,C1 和C0 位代表子串口的通道号,A0 至A3 位表示子串口寄存器的地址。因为主接口选定了I2C,所以P0 和P1 就代表扩展器的从机地址,具体的取值由MP1 和MP3 引脚上的电平决定,时序中的ACK是来自从机的应答信号。与写时序类似,通过I2C 主接口从FIFO 暂存器中读取数据的操作时序如图4 所示。

图4 I2C 接口从FIF O 读数据时序

读取数据与写时序类似,先由主控制器在I2C 总线上产生起始信号START,然后向扩展器写入一个命令字节Command(具体取值等于I2C 从机地址、子串口通道号和“0x23”三者进行按位或运算的结果),明确本次操作为读取FIFO,如果收到了来自扩展器的ACK 应答,则可以连续读取n 个字节,在读取过程中FIFO 寄存器的地址会自动增加,若主控制器不再需要读取数据,只需发送一个主机无应答NACK 信号到SDA 线路上,接着产生终止信号STOP即可。

编程时可用C51 语言将该时序进行描述,将具体操作封装为WK2XXX_Read_FIFO(u8 num,u8 count,u8 *fifo_buff)函数,形参“num”为子串口通道号,形参“count”为欲读取的字节数量,形参“*fifo_buff”指针用于指向接收数组首地址。

实现FIFO 暂存器的读写操作之后就可以测试各路子串口的收发功能,可在程序主函数内初始化相关引脚模式,随后配置子串口波特率、数据帧格式,使能子串口通信功能,然后进入FIFO 收发测试,可以向外输出预设字符串信息,也可以建立多个数组,实现子串口自收自发功能。

4 实物制作与测试

按照硬件电路设计并制作的串口扩展器实物如图5(a)所示,扩展器具备主接口和功能接口,扩展器板载了WK2168 核心和电平转换电路,若拨动开关打到“R”一侧则说明该路子串口遵循RS232 电平标准,打到“T”一侧则说明该路子串口遵循TTL/CMOS 电平标准,用户还可以在子串口后级连接RS485 转换电路或者其他通信转换单元以适配更多的场景需求。

图5 WK2168 扩展器实物与测试图

扩展器选定主接口后可连接到主控制器,在程序控制下即可进行数据收发测试,实际测试过程如图5(b)所示,用USB 转串口单元连接扩展器实物的某个子串口通道,然后做自收自发测试,实际发送“WK2168 CH1 TX-RX Test!”字符串,在启用时间戳功能后看到了返回的字符串与发送一致,由此验证了扩展器功能正常。

5 结语

本文设计的串口扩展器支持4 种类型的主接口输入,兼容了市面上大部分串口扩展专用芯片的主接口类型,所能适配的应用场景较为丰富。扩展器支持2.5V~5V 宽电压范围供电,能够较好地对接常规低压微控制器系统。可按需连接各类串口传感器、串口屏、执行器、通信模块或单元板卡,适合作为积木模块嵌入到实际系统应用中。

所扩展的4 路子串口支持差异化参数配置,数据收发方式和工作模式多样,灵活性较好。但在具体应用时还需妥善处理FIFO 计数器状态、FIFO 触点配置、中断控制、超时处理、数据流控制、网络号识别等环节。综上所述,该款串口扩展器具备一定的实用价值,可结合实际需求进行运用。

猜你喜欢

寄存器电平时序
基于Sentinel-2时序NDVI的麦冬识别研究
Lite寄存器模型的设计与实现
基于FPGA 的时序信号光纤传输系统
分簇结构向量寄存器分配策略研究*
一种毫米波放大器时序直流电源的设计
NPC五电平Z源逆变器的设计研究
基于三电平光伏并网逆变器控制系统的研究与实践
基于NPC三电平变换器的STATCOM研究
一种多电平逆变器及其并网策略
DPBUS时序及其设定方法