基于FPGA 的UART 扩展总线设计和应用

发布者:RadiantDreams最新更新时间:2012-09-03 来源: 21ic关键字:FPGA  UART  扩展总线 手机看文章 扫描二维码
随时随地手机看文章
   

摘要:现在嵌入式系统的功能越来越集合化,需要控制大量外设。外设模块普遍采用UART作为通信接口,但是通常处理器都会自带一个UART串口。实际应用中一个串口往往不够用,需要对系统进行扩展。本文所介绍的就是以FPGA为实现方式的UART扩展总线设备的逻辑设计以及相关的驱动程序的设计。

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 的网站上相关设计。[page]

   

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 的设计中采用三态门的设计。

[page]   

 

   

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 内部还可以添加其他通信模块,增强了系统的可扩展性。

关键字:FPGA  UART  扩展总线 引用地址:基于FPGA 的UART 扩展总线设计和应用

上一篇: Altera通过早期使用计划
下一篇:基于FPGA的星载计算机自检EDAC电路设计

推荐阅读最新更新时间:2024-05-02 22:18

Mentor Graphics宣布推出新的用于PCIe 4.0的验证IP
俄勒冈州威尔逊维尔,2014 年 12 月 8 日---Mentor Graphics公司(纳斯达克代码:MENT)今天宣布其新的Mentor®EZ-VIP PCI Express验证IP的即时可用性。这一新的验证IP (VIP)可将ASIC(应用程序特定集成电路)和FPGA(现场可编程门阵列)设计验证的测试平台构建时间减少多达10倍。 验证IP旨在通过为常见协议和架构提供可复用构建模块来帮助工程师减少构建测试平台所花费的时间。然而,即使是标准协议和常见架构,其配置和实施也可能会因设计而异。因此,传统的VIP元件可能需要数天甚至数周来准备模拟或仿真测试平台。 “在移动、网络及服务器SoC中使用ARMv8-A架构和A
[嵌入式]
基于FPGA的摄像机传感器接口实现
  图像传感器,是组成数字摄像头的重要组成部分。如果没有传感器,就没有图像信号可进行处理。众所周知传感器是非标准化的。在采用的方案中,它们有以下的不同之处:   转换可见光或红外光为电信号的方式;尤其是在该信号离开这块芯片之前,对这个信号采用的编码和压缩(有时)的方式。   对传感器内部的寄存器进行编程的方式,以调整增益、曝光时间、传感器模式(如线性、HDR),传感器图像坐标等。   实现特殊功能的方式,如高(或宽)动态范围(HDR/WDR);例如通过在同一封装中的多个传感器,对于同一图像帧多次曝光等。   这些传感器厂商采用的接口,以使这些电子图像信号离开传感器,并进入下游的处理逻辑。   FPGA提供一个具成本效
[嵌入式]
AVR单片机学习(七)异步串行口UART
串行通讯技术概述 异步串行通讯原理 UART与电脑的通讯 M16的USART 中断方式使用USART步骤 一、串行通讯技术概述 串行通讯的通俗定义: 一位发送一位(相对与并行,)当然通过 位同步 帧同步 串行通讯的分类 同步串行通讯 时钟线、数据线、通过时钟保持数据同步 SPI,IIC 属于同步串口通讯 异步串口通信 只有一根数据线,通过波特率保证数据同步(顾名思义没有时钟线只有数据线) UART 无线通信一般均为异步串行通信(相对于无形之中只能有一根天线) 波特率 每秒发送码元时间宽度为(1/9600)S 大概是在100个微妙左右 发送方按照
[单片机]
AVR单片机学习(七)异步串行口<font color='red'>UART</font>
使用FPGA实现低成本汽车多总线桥接
引言 汽车中的电子系统持续快速增长,因此对比一下汽车电子发展和消费类电子便携式产品的发展将会大有启发。如今的消费者希望在汽车中获得手持便携式电子设备所提供的方便与舒适性。汽车电子将不再局限于引擎管理系统或车身控制,而是扩展至新的领域,诸如信息娱乐、通信以及司机/乘客辅助系统等。 一个严峻的挑战是必须保证汽车寿命与车内电子设备寿命相匹配,这样才能避免由于技术过时和设备淘汰而增加额外的成本。从8轨唱片播放机到音频磁带播放机、CD播放机到MP3播放机,如此迅速的发展提醒汽车设计工程师,车内电子设备的生命周期相对较短。汽车标准的产生和变化进一步导致选择标准时必须考虑到其寿命、灵活性和被接受的广泛程度。目前使用的标准主要有LIN、CAN面向媒
[嵌入式]
赛灵思推出第二个28nm产品系列Virtex-7
全球可编程平台领导厂商赛灵思公司 (Xilinx, Inc. (NASDAQ:XLNX) )今天宣布推出了 Virtex-7 现场可编程门阵列 (FPGA) 系列的首款产品。28nm Virtex-7系列产品旨在满足设备制造商的各种要求,帮助他们实现具有最高吞吐量的有线通信系统;最高信号处理能力的高级无线基带处理系统;灵活、低时延、可扩展的广播系统。今年3月,公司推出了首批 Kintex-7 器件,这标志着 28nm FPGA 的问世。而 Virtex-7 产品的推出是赛灵思 28nm系列产品规划的又一里程碑。作为 7 系列高端产品,Virtex-7 系列产品相对前代产品而言,系统性能提高一倍,速度提升 30%,功耗降低 50%
[嵌入式]
舞起新衣袖:FPGA拭目以待
当以65nm保持领先竞争优势的赛灵思FPGA以“赛灵思公司的主要文化在于创新”的指领下不断地加快发展步伐,试图取得更大的市场时,DSP也以其广泛的覆盖范围在3C(Communication、COMPUTER、 Concumer-通信、计算机、消费类)领域大显身手,占整个市场需求的90%,而ASIC在遇到FPGA挑战现在仍然屹立不倒,让那些揣测ASIC会终结的市场分析人士也未能作出定论。 然而,市场机制决定的市场竞争是残酷而艰巨的,能否推出更新更优的产品,能否占有广大的市场空间,能否满足不断升级的客户的需求,无论对ASIC,对DSP,还是对FPGA,都是机遇和挑战并存的。 三足鼎立?   ASIC即专用集成电路,是指应
[焦点新闻]
基于FPGA+嵌入式处理器的违章车辆视频检测系统
0 引 言 随着我国经济的发展,机动车辆不断地增长,现有道路等硬件设施的增长已经满足不了日益膨胀的交通问题,智能交通系统(Intelligent Transportation System,ITS)越来越受重视。 所谓智能交通系统(ITS)就是将先进的信息技术、数据通信传输技术、电子传感技术以及计算机处理技术等有效地集成运用于整个地面交通管理系统而建立的一种在大范围内、全方位发挥作用的、实时、准确、高效的综合交通运输管理系统。近年来,ITS在城市交通管理方面得到了普遍应用,在缓解道路交通、防范交通违章及事故发生等方面获得了良好的效果。本文针对ITS应用,特别是电子警察系统的应用,提出了车辆违章视频检测方案,以适应ITS的发展需
[嵌入式]
基于<font color='red'>FPGA</font>+嵌入式处理器的违章车辆视频检测系统
51 UART配置流程
Step1: 设置TXD、RXD pin的输入输出属性,根据各芯片定义设置 例:P2CR &= 0xFB;//P2^1:UART_TXD, P2^2:UART_RXD Step2: 设置UART工作方式 设置SCON寄存器。例,SH88F02设置为工作方式1,SCON = 0x40; 在SH88F02应用中发现,必须先配置SCON在配置定时器,如果顺序颠倒UART不工作。 正常顺序见最后例程。 设置PCON的bit7可以设置波特率加不加倍。 Step3: 选择产生波特率的定时器 例,SH88F02选择定时器2为波特率发生器。 T2CON = 0x30; //(TCLK=1, RCLK=1)
[单片机]
小广播
热门活动
换一批
更多
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved