串行设计

2024-06-10

串行设计(共12篇)

串行设计 篇1

异步串行通信无需数据时钟、帧同步时钟等时钟信号, 完全依靠收发双方约定的传输波特率和数据线自身的电平变化来正确的收发数据, 而且连线简单, 广泛应用于电子通信设备中。

由于许多微处理器都没有异步串行口, 为了实现异步串行通信, 需要使用专用串行通信芯片, 电路设计比较复杂。随着复杂可编程逻辑器件 (CPLD) 的发展, 按照异步串行通信的协议, 采用VHDL语言编程, 可以将异步串行通信功能集成到CPLD内, 也就是用软件的方法实现硬件的功能, 既减少了元器件数量、简化了电路, 又提高了设计的可靠性。软件编程采用的VHDL硬件描述语言, 设计灵活, 调试简单, 可以先通过计算机进行仿真, 再投入实际使用, 可大大降低设计的风险性。

1 异步串行通信基本原理

所谓异步串行通信是指具有不规则数据段传送特性的串行数据传输。异步通信数据帧的第一位是起始位, 在通信线上没有数据传送时处于逻辑“1”状态。当发送设备要发送一个字符数据时, 首先发出一个逻辑“0”信号, 这个逻辑低电平就是起始位。起始位通过通信线传向接收设备, 当接收设备检测到这个逻辑低电平后, 就开始准备接收数据位信号。因此, 起始位所起的作用就是表示字符传送开始。当接收设备收到起始位后, 紧接着就会收到数据位。数据发送完之后, 可以发送奇偶校验位。奇偶校验位用于有限差错检测, 通信双方在通信时需约定一致的奇偶校验方式。就数据传送而言, 奇偶校验位是冗余位, 但它表示数据的一种性质, 这种性质用于检错, 虽有限但很容易实现。在奇偶位或数据位之后发送的是停止位。停止位是一个字符数据的结束标志。

2 复杂可编程逻辑器件 (CPLD)

复杂可编程逻辑器件—CPLD (Complex Programmable Logic Device) , 是从PAL的GAL器件发展出来的器件, 相对而言规范大, 结构复杂, 属于大规模集成电路范围。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台, 用原理图、硬件描述语言等方法, 生成相应的目标文件, 通过下载电缆将代码传送到目标芯片中, 实现设计的数字系统。

3 VHDL语言

VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language, 诞生于1982年。1987年底, VHDL被IEEE和美国国防部确认为标准硬件描述语言。VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外, VHDL的语言形式、描述风格和句法十分类似于一般的计算机高级语言。

4 异步串行通信设计

4.1 总体框图

本设计规定的数据帧格式为:1位起始位, 8位数据位, 1位停止位, 无校验位;波特率为9600bps;系统时钟频率为1.8432MHz。程序主要包括波特率发生器、发送电路和接收电路三个部分。程序的功能框图如图1所示。

4.2 波特率发生器

波特率发生器实际上就是一个分频器, 主要是根据要求的串行口波特率, 将系统时钟进行分频, 分别产生发送时钟和接收时钟。发送时钟的频率与串行口波特率相同。由于串行数据帧与接收时钟是异步的, 为了实现接收时钟与接收数据帧的同步, 需要采用高速率时钟对接收数据进行采样, 一般选择16倍于波特率的时钟频率作为接收时钟。本设计中, 系统时钟 (1.8432MHz) 12次分频后得到接收时钟 (153600Hz) , 再将接收时钟16次分频后得到发送时钟 (9600Hz) 。

4.3 发送电路

4.3.1 发送电路原理

发送电路相对比较简单, 当有发送请求时, 按照发送时钟的时序, 在上升沿时刻依次发送起始位、8位数据和停止位。需要说明的是, 8位数据的发送顺序是先发送低位后发送高位。发送电路的时序图如图2所示。

4.3.2 发送电路设计

发送电路采用Moore型状态机的方式设计, 包括:空闲、发送起始位、发送数据位和发送停止位四个状态。发送电路的状态图如图3所示。

空闲状态:初始状态为空闲状态, 只有在空闲状态下, 才能检测是否有发送请求, 当检测到有发送请求时, 将8位数据装入发送移位寄存器, 进入发送起始位状态。

发送起始位状态:发送一位起始位, 进入发送数据位状态。

发送数据位状态:依次发送8位数据, 当8位数据全部发送完成后, 进入发送停止位状态。

发送数据位状态:发送一位停止位, 表示一帧数据发送完成, 再次进入空闲状态。

4.4 接收电路

4.4.1 接收电路原理

接收时钟在每个时钟周期都对接收数据进行采样, 当检测到当前数据位为“0”而前一个数据位为“1”时, 即表示检测到了起始位。为了保证读取数据的可靠性, 每个数据位均在中间点进行采样, 在检测到起始位后, 延迟8个接收时钟周期, 开始依次读取起始位、数据位和停止位, 两次读取的间隔为16个接收时钟周期。为了能够接收连续两帧数据中的后一帧, 读取到停止位的下一个时钟周期 (而不是延迟8个时钟周期) 即开始检测起始位。接收电路的时序图如图4所示。

4.4.2 接收电路设计

接收电路同样采用Moore型状态机的方式设计, 包括:空闲、接收起始位、接收数据位和接收停止位四个状态。接收电路的状态图如图5所示。

空闲状态:初始状态为空闲状态, 不断对数据进行采样, 检测起始位, 一旦检测到起始位, 即进入接收起始位状态。

接收起始位状态:接收一位起始位, 并对起始位的有效性进行判别, 若为虚假起始位, 则返回空闲状态, 若确认起始位有效, 则进入接收数据位状态。

接收数据位状态:依次接收8位数据, 当8位数据全部接收后, 进入接收停止位状态。

接收停止位状态:接收一位停止位, 表示一帧数据接收完成, 将8位数据送接收缓存, 再次进入空闲状态。

5 结语

本文对异步串行通信的工作原理、电路设计进行了分析, 采用VHDL语言编程, 在CPLD上实现了异步串行通信功能。该设计为固定波特率和数据帧结构, 无需微处理器进行额外设置, 操作简单, 使用方便。在实际工程应用中, 还可以根据需求, 在此基础上增加波特率设置、数据帧结构设置、地址译码等电路, 实现多路、波特率和数据帧结构可设置的异步串行通信。

摘要:异步串行通信技术在电子通信设备中被广泛使用。随着复杂可编程逻辑器件 (CPLD) 的发展, 按照异步串行通信的协议, 采用VHDL语言编程, 可以将异步串行通信功能集成到CPLD内, 也就是用软件的方法实现硬件的功能, 既减少了元器件数量、简化了电路, 又提高了设计的可靠性。

关键词:CPLD,VHDL,异步串行通信

串行设计 篇2

为期两周的单片机课程设计结束了,看着我们小组成员共同培育出来的设计成果,回想大家埋头设计的场景,我心里有种说不出的激动和高兴。

还记得单片机课程设计开始的那一天,李老师把大家召集到了单片机实验室,给我们介绍了此次课程设计的主要内容和注意事项。全班同学分成10个小组,每个小组都领到了不同的课程设计任务书。我与另外三个同学组成了一个小组,开始研究起此次设计的课题——串行通讯设计。

由于单片机原理及应用这门课程为我们上学期所学的内容,且串口通讯这部分知识点属于略讲内容,所以我们要做好本课题的设计,就必须要先把单片机串口通讯的知识点弄懂。于是大家开始分工合作,收集资料,明确设计步骤。

接下来的时间里,在老师的指导下和小组组长的带领下,我们小组成员共同整理了与课程设计有关的资料,确定了设计中需要使用的硬件和软件设备等,并绘制出了整个设计的流程图。通过上网、去图书馆查找相关资料,我们弄明白了本设计中使用的单片机AT89C52芯片、LED显示器等硬件的特点、工作方式和原理,也弄懂了PC机与单片机实现串行、并行传输数据的基本原理、PC机与单片机之间信号的电平转换方式。

整个课程设计中最有难度的部分是软件程序的编写。我们采用C语言和汇编语言分别编写了两套程序,其中我与组长采用C语言进行程序编写。程序经过不断地修改才能实现编译无误。最后还要进行优化,才能编出一套完整优质的程序。

接下来的时间里,我们带着编写好的程序输入KEIL,把程序烧录到单片机实验模块中,使用PC机串口调试助手进行调试。调试结果成功,老师对我们的设计给出了良好的评价,但同时也指出了其中的一些不足,如:C语言编写的程序在调试过程中显示结果准确但每一次只能传输一个数据;而汇编语言编写的程序在调试过程中虽可以一次性传送多个数据,却不能将结果通过LED显示器展现出来,于是我们又在原来的基础上做了一些改进。最后,我们要做的就是完成本次单片机课程设计的报告。

从这一次课程设计中,我学到了很多,不但巩固了计算机C语言和单片机原理及应用的知识,还学到了团队之间应该如何分工合作、团结互助。单片机课程设计实践性强,需要综合运用所学的知识,耐心、细心地去完成每一个细节,才能巩固和加深扩大所学的理论知识,将微型计算机应用系统的硬件、软件及其接口的设计和调试方法弄明白。这份课程设计成果,凝聚着我们小组4个成员的心血,以及指导老师的悉心帮助。我们收获的,也不仅

仅是这一份设计成果,更多的是知识的积累巩固、成员间的团结互助精神。

由于时间和知识水平有限,我们最后完成的设计成果中还存在着一些不足,恳请老师指正。在此,感谢老师的指导和帮助!

串行设计 篇3

关键词:相控阵 发射机 监控设计 单片机 串行轮询

中图分类号:TN911 文献标识码:A 文章编号:1674-098X(2016)06(b)-0074-02

Abstract:Ageing of the power amplifier modules or cables will make accuracy of the phased array radar reduced. The paper demonstrates the theory of the phased array radar transmitter,analyzes the merits of the PIC microcontroller serial alternation communication and the process of communication,actualizes the monitor of phased array radar transmitter reliably in a low-cost method.

Key Words:Phased array; Transmitter; Design of monitor; Microcontroller;Alternation communication

1 相控阵雷达发射原理

相控阵雷达即相位控制电子扫描阵列雷达,其快速而精确转换波束的能力使雷达能够在1 min内完成全空域的扫描。所谓相控阵雷达是由大量相同的辐射单元组成的雷达面阵,每个辐射单元在相位和幅度上独立受波控和移相器控制,能得到精确可预测的辐射方向图和波束指向。雷达工作时发射机通过馈线网络将功率分配到每个天线单元,通过大量独立的天线单元将能量辐射出去并在空间进行功率合成,形成需要的波束指向。

相控阵雷达的发射系统由数十至上百块功率放大模块组成,通过相控阵天线采用集中式发射,集中向天线面阵馈电并通过移相控制波束方向,发射馈线损耗较大,同时放大模块故障率较高。相控阵发射机长时间工作后,经常出现个别功率放大模块和线缆老化情况,虽然不会使雷达整体停止工作,但辐射方向图和波束指向均会发生偏移,进而对雷达精度和探测范围产生影响,亟需低成本的有效、可靠方法实现发射机全部功率放大模块的有效实时监控,从而降低相控阵雷达检修维护的难度。

2 PIC单片机与传感器串行组网

发射机功率放大模块内置传感器,可以直接监控是否在发射端口实际产生了电磁脉冲。发射模块传感器通信信号简单,除故障信号电平外只提供脉冲是否达到门限值的0/1信号。传感器具有RS232C电平串行数字通信功能,免去了传统模拟量监测时大量的模/数转换器件。由于传感器数量众多,串行轮询通信网络又极大地减少了线缆铺设数量,数字信号的传输同时可避免模拟信号的线缆内部衰减和干扰问题。

3 PIC单片机串行轮询通信

PIC单片机网络采用串行轮询通信主从通信模式,波特率9 600bit,8位数据位,1位起始位,1位停止位,无校验。PIC单片机设计为主站,包含发送请求信号、接收信号、逻辑判断和非正常状态字上传工控机的功能。全部内置传感器为从站,只在接收到主站通信请求后发送状态数据。PIC单片机主站可通过设计程序响应中断,进而通过中断程序控制整个串行轮询通信过程。对不同编号的内置传感器产生的中断赋予不同编号,利用PIC单片机与非逻辑程序语句完成感应器传回的状态字判读工作,并将非正常状态字上传工控计算机,最终实现雷达发射机的整体监控。

4 PIC单片机与工控机的通信

将PIC单片机其中一个通用串行通信接口设置为全双工异步串行通信模式。为了把单片机的RC6和RC7分别设置为串行接口发送/时钟线和接收/数据线,首先应当把SPEN位和方向存储器TRISC的D7:D6置1。[1]向波特率寄存器写入预定的数值并同时产生单片机定时器复位清零的效果,单片机初始化时对该非同步通信端口执行初始化程序:

BSF STATUS,RP1;程序指针指向数据存储器

MOVWF SPBRG;设置传输波特率

CLRF RCSTA;接收控制和状态寄存器清零

BSF RCSTA,SPEN;允许使用串口

CLRF PIR1;清除中断标志

CLRF TXSTA;发送控制和状态寄存器清零

BSF TXSTA,BRGH;设置为异步传输

BSF TXSTA,TXEN;发送允许开始

BSF RCSTA,CREN;接收允许开始

当工控机与单片机系统通信时,单片机数据存储器内的数据格式是十六进制,[1]向工控机传输的是十六进制数的ASCII码的二进制形式。雷达工控机使用windows系统,串口接收使用ANSI码,而ANSI码仅前126个与ASCII码相同。所以,设计中断编码时,必须考虑编码规则使字符长度满足要求。

5 结语

由于不同型号雷达发射模块出厂内置的传感器不尽相同,在监控设计过程中必须充分考虑传感器的通信性能,尤其要注意传感器对传输速率、信息位个数、校验位的要求。[2]在单片机中断响应设计时,也要对传感器的通信响应时间进行充分实验,否则容易引起轮询冲突,使监控系统不定期失效。另外,RS232C通信协议要求传输距离最好不超过20m,如确实需要较长通信传输距离,建议设计RS485接口的监控系统。[3]

参考文献

[1]周杰,张银胜,刘金涛,等.PIC单片机原理及系统设计[M].气象出版社,2008:227-229.

[2]赵雅兴.PSpice与电子器件模型[M].北京邮电大学出版社,2006:315-317.

串行设计 篇4

大脑是人类思维活动的中枢,是接受外界信号,产生感觉,形成意识,进行逻辑思维,发出指令,产生行为的指挥部。通过研究脑电信号(EEG)可以了解脑活动的机制及人的认知过程,也是诊断脑疾患的重要手段[1]。

现有的脑电信号采集系统绝大多数使用专用机器,使用、搬移、维修都很不方便。另外,抗干扰能力差,必须在特定环境(屏蔽室)下进行监测,而且检测数据记录量小,不能实现长时间、大容量的记录、分析,此外造价昂贵,采集到的脑电信号也不够准确,往往需要结合医生的经验做出诊断,故具有一定的主观性[2]。本文设计了一种新的基于USB 2.0的脑电信号采集电路。

1 脑电信号采集原理

分析脑电信号,掌握脑电信号的特征,对于设计出准确、有效的脑电信号采集电路至关重要。首先,可以从中选择出携带最多信息量的信号;其次,可以针对特定的信号研究出相应的信号处理算法[3]。

1.1 脑电波的特征及基本组成

脑电信号的特点主要有三个:频率主要集中在低频段100 Hz范围内;信号微弱,一般在50 μV或更小;信号的源阻抗高,易于受外界信号干扰。成年人的脑电信号幅度范围一般在10~50 μV之间,频率范围在0.5~30 Hz之间[4]。

1.2 脑电信号采集原理及方法

目前,对于脑电信号的测量,在时间的维度上,可以获得很高的解析率。然而,在空间的维度上,得到的分辨率却很低,这依赖于在头皮上安置电极的数量[5]。本系统使用16路电极提取脑电信号,采样频率为1 000 Hz。由于脑电信号的固有特性及环境因素使得脑电信号背景噪声比较复杂,有50 Hz工频干扰、心电伪迹、肌电干扰、基线漂移、电极与皮肤的接触噪声以及周围其他仪器的电磁干扰等[6]。因此,要求采集系统具有高输入阻抗、高共模抑制比、低噪声放大,并能从强噪声中提取弱信号的高质量滤波措施等。

脑电信号通常是通过在头皮表面放置一些电极来采集的。常用的电极种类有银管电极、针电极和粘连电极等,本系统使用银管电极,以实现头皮与脑电测量设备之间的连接。为了加强连通性和导电性,在电极与皮肤之间涂一些生理盐水。电极的放置采用国际10-20系统电极放置法[7]。

2 脑电信号采集电路设计

脑电信号采集电路包括:脑电信号放大、滤波、A/D转换及USB接口电路四部分,总体构成如图1所示。

2.1 脑电信号的前置放大电路设计

信号放大检测电路是本系统一个非常重要的环节。它为后续数据采集和处理分析做了硬件上的准备。本系统采用高精度仪用放大器AD8221作为前置放大电路[8],具有高输入阻抗、高共模抑制比、低噪声和抗干扰能力强等特点。当电极和皮肤接触时,可以产生几十毫伏的极化电位,所以前置放大器的放大倍数不能太大,以免造成电路的饱和。

2.2 高低通滤波器及二次放大电路设计

高低通滤波主要有两个作用:

(1) 去除脑电信号频率范围以外的无用信号,达到抗干扰的作用;

(2) 起到防混叠滤波的作用。为了不丢失有用信号,设计了截止频率为120 Hz的低通滤波电路和截止频率为0.5 Hz的高通滤波电路[9]。

低通滤波电路(见图2)使用AD8674芯片的U1A和U1B两部分组成巴特沃型二阶低通滤波器,负责把120 Hz以上的无用信号滤掉。高通滤波电路(见图3)由U1C组成巴特沃型高通滤波器,负责滤除0.5 Hz以下的干扰信号。

二级放大电路使用AD8674(A,B,D部)的U1C充当放大器,因为当频率在120 Hz以下时,AD8674的共模抑制比CMRR高达110 dB以上。通过调整R11和R14的比值,保证二级放大倍数为101倍。50 Hz工频干扰一直是电路设计中头痛的问题,在脑电这种微弱生物电提取系统中尤为突出[10]。本文设计了由双T网络和运算放大器构成的有源双T陷波电路来抑制50 Hz工频干扰。

2.3 三级放大及光电隔离设计

第三级放大电路(见图4)通过调整电阻器R19的阻值来保证经过第三级放大后,10~50 μF的微弱脑电信号将变为0~2.5 V。光电隔离电路负责把信号的采集放大部分(该部分使用电池供电)和后面的A/D转换部分(该部分使用交流供电)隔离开,以防止两部分信号之间相互干扰。

2.4 模数转换及USB接口电路设计

系统选用CY7C68013-128AC芯片作为USB接口芯片,构成USB接口电路(如图5)。其中,A0~A18为地址线,普通的8位端口(D0~D7)和E口(D8~D15)组成16位数据线[11]。

A/D转换电路(见图6)的采样精度为16位,采样频率为1 000 Hz。USB控制器通过CNVST#管脚(AD7675的35号引脚)控制AD7675对每路脑电信号进行转换,同时还通过查询BUSY管脚(AD7675的29号引脚)来获知AD7675当前的状态。USB控制器还要响应主机的请求,把脑电数据及时、准确地传送给主机。为了提高转换的准确性,设计了采样保持电路,负责把16路脑电信号同时锁存,然后逐一进行转换。

由于每秒产生32 KB(16×16×1 000)的脑电数据,因此为了保证有足够的空间暂时保存这些脑电数据,在CY7C68013芯片外扩充了一块SDRAM,容量为256K×16 b。

3 结 语

脑电信号(EEG)是人体重要的生物电信号,目前关于脑电信号的采集与处理在某些疾病患者治疗过程中的作用已得到医疗机构越来越广泛的重视。本文详细论述了USB 2.0接口脑电信号采集电路的设计过程。该系统实现了脑电数据的采集、高速传输和实时处理,有效解决了传统脑电数据采集系统速度慢,处理功能简单,数据存储量小,连接复杂等缺陷,满足了实际需要。

参考文献

[1]李美,杨世清.脑电信号采集系统设计方法[J].自动化与仪器仪表,2007(6):25-27.

[2]谢松云,张振中,杨金孝,等.脑电信号的若干处理方法研究与评价[J].计算机仿真,2007,24(2):324-326.

[3]吴婷,颜国华,杨帮华.一种快速的脑电信号特征提取与分类方法[J].系统仿真学报,2007,19(18):132-134.

[4]谭郁玲.临床脑电图与脑电地形图[M].北京:人民卫生出版社,1999.

[5]Shusaku Shigemural,Toshihiro Nishimura1.An Investiga-tion of EEG Artifacts Elimination using a Neural Networkwith Non-recursive[A].2nd Order Veteran Filters Pro-ceedings of the 26th Annual International Conference of theIEEE EMBS[C].San Francisco,2004,5(9):612-615.

[6]陶青,谢勤岚.基于RLS算法的脑电信号的去噪[J].现代电子技术,2006,29(11):143-145.

[7]柏树令.系统解剖学[M].5版.北京:人民卫生出版社,2001.

[8]Analog Devices Inc.Precision Instrumentation AmplifierAD8221 Data Sheet[Z].2003.

[9]高振斌,贾希,贾志成.基于小波变换的脑电信号降噪方法的研究[J].河北工业大学学报,2006(6):30-32.

[10]钟文华.基于ARM的脑电信号采集系统[J].国外电子元器件,2008(2):13-15.

串行设计 篇5

一 引言

TI公司的TMS320LF2407型DSP微控制器内嵌的异步串行口(SCI)支持CPU与其它使用标准格式的异步外设之间的数字通讯,通过RS-232接口可以方便地进行DSP之间或与PC机之间的异步通信。而串行外设接口(SPI)是一个高速同步串行输入/输出(I/O)端口,常用于DSP控制器和外部器件或其它控制器间的通讯。本设计正是通过TMS320LF2407所带有的SCI模块进行两台DSP的数据传输通信。同时还利用了DSP2407的SPI模块和I/O口作了显示以及键盘扩展电路,以便能实时监控数据的收发。此实例电路结构简单易懂,非常适合刚接触DSP的初学者使用,具有很好的参考价值。

二 硬件原理设计

此设计主要包含两大模块:一是DSP之间的串行通讯模块:二是DSP与显示器及键盘的串行显示接口模块。以下分别详细介绍每一模块的硬件原理及软件设计。

2.1 SPI外设显示接口模块:SPI是一个高速同步串行输入/输出端口,它允许一个具有可编程串行外设接口长度(1到16位)的串行位流,以可编程的位传送速率从设备移入或移出。本设计利用SPI口外接4片74LS164作为4位LED显示器的静态显示接口,把LF2407的SPISIMO引脚作为数据输出线,SPICLK引脚作为移位时钟脉冲。74LS164为TTL单向8位移位寄存器,可实现串行输入,并行输出。其中A,B(第1、2脚)为串行数据输入端,两个引脚按逻辑与运算规律输入信号,用同一个输入信号时可并接。CLK(第8脚)为时钟输入端,可连接到串行口的SPICLK端。

2.2 串行通讯接口(SCI)模块:

SCI模块的接收器和发送器是双缓冲的,每一个都有它单独的使能和中断标志位。两者可以单独工作,或者在全双工方式下同时工作。SCI使用奇偶校验,超时,帧出错监测确保数据的准确传输。SCI 的两个外部引脚SCITXD(数据发送端)和 SCIRXD(数据接收端)在不用来通讯时可作普通的I/O。SCI有一个16位的波特率选择寄存器,在40M的`晶振下,可以设定从76bps~1875Kbps不同的波特率。图2是TMS320LF2407的串行通讯接口电路。该电路采用了符合RS-232标准的驱动芯片MAX232进行串行通讯。MAX232芯片功耗低,集成度高,+5V供电,具有两个接收和发送通道。由于TMS320LF2407采用 +3.3V供电,所以在MAX232 与TMS320LF2407之间必须加电平转换电路。本设计系统采用了一个二极管(1N4007)和三个电阻进行电平转换。整个接口电路简单,可靠性高。

图2 TMS320LF2407的串行通讯接口电路

三 系统软件及通讯协议设计

软件及通讯协议设计主要包括了DSP系统初始化,SPI初始化,SCI初始化,SCI发送接收数据,SPI显示数据五大部分。

3.1 DSP系统初始化

此部分程序设计主要是为了使DSP进入正常的工作状态。其主要的设计步骤如下图示。

3.2 SPI与SCI初始化

TMS320LF2407的SPI和SCI初始化包括以下几大部分:把相对应的I/O口配置成具有SPI,SCI的特殊功能;时钟模式的选定;波特率选择;发送接收数据长度选择;内部相对应的时钟使能。所有设置都是通过相对应的SPI,SCI控制寄存器实现的。具体步骤如下图示。

3.3 SCI发送接收数据及SPI显示: 通讯协议采用异步串行通讯方式,波特率为9600bps,数据包括8位数据位、无、奇偶校验位、1个低电平起始位和1个高电平停止位。采用地址位多处理器模式。通讯软件设计采用查询方式,即查询到相应标志位满足条件时,就发送一个数据并送往SPI模块显示。具体设计步骤如图5所示。

四 结束语

串行通信与重叠I/O 篇6

关键词:串行通信;RS232;重叠;I/O;Win API

中图分类号:TN914文献标识码:A文章编号:1007-9599 (2010) 06-0000-02

Serial Communication and Overlapping I/O

Yu Lu,Li Qing

(PLA 91550 Troop,Dalian116023,China)

Abstract:The serial communication to facilitate easy,widely used in both military and civilian.In combination with the hardware described in detail in the Windows environment,use the Win API for asynchronous serial communication method.

Keywords:Serial communication;RS232;Overlap;I/O;Win API

一、前言

串行通讯在通讯领域被广泛应用,标准的RS232接口已成为计算机、计算机外设、交换机和许多通讯设备的标准接口。微机与微机、微机与外设、微机与程控交换机等都可以通过RS232接口进行方便的连接,以实现控制外设和传输数据等目的。

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。笔者在实际工作中积累了一些经验,现结合硬件、软件,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助。

二、RS232串口标准

EIA-RS-232是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串行接口标准。该标准规定:直接连接的最大物理距离为15m,通讯速率低于20kbps。

由于RS232并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。表1介绍了其中两种连接器(DB-25,DB-9)。

RS232标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,但常用的只有9根。

目前较为常用9针串口和25针串口,当通信距离较近时,可以用电缆线直接连接,若距离较远,须附加Modem。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。表2列举了RS232串口通信接线方法。

EIA-RS-232对电气特性、逻辑电平和各种信号线功能都作了规定。

在TxD和RxD上:

逻辑1(MARK)=-3V~-15V。

逻辑0(SPACE)=+3V~+15V。

在RTS、CTS、DSR、DTR和DCD等控制线上:

信号有效:(接通,ON状态,正电压)=+3V~+15V。

信号无效:(断开,OFF状态,负电压)=-3V~-15V。

三、Win32串口应用程序

(一)打开串口

Win32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的声明为:HANDLE CreateFile(LPCTSTR lpFileName,//文件名DWORD dwDesiredAccess,//访问模式DWORD dwShareMode,//共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes,//通常为NULL

DWORD dwCreationDistribution,//创建方式

DWORD dwFlagsAndAttributes,//文件属性和标志

HANDLE hTemplateFile // 临时文件的句柄,通常为NULL

);

如果调用成功,那么该函数返回文件的句柄,如果调用失败,则函数返回INVALID_HANDLE_VALUE。

(二)串口配置和串口属性

在打开通信设备句柄后,常常需要对串口进行一些初始化工作。这需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、每个字符的数据位数、奇偶校验和停止位数等信息。在查询或配置串口的属性时,都要用DCB结构来作为缓冲区。

调用GetCommState函数可以获得串口的配置,该函数把当前配置填充到一个DCB结构中。一般在用CreateFile打开串口后,可以调用GetCommState函数来获取串口的初始配置。要修改串口的配置,应该先修改DCB结构,然后再调用SetCommState函数用指定的DCB结构来设置串口。

除了在DCB中的设置外,程序一般还需要设置I/O缓冲区的大小和超时。Windows用I/O缓冲区来暂存串口输入和输出的数据,如果通信的速率较高,则应该设置较大的缓冲区。调用SetupComm函数可以设置串口的输入和输出缓冲区的大小。

(三)串口读写

在用ReadFile和WriteFile读写串口时,既可以同步执行,也可以重叠(异步)执行。在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞,从而导致效率下降。在重叠执行时,即使操作还未完成,调用的函数也会立即返回。费时的I/O操作在后台进行,这样线程就可以干别的事情。例如,线程可以在不同的句柄上同时执行I/O操作,甚至可以在同一句柄上同时进行读写操作。“重叠”一词的含义就在于此。

ReadFile函数只要在串口输入缓冲区中读入指定数量的字符,就算完成操作。而WriteFile函数不但要把指定数量的字符拷入到输出缓冲中,而且要等这些字符从串口送出去后才算完成操作。

ReadFile和WriteFile函数是否为执行重叠操作是由CreateFile函数决定的。如果在调用CreateFile创建句柄时指定了FILE_FLAG_OVERLAPPED标志,那么调用ReadFile和WriteFile对该句柄进行的读写操作就是重叠的,如果未指定重叠标志,则读写操作是同步的。

函数ReadFile和WriteFile的参数和返回值很相似。这里仅列出ReadFile函数的声明:

BOOL ReadFile(

HANDLE hFile,//文件句柄

LPVOID lpBuffer,//读缓冲区

DWORD nNumberOfBytesToRead,//要求读入的字节数

LPDWORD lpNumberOfBytesRead,//实际读入的字节数

LPOVERLAPPED lpOverlapped//指向一个OVERLAPPED结构

);//若返回TRUE则表明操作成功

需要注意的是如果该函数因为超时而返回,那么返回值是TRUE。参数lpOverlapped在重叠操作时应该指向一个OVERLAPPED结构,如果该参数为NULL,那么函数将进行同步操作,而不管句柄是否是由FILE_FLAG_OVERLAPPED标志建立的。

当ReadFile和WriteFile返回FALSE时,不一定就是操作失败,线程应该调用GetLastError函数分析返回的结果。例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回FALSE,而且GetLastError函数返回ERROR_IO_PENDING。

在使用重叠I/O时,线程需要创建OVERLAPPED结构以供读写函数使用。OVERLAPPED结构最重要的成员是hEvent,hEvent是一个事件对象句柄,线程应该用CreateEvent函数为hEvent成员创建一个手工重置事件,hEvent成员将作为线程的同步对象使用。如果读写函数未完成操作就返回,就那么把hEvent成员设置成无信号的。操作完成后(包括超时),hEvent会变成有信号的。

如果GetLastError函数返回ERROR_IO_PENDING,则说明重叠操作还为完成,线程可以等待操作完成。有两种等待办法:一种办法是用象WaitForSingleObject这样的等待函数来等待OVERLAPPED结构的hEvent成员,可以规定等待的时间,在等待函数返回后,调用GetOverlappedResult。另一种办法是调用GetOverlappedResult函数等待,如果指定该函数的bWait参数为TRUE,那么该函数将等待OVERLAPPED结构的hEvent事件。GetOverlappedResult可以返回一个OVERLAPPED结构来报告包括实际传输字节在内的重叠操作结果。

如果规定了读/写操作的超时,那么当超过规定时间后,hEvent成员会变成有信号的。因此,在超时发生后,WaitForSingleObject和GetOverlappedResult都会结束等待。WaitForSingleObject的dwMilliseconds参数会规定一个等待超时,该函数实际等待的时间是两个超时的最小值。注意GetOverlappedResult不能设置等待的时限,因此如果hEvent成员无信号,则该函数将一直等待下去。

在调用ReadFile和WriteFile之前,线程应该调用ClearCommError函数清除错误标志。该函数负责报告指定的错误和设备的当前状态。

调用PurgeComm函数可以终止正在进行的读写操作,该函数还会清除输入或输出缓冲区中的内容。

(四)超时设置

在用ReadFile和WriteFile读写串口时,需要考虑超时问题。如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFile或WriteFile的操作就会结束。要查询当前的超时设置应调用GetCommTimeouts函数,该函数会填充一个COMMTIMEOUTS结构。调用SetCommTimeouts可以用某一个COMMTIMEOUTS结构的内容来设置超时。

有两种超时:间隔超时和总超时。间隔超时是指在接收时两个字符之间的最大时延,总超时是指读写操作总共花费的最大时间。写操作只支持总超时,而读操作两种超时均支持。用COMMTIMEOUTS结构可以规定读/写操作的超时,该结构的定义为:

typedef struct_COMMTIMEOUTS {

DWORD ReadIntervalTimeout;//读间隔超时

DWORD ReadTotalTimeoutMultiplier;//读时间系数

DWORD ReadTotalTimeoutConstant;//读时间常量

DWORD WriteTotalTimeoutMultiplier;//写时间系数

DWORD WriteTotalTimeoutConstant;//写时间常量

} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

COMMTIMEOUTS结构的成员都以毫秒为单位。总超时的计算公式是:总超时=时间系数×要求读/写的字符数+时间常量

例如,如果要读入10个字符,那么读操作的总超时的计算公式为:读总超时=ReadTotalTimeoutMultiplier×10+ReadTotalTimeoutConstant

可以看出,间隔超时和总超时的设置是不相关的,这可以方便通信程序灵活地设置各种超时。

如果所有写超时参数均为0,那么就不使用写超时。如果ReadIntervalTimeout为0,那么就不使用读间隔超时,如果ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都为0,则不使用读总超时。如果读间隔超时被设置成MAXDWORD并且两个读总超时为0,那么在读一次输入缓冲区中的内容后读操作就立即完成,而不管是否读入了要求的字符。

在用重叠方式读写串口时,虽然ReadFile和WriteFile在完成操作以前就可能返回,但超时仍然是起作用的。在这种情况下,超时规定的是操作的完成时间,而不是ReadFile和WriteFile的返回时间。

四、结束语

以上给出了用Win32 API设计串行通信的基本思路,这个重叠(异步)I/O操作的串行通信程序,曾多次应用于大型任务,表现出良好的性能。在实际应用中,可以以此为模型稍加改造,设计出满足需要的各种串行通信程序。

参考文献:

[1]李现勇.Visual C++串口通信技术与工程实践[M].人民邮电出版社,2004,7

串行设计 篇7

关键词:Modbus协议,单片机,工控系统,串口通信

1 Modbus协议

当在Modbus网络上通信时,每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。查询-回应周期如图1所示。

控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等)。在配置每个控制器时,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。

2 工控系统通信协议设计

(1)使用ASCII模式。

(2)接收与发送以ACK(06h)or NACK(15h)响应。

(3)ACK(06h)or NACK(15h)无接收内容时,重新传送。

(4)初期接电源时确认连接状态:单片机(STX+ENQ(05h)+ETX)→工控系统,从单片机传送连接确认信号;工控系统(STX+ACK(06h)or NACK(15h)+ETX)→单片机,在工控系统响应。

(5)单片机→工控系统Station传送编号:单片机(STX(02h)d1 d0 ETX(03h))→工控系统,在单片机传送0~99号;工控系统(STX+ACK(06h)or NACK(15h)+ETX)→单片机,在工控系统响应。

(6)工控系统传送Tag编号→单片机:工控系统(STX(02h)d2 d1 d0 ETX(03h))→单片机,工控系统传送0~255号;单片机(STX+ACK(06h)or NACK(15h)+ETX)→工控系统,在单片机响应。

(7)工控系统传送Error Reset→单片机:工控系统(STX(02h)R(52h)ETX(03h))→单片机,在工控系统传送‘R’;单片机(STX+ACK(06h)or NACK(15h)+ETX)→工控系统,在单片机响应。

(8)工控系统发生Error时传送Error代码→单片机:工控系统(STX(02h)‘E’d2 d1 d0 ETX(03h))→单片机,工控系统传送Error代码。

3 串口通信

RS-232串行接口也称标准串口,是最常用的一种串行通信接口。RS-232采取不平衡传输方式,即所谓单端通信。由于发送电平与接收电平的差仅为2~3V,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大约15m,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通信而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。RS-232(DB9)接口说明如图2所示。

4 工控系统串行通信的硬件设计

4.1 硬件系统的构成

采用两片80C51单片机作为通信对方,分别用单片机各自的通用异步接收和发送器发送和接收数据。利用RS-232接口延长通信距离,在通信双方单片机的串行接口部分增加RS-232电气转换接口,选择MAX232集成芯片构成接口电路。此外,根据设计要求,还需要选择控制器(甲机)的一个8位I/O接口按键来控制工控系统(乙机)。系统结构如图3所示。

4.2 RS-232串行接口电路的设计

RS-232接口电路如图4所示。通常RS-232接口以9个引脚(DB-9)或是25个引脚(DB-25)的型态出现,一般个人计算机上会有两组RS-232接口,分别称为COM1和COM2。

参考文献

串行设计 篇8

串行通信接口在CPU和外部设备或者微处理器与外设进行通信之间扮演着十分重要的角色。其主要基本功能是在系统总线和I/O设备之间传输信号, 提供缓冲作用, 以满足接口两边的时序要求。传统的异步串行通信接口一般采用专用的接口芯片实现。例如串行通信接口8251A, 而在现代数字系统设计中要求相对较少的芯片的数量以减少其硬件开销、缩小系统体积、降低能源消耗、提高系统的性能和可靠性。因此CPLD的出现, 为异步串行通信接口的设计提供了一种新的途径。CPLD具有高速、成本低廉、设计周期短和应用灵活等特点, 可以实现专用集成电路。本设计通过VHDL语言在CPLD上进行编程实现异步串行接口, 实验表明正确可靠, 灵活性强。

1 异步串行接口的CPLD设计及实现方法

数据传输的通信协议是对数据传输的约定, 包括定时、控制、格式化和数据表示法。串行通信是指数据是一位一位按顺序传送的通信方式, 其突出优点是只需要一对传输线 (利用电话线就可作为传输线) , 这样就大大降低了传送成本, 特别适用于远距离通信。其缺点就是传送速度较低。异步传输是把每个字符看作以个独立的信息, 并且字符出现在数据流中的相对时间是任意的。然而在每个字符中的各位以预定的固定时钟传送。因此其实质是在字符内部是同步的, 而在字符间是异步的。

1.1 CPLD简介

复杂可编程逻辑器件CPLD是一种用户根据各自需要而自行构造逻辑功能的数字集成电路, 其基本设计方法是借助EDA软件, 用原理图、状态机、布尔表达式、硬件描述语言等方法, 生成相应的目标文件, 用编程器和下载电缆用目标器件实现设计的数字系统。在互连特性上, CPLD采用连续互连方式, 即用固定长度的金属线实现逻辑单元之间的互连。这种连续式的互连结构能方便的预测设计的时序同时保证了CPLD的高速性能。CPLD的集成度一般可达数千甚至数万门, 能够实现较大规模的数字逻辑电路集成。其前期设计仿真及配置可以在软件平台上完成, 在很大程度上缩短了电路设计周期。本设计采用的芯片是ALTERA公司的MAX7000系列的EPM7256AETC144-10。

1.2 功能模块的划分

许多外设与计算机或者微处理器是按照串行方式进行通信的, 也就是说数据是按照1位1位进行传输的, 在传输过程中, 每1位数据都占据一个固定的时间长度, 这种情况下, 就要用串行接口把这个外设连接到总线上。具体的说一个接口完成的功能主要包括以下几个方面:寻址、输入/输出、数据转换、联络、中断管理、复位、可编程和错误检测功能。同时在接口设计中, 常常要考虑对错误的检测问题, 包括传输错误和覆盖错误。根据这些特点将其分为六部分:接收移位寄存器、输入锁存器、输入控制逻辑、发送移位寄存器、输出锁存器、输出控制逻辑。其功能框图如图1所示。

其中输入锁存器总是和接收移位寄存器配对使用的, 在输入过程中, 数据1位1位从外设进入接口的移位寄存器, 当接收完1个字符以后, 数据就从移位寄存器送到输入锁存器, 同时发出中断和进行错误检测, 通知微处理器来取走数据和是否发送传输错误。这些都是通过输入控制逻辑来控制完成的。输出过程和输入过程类似, 其输出锁存器和发送移位寄存器配对使用, 当微处理器往输出锁存器中输出1个数据后, 数据便传输到移位寄存器, 然后1位1位的通过输出线送到外设, 同时在输出中加入了起始位、校验位和停止位, 这些都是通过输出控制逻辑控制完成。由此可见发送移位寄存器完成了并/串变换, 而接收移位寄存器完成了串/并变换。

1.3 用VHDL语言设计实现异步串行接口

VHDL语言是超高速硬件描述语言, 其优点:具有更高的抽象级别, 它不仅可以从物理上描述电路, 更可以从逻辑上描述电路的功能。VHDL能支持逻辑单元的重用, 支持类属和带参数过程的函数, 当需要改变电路规模时, 只需要改变类属和参数值即可。VHDL可读性好、可移植性强。这种设计方法的引入使系统硬件的升级实现了软件化。

异步串行的数据格式是第一位为起始位 (低电平) , 接下来为5-8个信息位 (由低到高排列) , 信息位后面是校验位, 可设置成奇校验或偶校验。最后的数位为1, 作为停止位。

按照自上而下的设计方法可以将此异步串行接口划分成两个功能模块:接收模块和发送模块。接收模块主要完成将串行的输入数据变成并行的数据, 然后通知微处理器将其读走。在接收线上未出现下降沿时, 接收模块一直处于空闲状态, 一旦出现下降沿, 接收模块进入捕获状态, 寻找正确的起始位, 如果检测到起始位, 则进入移位模式, 如果没有找到正确的起始位, 则返回空闲状态。在接收数据的同时进行奇偶校验和错误检测。当接收到一个完整的数据帧时, 接收模块又返回到空闲状态。复位信号可使接收模块进入空闲状态。因此整个接收过程可分为三个状态:空闲、捕获和移位。

在空闲状态时, 接收移位寄存器全部置1, 接收模块一直在检测输入线是否有表明有新数据帧的下降沿。为了确保不接收到错误的数据, 内部波特率时钟产生器被禁止。在捕获状态时, 当输入数据线出现下降沿, 接收模块开始寻找正确的起始位, 为了正确的采样起始位和接下来的数据位, 应该在其各自的中点进行采样。从而阻止了在接收过程中噪声的干扰。一旦找到了起始位, 则内部波特率时钟开始计数, 产生接收时钟rxclk, 其上升沿同步于起始位的中点。在移位状态时, 在rxclk上升沿的控制下, 数据从接收线上移位进入接收移位寄存器, 并且进行奇偶校验, 当起始位进入移位寄存器第0位时, 下一个rxclk的上升沿将使接收模块进入空闲状态, 并且不产生rxclk。移位完而进入空闲状态后, 移位寄存器中的内容被加载到输入锁存器中, 并产生rxrdy信号以通知锁存器中有新数据, 微处理器可来读取。当接收的数据帧的停止位不为1时, 就会产生帧错误信号frameerr。当接收移位寄存器移入新数据而输入锁存器中的数据仍未被读出时, 就会产生覆盖错误信号, 其数据不会被加载到锁存器中。

发送模块主要完成将并行的数据转换为串行的数据输出, 并加上起始位、校验位和停止位。其过程可分为:空闲、加载和移位。在空闲状态时, 串行输出线输出为高电平状态, 发送模块等待将新数据写入输出锁存器。一旦传输完成和要发送的数据准备好后, 发送模块进入加载模式。在加载模式时, 锁存器中的数据被加载到移位寄存器。同时移入标志位以监视数据的发送过程。起始位首先被输出到输出线上, 当移位寄存器被成功加载时, 会发出中断txrdy, 表明开始传输并且输出锁存器中又可以写入新数据。在移位状态时, 在发送时钟上升沿的控制下数据由移位寄存器发送至输出线。而移位寄存器由0来填充。同时产生校验位。

按照上述对接收和发送模块的状态描述, 通过VHDL语言编程设计出如图2所示的功能模块。

2 仿真结果

本设计采用了波特率因子为16, 即其主时钟的频率是串行速率的16倍。其仿真结果如图3所示。测试时, 接收的数据用来发送。假设接收的第1个数据为F5h, 其在串行线上的格式为:“01010111101”, 采用了偶校验, 则其校验位应为0, 发送是“01010111101”即数据位为F5h, 并且奇偶校验输出上未出现高电平, 即没传输错误。同时在数据接收完时, rxrdy变为高电平, 用来向微处理器发出中断, 通知其可来将数据读走。当微处理器发出read信号时, rxrdy又置于低电平。假设第2个接收数据为F0h, 其在串行线上的格式为应为“01111000001”, 而此接收为“01111000011”, 因此在parityerr上出现了高电平, 出现了传输错误。在发送时, 当微处理器发出写 (write) 信号时, txrdy变为高电平, 当输出线tx上开始发送时, txrdy变为低电平, 表明又可以向输出锁存器中写入数据。最后通过编程下载到芯片中, 从而完成了设计。

3 结论

采用CPLD可编程芯片实现异步串口功能, 取代了专用的异步串口芯片, 使电路设计更加灵活、方便、简洁。减少其硬件开销、缩小系统体积、降低功耗、提高系统的性能和可靠性。因此CPLD的出现, 为异步串行通信接口的设计提供了一种新的途径。S

参考文献

[1]徐飞.EDA技术与实践[J].清华大学出版社, 2011.

微处理器串行Flash接口设计 篇9

在微处理器系统中使用Flash存储器,可以有效地将微处理器系统的灵活性和大容量存储的特性结合起来[1],用简单的设计完成复杂的任务。8位微处理器需要一种高效的数据总线来完成它与Flash之间的大量数据传送,SPI总线由于占用的接口总线少,通信效率高并且大部分处理器芯片都支持,因而通过它实现通信是一种理想的设计方案。目前的工作,多是针对于自带SPI接口的单片机与Flash的通信,还有一部分是针对不带SPI接口的微控制器,利用微控制器的I/O口结合软件模拟SPI时序实现了微控制器[2]与Flash之间的通信。基于这种情况,该文提出了微处理器串行Flash接口设计,利用微处理器的外部RAM结合软件控制来模拟SPI时序,实现Flash存储器和微处理器之间的通信。结果证明,这种方案使两者之间通信更简便迅捷。

1 系统介绍

整个系统由8位微处理器[3,4]、SPI串行总线接口、外围设备Flash组成,8位微处理器发起Flash的读写指令及地址、SPI工作使能信号和时钟,因此在系统中起着核心控制作用。

SPI总线是一个同步串行接口的数据总线,它具有全双工、信号线少、协议简单等优点,由于串行总线的信号线比并行总线更少更简单,越来越多的系统放弃使用并行总线而采用串行总线。SPI总线最典型的应用就是主机与外围设备(如Flash、RAM、A/D转换器、LED显示器、实时时钟等)之间的通信。串行外围接口一共有4种操作模式,这些模式决定了利用时钟信号的哪个沿来控制数据传送,这些模式由CPU来设置[5]。SST25系列的Flash支持SPI模式0和3,该文中SPI采用模式0,在时钟信号的上升沿捕获数据,下降沿移出数据。SPI接口一般使用4条线:串行时钟线SCK、主机输入/从机输出数据线SI、主机输出/从机输入数据线SO和低电平有效的从机选择线SCS,其时序图如图1所示。

本系统中Flash采用的是SST25系列SST25VF064C串行Flash,该片具有与工业标准SPI接口兼容的外部引脚,工作电压为2.7-3.6v,它通过SCK、SO、SI、CE等四个管脚作为数据的读写,可以减少控制IO的数量。

2 系统结构及设计

2.1 结构框图

系统的结构框图如图2所示。

8位微处理器与SPI之间有7根信号线连接,分别是exram_cs、exramaddr、exramrd_enb、exramwr_enb、rstb、osc、databus,它们的定义如下。

exram_cs:外部数据RAM片选信号,低有效;

exramaddr:外部数据RAM地址口;

exramrd_enb:外部数据RAM读使能,低有效;

exramwr_enb:外部数据RAM写使能,低有效;

rstb:8位微处理器输出的复位信号,低有效;

osc:8位微处理器时钟;

databus:数据总线。

SPI与Flash之间有5根信号线,分别是SO、SI、SCK、RST、SCS,它们的定义如下。

SCK:同步时钟信号,用来同步SPI和Flash的数据传输,由SPI控制输出,Flash在SCK的边沿接收和发送数据;

SO:SPI输出Flash输入信号,主机在下降沿通过该信号线发送数据给Flash,Flash在上升沿通过该信号线接收该数据;

SI:SPI输入Flash输出信号,Flash在下降沿通过该信号线发送数据给SPI,SPI在上升沿通过该信号线接收该数据;

SCS:Flash片选信号,由主机控制输出,低有效。

2.2 硬件设计

2.2.1 SPI接口系统框图

考虑到SPI的数据传输速度和8位微处理器总线速度不同,为了与8位微处理器总线速度匹配,对应发送和接收功能各需要一个FIFO模块[6],用于读写操作时缓存数据,一个发送FIFO(TxFIFO)和一个接收FIFO(RxFIFO)。发送数据时,TxFIFO将CPU发送的数据作缓存,然后通过SPI接口的SO线发出去,接收数据时,RxFIFO把接收SI的数据作缓存,再通过8位微处理器指令来读取RxFIFO的数据。用TxFIFO的原因是8位微处理器的速度比SPI快,需要把8位微处理器发出的数据做缓存。用RxFIFO是为了匹配8位微处理器指令的时序,8位微处理器指令有固定的时序周期,用8位微处理器指令从Flash取数据时,把RxFIFO假设成外部RAM并分配相应的地址,这样就能顺利取出数据。SPI接口系统框图如图3所示。

2.2.2 SPI的作用

本系统中SPI作为主机与Flash之间的媒介实现了8位微处理器与Flash连接。系统中SPI主要完成以下工作:1)将8位微处理器发送的八位并行数据存放在发送FIFO(TxFIFO)中,当TxFIFO非空时取出TxFIFO中的数据,并转换成串行数据发送给Flash;2)接受Flash传送过来的串行数据,将其转换成并行数据存放于接收FIFO(RxFIFO)中,等待8位微处理器用指令取走;3)产生Flash所需要的输入信号,时钟SCK,片选SCS。

2.2.3 各个模块的实现

TxFIFO和RxFIFO的设计完全一样,采用的是深度为128,位宽为8的FIFO。每一次写操作使写指针加1,每一次读操作使读指针加1。FIFO非空就可以进行读操作,非满时就可以进行写操作。FIFO的设计图如图4。

SPI主要是一个状态机,本设计采用5个状态,传输的数据位数是8位数据。在数据串并转换的过程中,用到两个移位寄存器来存放临时数据,1个发送寄存器txreg,1个接收寄存器rxreg。在SPI总线中,每发送1个数据位则发送寄存器多出1个空闲位,正好可以在半个周期后用来接收1个数据位。状态机如图5所示。

状态机中,sel_SPI信号控制状态机运行,ena对时钟进行分频,ena有效,SCK取反,clkcnt是对主机时钟的分频计数器。复位时在idle状态,当检测的TxFIFO非空时就进入load_data状态,在load_data状态移位寄存器txtreg从TxFIFO中取出第一个八位数据,开始在Spi_tx和Spi_rx状态交替,按照SPI时序进行发送和接受数据,同时还设了两个计数器,用来控制移位寄存器在Spi_rx状态载入数据。

2.3 软件程序设计

8位微处理器给SPI分配了三个外部ram地址,分别为18H,19H,20H三个地址,其中18H分配给TxFIFO,20H分配给RxFIFO,19H用来控制SPI_core状态机的运行,19H中存入00H表示状态机开始工作,存入ffH状态机停止工作,存入01H表示要对Flash进行读操作。

SST25VF064C的内部设计用指令进行读写操作,每一条命令执行都是先输入八位的操作码,然后地址、数据,地址和数据根据指令要求输入。写使能指令WREN必须在任何写之前执行。指令的执行是以片选信号SCS拉低作为开始,SCS拉低以后在每个SCK的上升沿接受一位数据输入,指令以SCS拉高作为结束标志。对SST25VF064C进行读写操作时,地址指针会以输入地址为基址自动递增。

假设要往Flash地址000001H写入66H,000002H中写入55H两个数据,应先设定外部ram地址18H,即把数据存入到TxFIFO中,然后往TxFIFO中依次存入写使能指令06H、写操作码02H,地址000001H,数据66H、55H。写操作程序如下:

程序中wait1的作用是等待写使能指令WREN执行完,SPI状态机停止工作,把SCS拉高。wait2作用是再次开启状态机开始写操作,wait3作用是等待写指令执行完,通过控制状态机把SCS拉高。

假设要从Flash地址000001H、000002H读出两个数据,应先设定外部ram地址18H,即把数据存入到TxFIFO中,然后往TxFIFO中依次存入读指令03H,地址000001h。等把数据读到RxFIFO以后再通过8位微处理器指令把数据从RxFIFO中读到微处理器的acc寄存器中。读操作程序如下:

wait4的作用为开启SPI状态机,wait5的作用是等待所需的66H、55H读出以后结束读指令。

3 设计实现及其仿真波形

通过编写测试平台,并使用Mentor Graphics公司的仿真工具ModelSIm SE 6.5c对该系统进行仿真,得到的仿真波形如图6所示。

从图中可以看到写指令执行完,把数据66H、55H写到Flash中,读指令执行完把数据66H、55H读到了CPU的寄存器中。综合以上分析,SPI的设计是正确的。

4 结束语

该文中的接口设计能够完成微处理器对Flash读写操作,说明该接口电路与软件设计是成功的。数据量和运算量的增大已成为各种微机控制系统面临的共同挑战,在不改变原有体系结构的基础上,采用大容量存储器,在当前是一种简便可行的办法。该文中的微处理器串行Flash接口设计,可用于扩展系统存储容量满足信息时代频繁的信息集成与交互,还可通过复制微处理器发送的数据到验证发送到外围器件的数据正确性,同时还对不带接口的单片机读写芯片提供一定的参考。

参考文献

[1]刘文洲,王贤勇,任纪川,等.Flash存储器及其MCS-51系统中的应用[J].长春工程学院学报:自然科学版,2005(1):57-60.

[2]夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2008.

[3]何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1990.

[4]窦振中.单片机外围器件实用手册:存储器分册[M].北京:北京航空航天大学出版社,2000.

[5]何最红,张辉.TMS320C5402与单片机SPI串口通信的实现方法[J].国外电子测量技术,2005,24(2):4-6.

串行设计 篇10

随着近几年对速率的要求快速提高, 新的总线协议不断的提出更高的速率。传统的总线协议已经不能够满足要求了。串行总线由于更好的抗干扰性, 和更少的信号线, 更高的速率获得了众多设计者的青睐。而串行总线又尤以差分信号的方式为最多。而在我们的项目中的PCI-Express串行信号线正采用了LVDS技术。所以以下的叙述中都以串行信号中LVDS信号为代表讲述。

2 串行LVDS信号的PCB设计

2.1 差分信号的概念和优点

差分信号 (Differential Signal) 在高速电路设计中的应用越来越广泛, 电路中最关键的信号往往都要采用差分结构设计。何为差分信号?通俗地说, 就是驱动端发送两个等值、反相的信号, 接收端通过比较这两个电压的差值来判断逻辑状态“0”还是“1”, 而承载差分信号的那一对走线就称为差分走线。差分信号与普通的单端信号走线相比, 最明显的优势体现在以下三个方面:

抗干扰能力强。因为两根差分走线之间的耦合很好, 当外界存在噪声干扰时, 几乎是同时被耦合到两条线上, 而接收端关心的只是两信号的差值, 所以外界的共模噪声可以被完全抵消。

能有效抑制EMI。由于两根信号的极性相反, 他们对外辐射的电磁场可以相互抵消。耦合的越紧密, 互相抵消的磁力线就越多。泄露到外界的电磁能量越少。

时序定位精确。由于差分信号的开关变化是位于两个信号的交点, 而不像普通单端信号依靠高低两个阀值电压判断, 因而受工艺, 温度的影响小, 能降低时序上的误差, 同时也更适合于低幅度信号的电路。目前流行的LVDS (low voltage differential signaling) 就是指这种小振幅差分信号技术。

2.2 LVDS信号在PCB上的设计要点

LVDS信号被广泛应用于计算机、通信以及消费电子领域, 并被以PCI-Express为代表的第三代I/O标准中采用, 而在我们的项目中PCI-Express信号正是采用的是LVDS信号。LVDS信号不仅是差分信号, 而且还是高速数字信号。因此LVDS传输媒质不管使用的是PCB线还是电缆, 都必须采取措施防止信号在媒质终端发生反射, 同时应减少电磁干扰以保证信号的完整性。只要我们在布线时考虑到以上这些要素, 设计高速差分线路板并不很困难。下面简要介绍LVDS信号在PCB上的设计要点:

布成多层板。有LVDS信号的电路板一般都要布成多层板。由于LVDS信号属于高速信号, 与其相邻的层应为地层, 对LVDS信号进行屏蔽防止干扰。对于密度不是很大的板子, 在物理空间条件允许的情况下, 最好将LVDS信号与其它信号分别放在不同的层。例如, 在四层板中, 通常可以按以下进行布层:LVDS信号层、地层、电源层、其它信号层。

LVDS信号阻抗计算与控制。LVDS信号的电压摆幅只有350m V, 适于电流驱动的差分信号方式工作。为了确保信号在传输线当中传播时不受反射信号的影响, LVDS信号要求传输线阻抗受控, 通常差分阻抗为100+/-10Ω。阻抗控制的好坏直接影响信号完整性及延迟。如何对其进行阻抗控制呢?

确定走线模式、参数及阻抗计算。LVDS分外层微带线差分模式和内层带状线差分模式。阻抗可以通过合理设置参数, 利用相关软件计算得出。通过计算, 阻抗值与绝缘层厚度成正比, 与介电常数、导线的厚度及宽度成反比。

走平行等距线及紧耦合原则。确定走线线宽及间距后, 在走线时严格按照计算出的线宽和间距, 两线的间距要一直保持不变, 也就是要保持平行 (可以放图) 。同时在计算线宽和间距时最好遵守紧耦合的原则, 也就是差分对线间距小于或等于线宽。当两条差分信号线距离很近时, 电流传输方向相反, 其磁场相互抵消, 电场相互耦合, 电磁辐射也要小得多。而且要两条线走在同一层, 避免分层走线。因为在PCB板的实际加工过程中, 由于层叠之间的层压对精确度大大低于同层蚀刻精度, 以及层压过程中的介质流失, 不能保证差分线的间距等于层间介质厚度, 会造成层间差分对的差分阻抗变化。

走短线、直线。为确保信号的质量, LVDS差分对走线应该尽可能地短而直, 减少布线中的过孔数, 避免差分对布线太长, 出现太多的拐弯, 拐弯处尽量用45°或弧线, 避免90°拐弯。

不同差分线对间处理。LVDS对走线方式的选择没有限制, 微带线和和带状线均可, 但是必须注意要有良好的参考平面。对不同差分线之间的间距要求间隔不能太小, 至少应大于3-5倍差分线间距。必要时在不同差分线对之间加地孔隔离以防止相互间的串扰。LVDS信号尽量远离其它信号。

LVDS差分信号不可以跨平面分割。尽管两根差分信号互为回流路径, 跨分割不会割断信号的回流, 但是跨分割部分的传输线会因为缺少参考平面而导致阻抗的不连续 (如图1所示, 其中GND1、GND2为LVDS相邻的地平面) 。

接收端的匹配电阻的布局。对接收端的匹配电阻到接收管脚的距离要尽量靠近。同时匹配电阻的精度要控制。对于点到点的拓扑, 走线的阻抗通常控制在100Ω, 但匹配电阻可以根据实际的情况进行调整。电阻的精确度最好是1%-2%。因为根据经验, 10%的阻抗不匹配就会产生5%的反射。

3 串行LVDS信号的仿真分析

以上分析了LVDS信号设计时必须注意的事项, 虽然在PCB设计的时候一般都会遵守以上的规则进行, 但是为了能够提高设计的正确性和准确行必须对PCB进行信号完整行仿真, 通过仿真得到信号的串扰、延时、反射和眼图波形, 从而达到设计即正确的目标。

信号完整性问题的仿真流程是先建立元器件的仿真模型, 然后进行前仿真确定布线过程的参数和约束条件, 物理实现阶段按照约束条件进行设计, 最后进行后仿真, 验证设计是否满足设计要求。在整个流程中模型的精确性直接影响仿真的结果, 而在前仿真和后仿真阶段用到的仿真分析方法对于仿真结果同样至关重要, 而在本设计中采用了精确度较高的spice模型。下面结合实际的项目来说明仿真在本设计的实施过程。

3.1 PCB叠层设置

由上面的分析知道, PCB板的叠层设置和信号的耦合以及阻抗计算都有着密切的关系, 所以在开始PCB设计之前必须进行叠层设计, 然后进行信号的阻抗计算。在本设计中的叠层设计见下图:

由于PCB密度较高, 本设计采用10层板的叠层结构, 经过合理的安排叠层厚度, 通过allegro计算, 表面微带和内层带状线的差分线在线宽6㏕线间距6㏕时, 阻抗理论计算值分别为100.1和98.8Ω。符合阻抗控制要求。

3.2 设置直流电压值

这一步骤主要是为某些特定的网络 (一般是电源地等) 指定其直流电压值, 确定DC电压加在网络上, 执行EMI仿真需要确定一个或多个电压源管脚, 这些电压值包涵了模型在仿真过程中使用的参考电压信息。

3.3 器件设置

在allegro仿真的时候allegro会把器件分成三大类:IC、连接器和分立器件 (电阻电容等) , allegro会依据器件类型来给器件的管脚分配仿真属性, 分立器件和连接器的管脚属性为UP-SPEC, 而IC的管脚属性可以为IN、OUT和BI等。

3.4 模型分配

在板级高速PCB仿真过程中主要用要的模型有器件模型和传输线模型。器件模型一般是由器件生产厂家提供的。在高速串行信号中, 我们采用的是精度更高的SPICE模型来进行仿真分析。传输线模型则是通过仿真软件建模形成的。信号在传输时, 传输线会使得信号完整性问题突出, 因此仿真软件对传输线精确建模的能力直接影响仿真结果。

而信号路径和返回路径所在的传输线不可能是理想的导体, 因此它们都有有限的电阻, 电阻的大小由传输线的长度和横截面积决定。任何传输线都可以划分为一系列串接线段。同样的在传输线之间的介质也不可能是理想的绝缘体, 漏电流总是存在的。实际的传输线模型由无数个短线段组成, 短线段的长度趋于零。

关于传输线的模型是allegro自动分配的。仿真的时候主要是分配器件模型。

3.5 SI检查

SI Audit功能是用来检查某一个特殊的网络或者一群网络是否能够被提取出来进行分析, 一般就是设置我们需要关注的高速网络, 本设计主要关注LVDS串行信号。

3.6 提取网络拓扑

从PCB中提取待关注信号的拓扑结构, 一般包括驱动端和接收端, 以及传输线和相关的匹配电阻电容等, 可以从拓扑结构中看出该网络经过那些路径, 那些会对信号的传输造成影响。本文仅以其中一个信号的网络拓扑图为例:如图4所示:

3.7 查看波形

以上的相关步骤设置好以后就可以进行仿真了, allegro可以进行信号的反射仿真、串扰仿真, 差分线还要进行眼图分析。当然仿真也分前仿真和后仿真, 在利用allegro进行PCB设计的时候还需要结合仿真的结果实时的对设计进行修改以达到符合要求的目的。由于仿真过程复杂, 步骤繁琐, 在此不一一进行描述,

差分对的布线有两点要注意, 一是两条线的长度要尽量一样长, 等长是为了保证两个差分信号时刻保持相反极性, 减少共模分量。另一是两线的间距 (此间距由差分阻抗决定) 要一直保持不变, 也就是要保持平行。平行的方式有两种, 一为两条线走在同一走线层 (side-by-side) , 一为两条线走在上下相邻两层 (over-under) 。一般以前者side-by-side实现的方式较多。等距则主要是为了保证两者差分阻抗一致, 减少反射。对差分对的布线方式应该要适当的靠近且平行。所谓适当的靠近是因为这间距会影响到差分阻抗 (differential impedance) 的值, 此值是设计差分对的重要参数。需要平行也是因为要保持差分阻抗的一致性。若两线忽远忽近, 差分阻抗就会不一致, 就会影响信号完整性 (signal integrity) 及时间延迟 (timing delay) 。从仿真的S参数曲线图可以分析差分对的差分阻抗 (differential impedance) , 以及信号完整性。

下面给出本设计中的关键信号仿真波形以供加以说明。

从仿真图例图5看到, S11在0-3.0GHz的频域范围内其最劣化的指标为:-16.770db以下, S22 (粉红色的曲线) 也不劣于-17db。这说明该差分对的差分阻抗 (differential impedance) 接近设计指标, 信号完整性得到了保证。

通过差分对IN, OUT的HSPICE仿真, 图6显示的结果:差分对线的对称良好。

结论

通过以上的仿真分析可知, 在PCB的设计阶段对于高速LVDS信号的各项要求都能达到, 而经过实际的PCB生产也证明了该设计的正确性, 该产品运行稳定, 完全能达到PCI-express高速数据传输的要求, 可靠性高。

由本文的分析可知, 在高速串行信号的设计中, 不仅考虑电路设计, 其板图设计和仿真分析也同样的重要, 而且随着信号的频率越来越大, 影响信号的延时、串扰、信号完整性等的因素越来越复杂。同时控制这些因素的影响也越来越困难, 工程师必须深入的分析布线设计、借助精确的模型、有效的仿真和科学的分析方法, 才能给复杂的高速设计以正确的指导, 减少修正周期确保设计成功。

参考文献

[1]周润景, 袁伟亭《Cadence高速电路板设计与仿真 (第2版) 》, 电子工业出版社, 2007

[2]Howard Johnson, Martin Graham.高速数字设计[M], 电子工业出版社, 2004

[3]Douglas Brooks, Signal integrity issues and printed circuit board design, Prentice Hall PTR, 2003

[4]吴建强, Pspice仿真实践, 哈尔滨工业大学出版社, 2001

计算机单片机串行通信技术研究 篇11

摘 要:计算机,作为信息技术发展的产物,与单片机有效的组合,不仅可以有效地解决单片机存在的缺点,而且能够发挥两者最大的作用。计算机与单片机的联合,是建立在使用串行通信技术基础之上,而且借助串口这一载体从计算机上下载程序的单片机,则是占据着较大的比例,为此,让计算机与单片机进行更好的联合,对使用在其中的串行通信技术做出简单的分析与探究。

关键词:计算机;单片机;串行通信技术

0 前言

21世纪的社会已经进入信息化时代,无论是在人们的日常生活中还是在社会的生产方面,信息化技术都在其中扮演着重要的角色。科技这一因素所带来的变化是巨大的,所带来的产物也是全新的,其中计算机作为科技发展的一种产物,充斥在社会各个行业以及各个领域中,发挥着计算机这项技术独有的优势与功能。单片机,作为一种集成电路芯片,被应用的越来越广泛,之所以被广泛应用的原因就是在与单片机巨有强大的功能特点,不仅在使用时能够体现灵活性,而且性价比也是较高的。但是正所谓世界上是不存在十全十美的事物,单片机在拥有如此强大的功能之后,也是存在一些属于自身的缺点,就是单片机的存储量是较少的,使得单片机在处理数据方面存在缺陷。为了能够有效改善这一问题,实现更好地运用单片机,就将单片机与计算机进行连接,由单片机来采集数据,在将采集到的数据传输到计算机中,以这样的方式,正好解决单片机存储容量不足的缺点,与此同时,为了能够很好地实现这一做法,就必须要完成计算机和单片机之间的通信技术,而现在计算机和单片机之间的通信技术一般采用的都是串行的通信技术。

1 通信技术的分类介绍

计算机与单片机在串行通信技术的基础上,进行有效的联合,是符合发展的要求的。从通信技术这一整体的概念来讲,可以对其从两个大的方面进行分类,从这两个方面中可以更加了解通信技术,进而进一步理解串行通信技术。

1.1 从数据传输方式的角度

一大类,从数据的传输方式来讲,可以分成4种方式。第一,单工方式,数据的传输方向是单向的,并没有明确是朝着哪个方向前进,只能肯定的是方向是固定的,这样的传输方式,由于方向是固定,相对的该中传输方式在应用范围也是有限制的,不能够广泛地应用到各个领域中。第二,有了单向的传输方式,就有双向的传输方式,也就是半双工方式,这一方式也不能做到万能,随时随地的传输数据,它只能分时段进行数据的传输,相对应的在使用方面也存在一定的局限性。第三,时代在发展进步,技术也不会故步自封,因此,就出现了解决上两项的传输方式——全双工方式,应用在双方有交互的情况下,正是由于这一方式的局限性相对减少,于上述两种相比较而言应用的较为的广泛。第四,在综合上述三种方式共同点的基础上,又出现了多工方式,这一传输方式的出现,能够实现多种数据的共同传输,功能较为强大,被应用得最广。

1.2 从串行通信技术的角度

二大类,就是在一个线的基础上进行位数传递数据的串行通信技术,这一技术按照时钟的基准,又可以分为两个方面。首先是异步串行通信,以时钟为标准,通信的双方在数据接收时,一方用自己的时钟进行数据的传送,而另一方则是用自己的时钟来进行数据的接收,两者之间的步调是不一致的;其次是同步串行通信,以时钟为基础,接送和发送的双方参考的是同一个时钟的标准,彼此之间的步调是一致的。

2 关于串行通信技术的分析

2.1 关于计算机方向的

计算机与单片机之间利用串行通信技术时,所必须要用到的设备就是计算机的串口,与平常我们在日常生活中常用的USB接口线是不同的,串口以Bit为单位进行数据的传输,串口通信中最为常用的就是波特率,以秒最为单位,因此,在计算机的串口通信当中,正是一个常用到的单位,一般情况下,在串口的数据通信传输过程中,数据的位数一般为5、7、8位。在数据的传输过程中,会受到诸多因素的干扰,可能会出现出错的概率,因此要对其进行检验位。在对串口通信进行分类的时候,可以根据串行通信之间的不同协议,成RS232、RS442、RS485。在这几个串口通信当中,RS232的出现是最早的,后通过对RS232进行一定的改进和完善就有了RS442和RS485。

2.2 关于单片机的

计算机与单片机之间的链接,是利用串行通信技术进行完美的实现,为了使得这一目标更趋完善化,一般情况下,单片机内部都有一个既可以用来接收数据有可以用来传输数据的这样一个串口,被称为全双工串口,能够通过这样一个简单的设备实现接收数据还可以达到发送数据的效果。与此同时,单片机作为一项有技术发展所带来的产物,任何一种单向机都会有数据使用手册包含在其中,让用户在方开始使用阶段,在还未对单片机充分了解的基础上,可以参考这份使用手册对单向机进行合理的运用,进行更好的工作,而且在单片机中,寄存器是非常重要的组成部分,不管单片机的构造如何,是简单化还是复杂化的,在进行编程时,就要对其进行有效的设置,促进技术的发展与进步。

3 结语

计算机、单片机,从某种程度上来讲的话,都是属于科技这一因素进步之下所带来的产物,单片机存在存储量不足的缺点,而计算机的众多优点之一就是有较大的存储容量,为了更好地适应社会的发展需要,就将计算机与单片机进行有效的联合,以计算机的优点来弥补单向机的缺点,同时要想达到联合的目的就需要借助串行通信技术,来实现数据的传输。本文以此为出发点,对计算机与单片机之间使用的串行通信技术进行相关的研究,使得串行通信技术得以朝着更好、更实用的方向发展。

参考文献:

[1]郭红英. PC与单片机通信系统设计[J].信息系统工程,2013(06):22-23.

[2]周子深,中振宁.用VB实现计算机与单片机的串行通信[J].半导体技术,2002(01):42-44.

[3]彭顺,潘玉田.单片机串行口的并行通信技术[J].机械管理开发,2007(05):95-96.

[4]梁中华,王子威,祁春清,索迹. PC机与单片机串行通信的研究[J].沈阳工业大学学报,2005(03):302-307.

作者简介:王硕(1995—),男,辽宁辽阳人,沈阳理工大学学生。

赵杨放(1994—),男,河南信阳人,沈阳理工大学学生。

串行设计 篇12

SPI (串行外围设备接口) 是一种广泛使用的串行数据传输协议, 主要用于微处理器与外设的高速通讯。由于它速度快, 通信协议简单, 占用外部IO口少, 相对来说较稳定, 因此广泛应用于AD转换器、串行EEPROM、高速时钟、FLASH、DDS以及LCD显示驱动等领域。

另外, SPI口的时钟速度、数据位长度、时钟模式可以灵活控制, 实质上是一个长度可编程的移位寄存器, 为提高其集成性和经济性, 经常通过其它芯片模拟SPI。本文介绍了一种基于FPGA设计模拟SPI的方法, 完成了SPI的基本功能, 具有一定的实用价值。

1 SPI协议基础

SPI是一种同步串行通信方式, 数据是一位接一位进行传输的, 主要是以主从方式工作的。主设备 (Master) 与从设备 (Slavel) 之间的连线方式如图1, 其中, 主设备一个, 从设备可为一个或多个。

MOSI:主设备数据输出从设备数据输入;MISO从设备数据输出主设备数据输入;SCK:时钟信号由主设备产生, MOSI、MISO都是基于此时钟信号完成数据传输;SSEL片选控制信号, 控制芯片是否被选中成为SPI的从设备, 低电平有效。SPI工作时序如图2。

2 SPI模块代码设计

本设计中SPI同步串口的设计主要采用硬件描述语言Verilog HDL来完成, 由于FPGA模拟SPI主设备的设计与FPGA模拟SPI从设备的设计思路基本一致, 而且FPGA模拟SPI主设备的设计更为复杂, 所以, 下面以FPGA为主设备为例介绍SPI同步串口的实现方法。

FPGA模拟SPI主设备实现的逻辑实现框图如图3所示。它主要包含3个模块的设计:SCK产生模块、发送数据模块、接收数据模块, 下面将一一介绍其程序的实现方法。

2.1 SCK产生模块

同步时钟信号SCK一般由输入时钟信号CLK分频产生, 在FPGA中对时钟进行分频一般有两种方法:锁相环的IP核分频和直接采用Verilog HDL语言分频。SCK的大小可由设计者灵活控制, 但前提是一定要满足从设备的时序要求, 从设备对SCK一般包含3个方面的限定:SCK的周期最小值、SCK高电平的最小值、SCK低电平的最小值。

2.2 数据发送模块

如上图3可知, 数据发送模块主要包含3个输入信号时钟信号CLK、复位信号RESET和两个输出信号片选信号SSEL、主设备发送给从设备的串行数据MOSI。

片选控制信号SSEL置低时有效, 主设备开始和从设备进行数据交换, 数据交换完成的是以字节为基本单位, 当FPGA模拟SPI主设备时, 字节数可以根据从设备的不同而自动调节。主从设备一般有两种数据交换方式:若主设备在SCK上升沿发送和下降沿接收, 则从设备也在SCK上升沿发送和下降沿接收;若主设备在SCK下降沿发送和上升沿接收, 则从设备也在SCK下降沿发送和上升沿接收。设计SSEL信号时一般要考虑以下几点:①SSEL到SCK上升沿的最小时间;②SSEL到SCK下降沿的最小时间;③数据交换的字节数。

假若主设备在SCK上升沿发送, 数据交换为2个字节 (16bit) , 数据发送模块设计代码的流程如图4。

其中, Txdata为发送的16bit数据寄存器, 发送开始时先将i置15, 检测到SCK的第一个上升沿时, 将片选信号SSEL拉低选中从设备, 并将Txdata的最高位Txdata[15]送到MOSI串行线上, 在SCK的下一个上升沿再将Txdata的次高位Txdata[14]送到MOSI串行线上, 依此类推, 一直到将Txdata的最低位Txdata[0]送到MOSI串行线后, 若又检测到SCK的上升沿, 将片选信号SSEL拉高停止发送。

2.3 数据接收模块

数据接收模块与数据发送模块有所不同, 主要包含五个输入信号CLK、RESET、SSEL、SCK、从设备发送给主设备的串行数据MISO, 无输出信号。同样, 以数据交换为2个字节 (16bit) 为例, SCK下升沿接收数据, 数据接收模块设计代码的流程如图5。

其中, Rxdata为16bit的接收缓冲器, SSEL拉低时开始接收数据, 一旦检测到SCK下降沿, 将MISO上的串行数据存入Rxdata的最低位Rxdata[0]中, 当又检测到SCK的下降沿时, 将Rxdata左移一位, 并再将MISO上的串行数据存入Rxdata[0]中, 依此类推, 当接收缓冲器 Rxdata全部更新一遍时, 若检测到SCK上升沿, 将Rxdata 存储值赋给Data_recieved, Data_recieved为最终接收到的16bit数据。

3 仿真验证及性能评估

FPGA芯片选择Altera公司的Cyclone II系列的EP2C8T144I8, 对整个FPGA为SPI主设备的设计在QuattusII 7.1中进行逻辑综合, 发现整个设计仅占用36个查找表的资源, 用户可以根据需要集成多个SPI主设备或从设备, FPGA内部时钟最高可达到200MHz, 通过分频基本可满足外围大部分的SPI设备对SCK的要求, 另外, FPGA具有非常强大的外部接口单元, 可以兼容。各种电平的接口, 可与大部分的SPI设备直接连接。

在Modelsim SE 6.5中对整个设计进行仿真, 其中Txdata为发送的数据, 在测试程序中设定, Data_recieved为接收到的数据, 整个测试过程就是一个自循环的过程, 接收到的数据和发送的数据一致。若txdata=36785 (二进制为1000111110110001) , SCK为CLK的十分频, 则仿真结果如图6。

4 结语

文中介绍了SPI的通信协议及其在FPGA上的代码实现方法。用FPGA实现SPI接口通信, 通过对设计代码作少许的修改, SPI的时钟速度、数据位长度、时钟模式都可以根据实际需要灵活控制。另外, SPI串口实现占用的FPGA逻辑资源并不太多, 设计者可以根据需要外扩同时连接几个SPI主从设备。总之, 用FPGA实现SPI接口通信具有一定的实用价值。

摘要:SPI (串行外围设备接口) 具有速度快、通信协议简单、占用外部IO口少、稳定可靠等优点, 使其广泛应用于数据通信中。介绍了一种基于FPGA的SPI通信协议的实现方法, 它的时钟速度、数据位长度、时钟模式均可根据实际需要灵活控制, 具有一定的实用价值。

关键词:同步串行接口,SPI,FPGA,Verilog HDL

参考文献

[1]李明.基于FPGA的小型CPU中通信协议的研究及IPCore的开发[D].济南:山东大学, 2009.

上一篇:小学计算教学下一篇:情绪表达能力