前言
随着电子技术的发展,以微处理器(MCU),PC机组成的主从分布式测控系统已成为当今复杂的测控系统的典型解决方案。单片机以其独特的串口通信功能为主,从设备之间的数据传输提供了便利。但是51系列单片机只提供了一个全双工的串行通信接口,这对于一个实时性要求较高,测控功能复杂的系统而言是一个美中不足之处。在我们设计的智能密集测控系统中,就需要测控工具有多个实时全双工的串行通信接口。我们现在只能是选择有多个串口的单片机或者是进行串口扩展,选择多串口的单片机肯定成本比较高,而且局限性比较大;那么最好的方案还是进行串口扩展。根据本人的对多款串口扩展芯片在性能、价格上的比较,个人认为维肯电子的VK3266这款串口扩展芯片还是相当不错的,下面我们就也VK3266来对单片机的串口进行扩展。以单片机的一个串口,扩展为4个全双工的串口。 一、系统设计
1、系统框图
2、VK3266 芯片介绍
1).产品概述
VK3266是业界首款具备 UART/SPITM/8位并行总线接口的4通道UART器件。可以通过模式选择使得该芯片工作于以上任何一种主接口模式下: 当主接口为UART时,VK3266将一个标准3线异步串口(UART)扩展成为4个增强功能串
口(UART)。主接口UART在数据传输时可以选择需要转义字符和不需要转义字符两种模式。此外,主接口的UART可以通过引脚配置为红外通信模式。 当主接口为SPI接口时,VK3266实现SPI桥接视频会商系统/扩展4个增强功能串口(UART)的功能。
当主接口为8位并口时,VK3266实现一个8位并行数据总线与4个通道UART串行总线数据通信相互转换的功能。
扩展的子通道的UART具备如下功能特点:
每个子通道UART的波特率、字长、校验格式可以独立设置,最高可以提供1Mbps的通信速率。
每个子通道可以独立设置工作在IrDA红外通信、RS-485自动收发控制、9位网络地址自动识别、软件/硬件自动流量控制、广播接收等高级工作模式下。 每个子通道具备收/发独立的16 BYTE FIFO,FIFO的中断为4级可编程条件触发点。
提供一个子通道的调制解调器(MODEM)控制信号。
VK3266采用QFP44绿环保的无铅封装,可以工作在2.5~5.5V的宽工作电压范围,具备可配置自动休眠/唤醒功能。
[注]:SPITM 为MOTOLORA公司的注册商标。
2).基本特性
2.1 总体特性
男生女生银版文章
支持多种主机接口:可以选择 UART,SPI或8位并口
低功耗设计,可以配置自动休眠,自动唤醒模式(uS 级唤醒)
宽工作电压设计,工作电压为 2.5V~5.5V
精简的配置寄存器和控制字,操作简单可靠
创新的可编程数据广播模式支持向任意子通道发送数据广播
提供工业级和商业级产品
高速CMOS工艺
采用符合绿环保政策的QFP44无铅封装
2.2 扩展子通道UART特性
子通道串口独立配置,高速、灵活:
每个子串口为全双工,每个子串口可以通过软件开启/关闭
波特率可以独立设置,子串口最高可以达到920K bps
每个子串口字符格式包括数据长度、停止位数、奇偶校验模式可以独立设置
每个子串口可以软件设置为是否接收数据广播
完善的子串口状态查询功能
FIFO功能:
每个子串口具备独立的16级9Bits发送FIFO,发送FIFO具备4级可编程触发点
每个子串口具备独立的16级接收FIFO,接收FIFO具备4级可编程触发点
软件FIFO使能和清空
FIFO状态和计数器输出
流量控制:
支持RTS、CTS的硬件自动流量控制
支持XON/XOFF的软件自动流量控制,XON/XOFF可编程字符自动发送/识别
RS-485功能:
RTS控制的自动RS-485收发控制
RS-485网络地址自动识别功能
错误检测:
支持奇偶校验错,数据帧错误及溢出错误检测
支持起始位错误检测
每个子串口可以软件设置为是否接收数据广播
内置符合SIR标准的IrDA红外收发编解码器,传输速度可达115.2K bit/s
2.3 UART主接口特性
主接口为标准的三线UART串口(RX,TX,GND),无需其它地址信号、控制信号线
可编程波特率设置,最高速度可以达到1M bit/s
可选择的奇校验,偶校验和无校验模式
业界首创的不需地址线控制的串口扩展方式,通过芯片内置的协议处理器实现多串口扩展
UART主接口可以通过引脚设置为红外模式
UART主接口可以通过引脚选择是否采用转义字符模式
2.4 SPI主接口特性
最高速度5M bit/s
仅支持SPI从模式
16位,SPI模式0
2.5 8位并口主接口特性
标准8位MCU总线接口
命令和数据共用8位地址总线,通过A0(数据/控制)信号进行切换
子通道选择通过命令字控制和指示,无需额外的通道指示信号线
仅占用2个地址空间
3.)应用领域
多串口服务器/多串口卡
工业/自动化现场RS-485控制
通过CDMA/GPRS MODEM的无线数据传输
车载信息平台/车载GPS定位系统
远传自动抄表(AMR)系统
POS/税控POS/金融机具
DSP/嵌入式系统
4.订购信息
表4.1 VK3266 订购信息
产品型号 | 封装 | 说明 |
VK3266-EQPG | QFP44 无铅封装 | 加强工业级; 工作温度 -45℃~+85℃ |
决策支持系统VK3266-IQPG | QFP44 无铅封装 | 普通工业级; 工作温度 -45℃~+85℃ |
VK3266-CQPG | QFP44 无铅封装 | 普通商业级; 工作温度 0℃~+70℃ |
| | |
5.原理框图
图5.1 VK3266 原理框图
6.封装引脚
6.1封装图
6.2 引脚描述
表6.2 VK3266 引脚描述
名称 | 管脚 | 类型 | 描述 |
M1 | 1 | I | 主接口模式选择信号: M1 M0=00 SPI接口; M1 M0=11 UART接口; M1 M0=10 or 01 8位并口总线; M1 M0芯片内建下拉电路,悬空时M1 M0=00; |
M0 | 2 | I |
IR/ SCS/ CS | 3 | I | 当主接口为UART时,为IR(主口红外通信模式)功能引脚: IR=1 红外通信模式; IR=0 普通UART通信模式; 当主接口为SPI时,为SCS(SPI片选)功能引脚:低电平有效 当主接口为8位并口时,为CS(片选)功能引脚: 低电平有效 |
MRX/ SCLK/ WR | 4 | I | 当主接口为UART时,为MRX(主口UART接收)功能引脚; 当主接口为SPI时,为SCLK(SPI 时钟输入)功能引脚; 当主接口为8位并口时,为WR(写信号)功能引脚:低电平有效 |
TR/ SDIN/ RD | 5 | I | 当主接口为UART时,为TR(转义字符传输)功能引脚: TR=1 选择有转义字符的串口扩展工作模式; TR=0 选择没有转义字符的串口扩展工作模式; 当主接口为SPI时,为SDIN(SPI数据输入)功能引脚; 当主接口为8位并口时,为RD(读信号)功能引脚,低电平有效 |
MTX/ SDOUT/ A0 | 6 | I | 当主接口为UART时,为MTX(主口UART发送)功能引脚; 当主接口为SPI时,为SDOUT(SPI数据输出)功能引脚; 当主接口为8位并口时,为A0(数据地址选择)功能引脚; A0=0 写寄存器地址 A0=1 写寄存器数据 |
D7~D0 | 7~ 14 | I/O | 当主接口为8位并口时,为具有3态输出的8位数据线。用来实现VK3266与CPU之间的数据、控制和状态信息的双向传输。 当主接口为SPI或UART时,该数据总线为高阻态。 |
RTS1 RTS2 RTS3 RTS4 | 34 25 38 15 | O | 子串口1~4的请求发送信号(Request To Send),低电平有效. 当RTSx=0时,表明VK3266的相应子串口接收已准备就绪,请求与其相连的MODEM或数据UART发送数据。RTS可以通过子串口状态寄存器进行设置。 当子串口工作在自动流量控制模式下时,RTS通过自动流量控制逻辑控制控制数据收发。 当子串口工作在RS-485自动收发模式下,该引脚用于控制RS-485数据的自动收发转换。 |
CTS1 CTS2 CTS3 CTS4 | 31 22 35 18 | I | 子串口1~4的清除发送信号(Clear To Send),低电平有效. 当CTSx=0时,表明MODEM或者数据UART已经准备好接收VK3266相应的子串口发送数据。可以通过读取子串口状态寄存器读取CTS的相应状态。 当子串口工作在自动流量控制模式下时,CTS通过自动流量控制逻辑控制控制数据收发。 |
RX1 RX2 RX3 RX4 | 33 24 37 16 | I | 子通道串口串行数据输入。 RX 将所连数据UART的串行数据输入VK3266的相应管脚。 |
TX1 TX2 TX3 TX4 | 32 23 36 17 | O | 子通道串口串行数据输出。 TX 将串行数据输出到与其连接的器件引脚。 |
RST | 19 | I | 硬件复位引脚,低电平复位有效 |
IRQ | 21 | O | rbd505中断输出信号,低电平有效。建议外接上拉电阻,典型取值5.1K |
VCC | 20 39 | - | 电源 2.5V~5.5V工作范围 |
GND | 28 44 | - | 地 |
OSCI | 43 | I | 晶振输入; 当CLKSEL=0时,外部晶振连接到该引脚和OSCO引脚构成一个晶体振荡电路。 |
OSCO | 42 | O | 晶振输出;当CLKSEL=0 时,外部晶振连接到该引脚和OSCI引脚构成一个晶体振荡电路。 |
CLKSEL | 41 | I | 时钟选择: CLKSEL= 0时,选择晶振提供时钟(默认值) CLKSEL= 1时,选择从CLKIN引脚输入的时钟作为芯片时钟 |
CLKIN | 40 | I | 外部时钟输入引脚,当使用晶振时,该引脚需要接一个固定电平 |
DCD/ GPIO0 | 30 | I | 载波检测(低电平有效)。 DCD=0用来指示调制解调器检测到载波信号。 |
DSR/ GPIO1 | 29 | I | 数据设备就绪(低电平有效)。DSR=0 用来指示调制解调器或数据设备已经上电并且准备好与UART的数据交换。 |
DTR/ GPIO2 | 26 | O | 数据终端就绪(低电平有效)。DTR=0时,表明VK3266已经上电和准备就绪。该管脚可通过控制寄存器来设置。 |
RI/ GPIO3 | 27 | I | 振铃指示器(低电平有效)。RI=0表明调制解调器接收到电话线的响铃信号。该输入管脚的逻辑1跳变将会产生中断。 |
| | | |
3、系统硬件设计
1、原理图设计
3、系统软件设计
基本函数块:
//*************************************************************************
//Function:通过串口发送1个字节的数据
//输入:dat为发送的数据
//输出: 无
//日期:2011/12/12
//********************************************************************
void uart_sendByte(unsigned char dat)
{
SBUF=dat;
while(!TI); //waite for data to transmit completely
SCON &= 0xFD;
}
//**************************************************************************
宋香波//Function:接收一个字节的数据
//输入:无
//返回:rec 函数返回读取到的数据
//日期:2011/12/12
//***************************************************************************
unsigned char uart_recByte(void)
{
造纸助留助滤剂 unsigned char rec=0;
while(!RI); //waite to recieve data in SBUF0
rec=SBUF;
SCON &= 0xFE;
return rec;
}
//***************************************************************************
//Function:读取寄存器值
//输入:port为子串口的路数,reg为寄存器的地址
//输出: 返回值是读取的寄存器的值
//日期:2011/12/12
//***************************************************************************
unsigned char read_reg(unsigned char port,unsigned char reg)
{
uart_sendByte(((port-1)<<4)+reg); //发送寄存器地址
return uart_recByte();
}
//***************************************************************************
//Function:往寄存器里面写数据
//输入:port为子串口的路数,reg为寄存器的地址 ,dat 为写入寄存器的值
//返回: 无
//日期:2011/12/12
//****************************************************************************
void write_reg(unsigned char port,unsigned char reg,unsigned char dat)
{
uart_sendByte(0x80+((port-1)<<4)+reg); //写地址
uart_sendByte(dat);//写数据
}