1 导言
在嵌入式范畴,由于UART 具有操作简略、作业牢靠、抗干扰强、传输间隔远(组成 485 网络能够传输1,200 米以上),规划人员普遍认为UART 是从CPU 或微操控器向体系的 其他部分传输数据的最佳方法,因而它们被大量地运用在工业、通讯和家电操控等嵌入式领 域。而一般处理器都会自带一个UART 串口,实践运用中一个串口往往不够用,需求进行 UART 串口扩展。而本文在剖析了片内总线技能和UART 的作业原理的根底上了完结UART 总线设备的规划,使主控芯片能够操控4~6 个外围设备。
本文中的嵌入式体系由AT91ARM9200 处理器、Linux 操作体系和ALTERA 公司的 ACEX 系列的EP1K 所组成。
2 EP1K 的逻辑规划
规划所要完结的功用是 AT91ARM9200 处理器经过EP1K 操控多个带有UART 接口的 外设。EP1K 中包含了多个逻辑模块如图1 所示,为了完结多个模块间的互联就需求片内总 线的支撑,而本文选用的是WISHBONE 片内总线标准。
2.1 WISHBONE 总线规划
WISHBONE选用主从结构,也称之为SLAVE/MASTER 结构。主单元MASTER 是主张 与从单元SLAVE 之间的数据传输,MASTER 和SLAVE 经过握手协议来完结牢靠通讯的。
WISHBONE 总线架构供给了四种不同的互联方法:点对点(Point-to-point)、数据流(Data flow)、同享总线(Shared bus)和交叉开关(Crossbar switch)。为了完结单个MASTER 和多个SLAVE 的规划要求,一起要求总线结构占用较少的逻辑单元,所以选用了同享总线 的互联方法。
同享总线应包含 MASTER、SLAVE、INTERCON 和SYSCON 四个部分。MASTER 和 SLAVE 是完结总线信号与IP 核的信号转化,INTERCON 用于MATER 和Slave 的信号互联, 而SYSCON 则供给安稳的时钟信号和复位信号。总线逻辑结构如图2 所示,由于只需一个 MASTER,规划时就省掉了对总线运用权的总裁。MASTER 的地址和数据总线别离与四个 SLAVE 相联,其它的操控信号也都是直接相连,而SLAVE 的选通是经过stb 信号完结。 SLAVE 的stb 信号是由地址译码发生SLAVE 挑选信号s_sel、m_cyc 和m_stb 三个信号相与 的成果。所选通的SLAVE 将ack 信号置1 标明一个数据传输周期的正常完毕并将数据锁存 或发送到总线上,而err 信号置1 表明非正常完毕,rty 信号置1 表明要求数据重发。
图 2 WISHBONE 总线的逻辑结构图
总线的详细规划进程请参阅 WISHBONE SoC Architecture Specification, Revision B.3,而 MASTER 和SLAVE 的规划能够参阅OpenCores 的网站上相关规划。
2.2 UART 的逻辑规划
UART 的通讯协议非常简略,以低电平作为开端位,高电平作为中止位,中心可传输 5~8 比特数据和1 比特奇偶校验位,奇偶校验位的有无和数据比特的长度由通讯两边约 定。一帧数据传输完毕后能够持续传输下一帧数据,也能够持续坚持为高电平,两帧之间 坚持高电平,持续时间能够恣意长。
UART模块由SLAVE接口、波特率操控器、UART接纳器和UART发送器构成。SLAVE 接口是为了完结WISHBONE 总线和功用模块之间的数据传输;UART 发送器的用处是将预备输出的并行数据依照根本UART 帧格局转为TXD 信号串行输出;UART 接纳器接纳RXD 串行信号,并将其转化为并行数据,但串并转化的时钟同发送器相同处理,收发设备间的时 钟是会累计的,会导致接纳数据不正确,波特率操控器便是专门发生一个远远高于波特率的 本地时钟信号对输入RXD 不断采样,以不断地让接纳器与发送器坚持同步。
波特率操控器实践上便是一个简略的分频器。能够依据给定的体系时钟频率(晶振时 钟)和要求的波特率算出波特率分频因子。已算出的波特率分频因子作为分频器的分频数。 关于波特率发生器中的系数一般在FPGA 完结时往往是固定的,但关于不同的完结,这个 系数需求更改。波特率操控器发生的分频时钟,不是波特率时钟,而是波特率时钟的16 倍,意图是为了在接纳现实进行精确地采样,以提出异步的串行数据。
UART 发送器由16 个字节FIFO 和信号发送器组成。FIFO 主要是起到数据缓存的效果, 信号发送器的中心部分由有限状况机完结的,完结伪代码如下:
case (状况机状况)
闲暇状况:if ( FIFO 中有数据 )
状况机跳转到 FIFO 读取状况;
else
状况机坚持闲暇状况;
FIFO 读取状况:读取FIFO 数据,保存到移位寄存器;状况机跳转到开端位状况;
开端位状况:时钟计数,发送开端位;计数完毕后状况机跳转到数据位状况;
数据位状况:时钟计数,发送数据,移位寄存器移位;计数完毕后
if(移位寄存器内数据发送完毕)
状况机跳转到中止位状况;
else
状况机跳转到数据位状况;
中止位状况:时钟计数,发送中止位;计数完毕后状况机跳转到 s_idle;
default:状况机复位到闲暇状况;
endcase
UART 接纳器包含了16 个字节FIFO、信号同步器和信号接纳器三个部分。其间信号同 步器则是为了处理串行数据帧和接纳时钟是异步问题,其它两部分和UART 发送器的中的 功用类似,仅仅数据传送的方向相反。
3 设备接口和驱动规划
3.1 设备接口规划
AT91ARM9200 芯片经过其静态存储操控器 (SMC)操控EP1K,而静态存储操控器 (SMC) 是操控外部静态存储器或外设的拜访。 SMC 可编程地址达512M 字节。它有8 个 片选及一个26 位地址总线。16 位数据总线能装备与8 位或16 位外部器材衔接。独立的读写操控信号答应存储器与外设直接衔接。SMC 支撑不同的答应单时钟周期存储器拜访的访 问协议。它还供给外部等候恳求才能。
由于 EP1K 内部规划运用的是8 位数据总线和8 位地址总线,所以AT91ARM9200 芯片与EP1K 相连的I/O 端口为 A[7:0],D[7:0],NRD 和NWR0。可是EP1K 内部选用 的WISHBONE 总线标准,其读写信号wb_we_o,高电平表明为写操作,低电平表明为 读操作。所以需求将NRD 和NWR0 进行相应的信号转化。而D[7:0]为双向端口IO, 所以在EP1K 的规划中选用三态门的规划。
3.2 设备驱动规划
AT91ARM9200 上运转的是Linux 操作体系,EP1K 作为一个外接设备正常运转,就需 要相应的linux 驱动程序。咱们将EP1K 的看作一个一般的字符设备,其关键是怎么完结两 个不同作业频率的设备正确通讯。而静态存储操控器 (SMC)供给的多等候状况办理,只需 依据详细时序对SMC 片选寄存器进行设置就能够了。此例中的SMC 一起还操控flash 存储 器、LCD 液晶显示器和其它外设,所以运用片选寄存器7,EP1K 的内部作业频率是6MHz, 为了使读写同步,设置刺进36 个等候周期。详细代码如下:
其间at91_sys_write( )函数在include/arch/hardware.h 中,并且是在linux2.6 内核中才呈现的。
Linux 的字符设备驱动分为设备初始化函数和设备卸载函数,并由内核宏module_init() 和module_exit()跋涉办理。
设备初始化函数首先要做的作业便是获取一个或多个设备编号。linux2.6 内核中供给了 静态和动态分配。如果在已知所需设备编号情况下,静态分配不失为一种较好的作业方法, 可是所选定的设备号若已分配给其它设备,就会形成抵触和费事。因而,主张选用动态分配 方法获取设备号。
一起运用 udev 在/dev/下动态生成设备文件,这样就防止运用指令或脚本创建造备文 件。办理类和类设备的相关内核函数:
struct class * class_create (struct module * owner, const char * name);
void class_destroy (struct class * cls );
struct class_device* class_device_create(structclass * cls, struct
class_device* parent, dev_t devt, struct device * device, const char * fmt, …);
void class_device_destroy (struct class * cls, dev_t devt);
留意,以上函数是2.6.13 开端有的,在2.6.13 之前,应当运用class_simple 接口。
设备初始化函数随后的作业是树立字符设备,并将与详细字符设备的相关数据结构注册 的设备中,如字符设备的文件操作接口file_operations。还有便是调用at91_sys_write( )函数 完结静态存储操控器 (SMC)的寄存器装备和ioremap()函数完结设备地址到用户内存的映 射。设备卸载函数的作业就恰恰相反,它包含了办理类,类设备和字符设备的毁掉,映射内 存和设备号的开释。
4 完毕语
本文的规划运用于一个长途主动抄表体系,该体系由用户电能表和抄表基站以及 GSM 模块等部分组成。抄表基站的中心AT91ARM9200 处理器以静态存储操控器(SMC)与EP1K 相连,经过EP1K 完结的UART 扩展总线设备对用户电能计量表进行办理,最终抄表数据 由GSM 模块传给远端主机。此规划选用以FPGA 为完结方法试整个体系具有以下长处:1、 体系规划具有灵活性,能够依据实践情况增加UART 模块;2、有用的确保了体系的常识产 权;3、在EP1K 内部还能够增加其他通讯模块,增强了体系的可扩展性。