中国自控网: http://www.autocontrol.cn 邮局订阅号: 82-946 360 元/年技术创新您的论文得到相关企业家品评 嵌入式计算机应用 电话: 010-62132436, 62192616( T/F) 《现场总线技术应用 200 例》 基于 PC/104 总线与 CPLD 的SPI 接口设计 Design of SPI Interface Based on PC/104 Bus and CPLD ( 1.石家庄军械工程学院; 2. 93469 部队科研中心) 梁祥1封吉平 1 安学军 2 Liang,Xiang Feng,Jiping An,Xuejun 摘要: 本文根据SPI 同步串行接口的通信协议,介绍了在CPLD 中利用VHDL 语言实现PC/104 总线扩展SPI 接口的设计原理和编程思想.通过该方法的介绍,使得那些没有SPI 接口功能的处理器和控制器能够扩展 SPI 接口, 以便同外 部设备进行数据交换.并给出了 VHDL 语言的源代码程序. 关键词: SPI 接口; CPLD; PC/104 总线; 接口设计; VHDL 中图分类号: TP312 文献标识码: A 文章编号:1008- 0570(2005)12- 2- 0029- 04 Abstract: This paper based on communication protocol of SPI synchronous serial interface, presents the design theory and pro- gramming idea of implementing PC/104 bus expand SPI inter- face with VHDL language in CPLD device. This interface can be used to data exchange with peripheral apparatus for processor and controller which have not SPI interface function. Moreover presents VHDL source codes . Key words: SPI Interface; CPLD; PC/104 Bus; Interface de- signs; VHDL 引言 近年来, 带有 SPI 总线接口的器件越来越多, 该器 件可以共用 SPI 总线,十分方便的组成多个带有 SPI 总线接口的系统.尽管这种总线结构没有并行总线那 样大的吞吐能力, 但由于连接线和连接引脚少, 因此 其构成的系统价格降低, 器件间总线连接简单, 结构 紧凑,而且在总线上增加器件不影响系统的正常工 作, 系统修改和可扩张性好. PC/104 与标准台式 PC( PC/AT) 体系无论是硬件 还是软件上都完全兼容.在形态上, PC/104 是十分紧 凑的、 自栈式、 模块化结构. 如今利用 PC/104 总线来制 作各种各样的设备越拉越多, 在使用的过程中, 经常 要用到具有 SPI 总线接口的器件.本文将介绍一种基 于CPLD 来实现 PC/104 总线扩展 SPI 接口的设计方 案. 1 SPI 总线接口及时序 SPI( Serial Peripheral Interface) 总线接口是一种同 步串行数据接口. 这一通讯接口采用单独的三根信 号线( SCLK、 MOSI、 MISO) 传送数据及同步时钟, 可以 实现全双工通信,由CS 片选线实现多机通信或扩展 多片 SPI 芯片. SPI 模块为了和外设进行数据交换,根据外设工 作要求, 其输出串行同步时钟极性和相位可以进行配 置, 时钟极性(CPOL)对传输协议没有重大的影响. 如果 CPOL=0,串行同步时钟的空闲状态为低电平;如果 CPOL=1, 串行同步时钟的空闲状态为高电平.时钟相 位(CPHA)能够配置用于选择两种不同的传输协议之 一进行数据传输. 如果 CPHA=0, 在串行同步时钟的第 一个跳变沿(上升或下降)数据被采样; 如果 CPHA=1, 在串行同步时钟的第二个跳变沿(上升或下降)数据被 采样.SPI 主模块和与之通信的外设间时钟相位和极 性应该一致.SPI 接口时序如图 1、 图2所示. 2 设计方案 本文以 PC/104 总线与多个 SPI 接口模块为例, 说 明基于 CPLD 的SPI 总线接口设计方案.通过 CPLD 整合时序实现 PC/104 总线与 SPI 总线的转换,满足 SPI 总线的时序要求. 利用 CPLD 具有以下优点:①采用 CPLD 可以根 据需要定义输入输出脚,方便 PCB 板布局和走线; ② 采用 CPLD 时不必担心设计中所采用器件的种类、 数量, 可以任意定义所需各种器件, 从而优化电路性能; ③采用 CPLD 可以通过软件对电路进行仿真,方便电 路调试; ④采用 CPLD 可以在线修改其内部逻辑, 升级 或修改可不改动外部电路. CPLD 芯片选用ALTERA 公司的EPM7064 - SLC84- 10, 该芯片具有基于 EEPROM 的第二代 MAX 结构, 支持通过 JTAG 引脚实现在系统编程.拥有 64 个宏单元, 4 个逻辑阵列块, 1250 个可用门单元, 支持 5V/3.3V 多电压 IO 接口, 可提供 68 个用户 IO 引脚. 梁祥: 硕士研究生 基金赞助: 空军科研项目, 编号不公开 cycl e1 cycl e2 cycl e8 cycl e3 cycl e4 cycl e7 SCK ( CPO L-1) SCK ( CPO L-0) M O SI M SO M SB M SB 5 6 2 LSB 6 5 1 LSB cycl e1 cycl e2 cycl e8 cycl e3 cycl e4-6 cycl e7 SCK ( CPO L-1) SCK ( CPO L-0) M O SI M SO M SB M SB 5 6 2 LSB 6 5 1 LSB 图1CPH A =0 时SPI总线数据传输时序 图2CPH A =1 时SPI总线数据传输时序 29 - - 技术创新您的论文得到两院院士关注 中文核心期刊 《微计算机信息》(嵌入式与 S OC )2005 年第 21 卷第 12-2 期 中国自控网: http://www.autocontrol.com.cn 360 元/年邮局订阅号: 82-946!!! 电话: 010-62132436, 62192616( T/F) 《变频器与软启动器应用 200 例》 2.1 系统的结构设计 系统的基本功能是通过 CPLD 来实现 PC/104 总 线与 SPI 总线的数据交换.系统的结构框图如图 3 所示.系统主要由两部分组成:一是 PC/104 总线与 CPLD 的接口; 另一是 SPI 接口. 为了能在 PC/104 总线 制定的时刻读/写SPI 接口的数据,使用 PC/104 总线 的读写信号、 同步时钟、 数据总线和地址总线. 2.2 SPI 接口的设计结构 基于 CPLD 设计的 SPI 接口其目的在于为 PC/104 处理器扩展 SPI 接口的功能. 能够实现 PC/104 总线与 SPI 总线之间的通信.为了满足扩展 SPI 接口功能, 基于CPLD 的SPI 接口必须具有以下功能:①与PC/104 总线的接口功能; ②多位外部从机选择功能; ③时钟 极性和相位选择不同, 有四种传输模式功能; ④SPI 数 据传送完成标志.在SPI 接口中, 芯片 EPM7128SLC- 84 的I/O 接口被定义为 SPI 接口的控制线、数据线和 地址线等. SPI 接口的结构框图如图 4 所示. 在我们设 计的速率校准装置的 SPI 接口中, 状态端 RDY 和片选 端CS 已经够用.如果外部有更多的 SPI 接口模块, 我 们可以通过软件的编程与设置,扩展更多的状态端 RDY 和片选端 CS, 并共用时钟线和数据线, 实现扩展 具有 SPI 接口的外部设备. 3 时序 PC/104 总线对 SPI 总线的访问很简单,只需对 SPI 接口模块内的数据寄存器 (30AH)、控制寄存器 ( 304H) 以及状态寄存器( 300H) 进行读写. 其中控制寄 存器功能有中断使能位、 MOSI 高阻位、 时钟极性与相 位以及片选信号;状态寄存器可以读取 RDY 的状态 以及中断标志. 下面以读和写两种时序来说明 PC/104 总线对 SPI 接口访问时 SPI 接口的时序图. 在对 SPI 接口写数据时,它的工作过程是先向控 制寄存器内写入控制字, 以确定工作方式.然后再向 数据寄存器写入要发送的数据, 工作时序图 5 所示. 在对 SPI 接口读数据时,同样需要向控制寄存器 写入控制字, 以确定其工作方式, 并使 MOSI 处于高阻 状态.然后向数据寄存器内写入任意值, 其目的是产 生同步时钟脉冲以及移位寄存器开始工作, 以使外部 MISO 信号传送到移位寄存器内. 当IRQ 为高电平, 说 明数据接收完成, 即可读取移位寄存器内的数据即为 SPI 接口发送的数据, 工作时序图 6 所示. 图5SPI 接口写工作时序图 图6SPI 接口读工作时序图 4 软件编程 软件的编程主要分为移位寄存器的移位、 数据寄 存器的读写、 系统时钟的分频、 时钟的相位极性确定 等几大部分.如下为它们的 VHDL 语言源代码, 由于 篇幅原因, 结构体内的定义语句没有给出. library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_signed.all; entity spi_top is port( clk, wr_n, rd_n, misoi : in std_logic; irq, mosio, scko : out std_logic; addr : in std_logic_vector(9 downto 0); !!!!!!!!data : inout std_logic_vector(7 downto 0); rdy : in std_logic_vector(2 downto 0); slv_sel :out std_logic_vector(2 downto 0) ); PC / 104 总线[DO...D7] [ A 0. . . A 19] IO R IO W R ESETD R O SC CPLD M O SI SCLK [ CS0. . . CS3] M IS0 [ R D Y 0. . . R D Y 2] 多个SPI 模块图3系统结构框图 地址译码 /总线接口 O SC A D 0~SD 8 A D 0~SD 9 IO W IO R 系统时钟分频 SCK 时钟逻辑 控制寄存器 状态寄存器 接收寄存器 SPI移位寄存器 SPI控制状态机 输入寄存器 SCLK R D Y 0~R D Y 2 CS0~CS3 M O SI M ISO 图4SPI接口的结构框图 30 - - 中国自控网: http://www.autocontrol.cn 邮局订阅号: 82-946 360 元/年技术创新您的论文得到相关企业家品评 嵌入式计算机应用 电话: 010-62132436, 62192616( T/F) 《现场总线技术应用 200 例》 end spi_top; architecture spi of spi_top is begin data <= shift_reg when addr =SPIFT_ADDR and rd_n=' 0' else stat_reg when addr =SPISR_ADDR and rd_n=' 0' else "ZZZZZZZZ"; mosio <= shift_dataout when open_drain = ' 0 ' else ' Z' ; sr_proc : process(clk) begin if(clk' event and clk=' 1' )then !!!!!if(spi_go=' 1' )then shift_reg<=data_reg; elsif(shift_clk=' 1' )then !!!!!! shift_reg <= shift_reg (6 downto 0) & shift_datain; end if; end if; end process; neg_proc : process(clk) begin if (clk' event and clk=' 1' ) then if (shift_clk_negedge=' 1' ) then shift_negative_edge <= shift_nega- tive_edge_nxt; elsif (spi_go=' 1' ) then shift_negative_edge <= shift_reg(7); end if; end if; end process; shift_negative_edge_nxt <= shift_reg (7) when phase=' 1' else misoi ; shift_dataout <= shift_negative_edge when phase= ' 1' else shift_reg(7); shift_datain <= shift_negative_edge when phase= ' 0' else misoi; tr_proc : process(clk) begin if (clk' event and clk=' 1' ) then if (tx_start=' 1' ) then tx_run <= ' 1' ; elsif (tx_end=' 1' ) then tx_run <= ' 0' ; end if; end if; end process; bc_proc : process (clk) begin if (clk' event and clk=' 1' ) then if (tx_start = ' 1 ' ) then bit_ctr <= bit_counter; elsif (shift_clk = ' 1 ' ) then bit_ctr <= bit_ctr- 1; end if; end if; end process; tx_end <= ' 1 ' when bit_ctr =001 and shift_clk=' 1' and tx_run=' 1' else ' 0' ; tx_start <= ' 1' when spi_go=' 1' else ' 0' ; elr_proc : process (clk) begin if (clk' event and clk=' 1' ) then if (tx_end =' 1' )then irq_flag <=' 1' ; elsif (tx_run=' 1' )then irq_flag <=' 0' ; end if; end if; end process; dvd_proc : process (clk) begin- if (clk' event and clk=' 1' ) then if (not (tx_run=' 1' ) or tx_end=' 1' ) then dvd_ctr <= "00000", dvd2 <= ' 0' ; else if (dvd_ctr =00000) then dvd_ctr <= clock_div; if (tx_start_r1 =' 0' )then dvd2 <= not dvd2; end if; else dvd_ctr <= dvd_ctr- 1; end if; end if; end if; end process; dvd_zero<=' 1' when dvd_ctr=00000 else ' 0' ; shift_clk <= dvd_zero and dvd2 and tx_run and not tx_start_r1; shift_clk_negedge <= dvd_zero and not dvd2 and tx_run; scko <= dvd2 xor polck; wr_data : process(wr_n,tx_run) begin if(tx_run=' 1' )then spi_go<=' 0' ; elsif (wr_n' event and wr_n=' 1' ) then if( addr=spift_addr) then data_reg <= data, spi_go <=' 1' ; end if; end if; 31 - - 技术创新您的论文得到两院院士关注 中文核心期刊 《微计算机信息》(嵌入式与 S OC )2005 年第 21 卷第 12-2 期 中国自控网: http://www.autocontrol.com.cn 360 元/年邮局订阅号: 82-946!!! 电话: 010-62132436, 62192616( T/F) 《变频器与软启动器应用 200 例》 !!end process; wr_ctl : process(wr_n) begin if (wr_n' event and wr_n=' 1' ) then if addr=spic_addr then ctl_reg <= data; end if; end if; end process; slv_sel(2 downto 0)<= ctl_reg(2 downto 0); irq_en <= ctl_reg(7), open_drain <= ctl_reg(6); phase <= ctl_reg(5), polck <= ctl_reg(4); irq <= irq_flag and ctl_reg(7); stat_proc:process(rdy,irq_flag) begin stat_reg <= irq_flag & "0000" & rdy(2 downto 0); end process; end spi; 5 结论 随着 SPI 通信方式的广泛应用,但对于很多并行 总线与之通信成了很大的障碍, 本文提出的解决方案 具有非常好的可移植性和产品开发能力.本系统既可 以作为一个单独的系统运行, 又可以作为一个通信模 块植入一个大系统中,而其中的 SPI 接口又是一个可 移植 SPI 接口. 利用 CPLD 的逻辑可编程性, 还可以在 其剩下的资源中再开发所需要的逻辑器件, 既能降低 硬件成本又能大大减少系统主板的面积, 使电路的设 计更具灵活性.该设计已经被应用到转台速率校准装 置中,在该设计中共有两个 SPI 模块,同时还利用了 CPLD 控制继电器等其它电路,在历次试验中其性能 指标及稳定性均达到了要求. 参考文献 [1]Xilinx Limited. CoolRunner- II Serial Peripheral Interface Master. 2002 [2]北京华夏龙科技有限公司.HXL/486II 技术手册. [3]Altera. MAX 7000 Programmable Logic Device Family Data Sheet.1995 [4]赵俊超, 集成电路设计 VHDL 教程. —北京: 北京希望电子出版社 2002, 8 作者简介: 梁祥: 男, 1974 年10 月出生, 在读硕士研究 生, 攻读导航、 制导与控制专业.原毕业于河北科技大 学,应用电子专业.现军械工程学院在读.E- mail: cc781209@163.com;封吉平: 男, 副教授, 硕士研究生导师. Author brief introduction:Lang,Xiang born in 1974.10, postgraduate Master of Engineering.Major in Navigation, Guidance and Control Profession. I graduated from Electronics Engineering Department of Hebei University of Science and echnology.Now I am studying in Ord- nance Engineering College. ( 050003 石家庄军械工程学院光学与电子工程系) 梁祥封吉平 ( 050071 93469 部队科研中心) 安学军 (Department of Optical & Electrical Engineering, Ordnance Engineering College ,050003) Liang,Xiang Feng,Jiping (Scientific Research Center , 93469 Troop,050071) An,Xuejun 通信地址: ( 050003 石家庄市军械工程学院 光学与电子工程系 雷达教研室) 梁祥(投稿日期:2005.5.27) (修稿日期:2005.6.6) (接第 168 页) [6]侯广坤, 骆江鹏. 一种理想并行遗传算法模型[J]. 软件学报. 1999, 19 (4): 77- 80. [7]吴成东, 张颖, 刘航. 粗集遗传算法在机器人路径规划中的应用[J]. 沈 阳建筑大学学报. 2003, 19(4): 326- 329. 作者简介: 韩中华, 男, 1977, 汉, 硕士, 沈阳建筑大学 信息学院教师, 主要研究方向: 智能交通, 数据挖掘, 模式识别; E- mail: nasser0123@163.com;吴成东, 男, 1960, 汉, 博士, 博士生导师,教授, 沈阳建筑大学信息 学院教授, 主要研究方向: 智能交通, 模式识别; 杨丽 英, 女, 1979, 汉, 硕士研究生, 沈阳建筑大学信息学院 教师, 主要研究方向: 智能交通; 邓湘宁, 女, 1973, 汉, 硕士研究生, 沈阳建筑大学信息学院教师, 主要研究 方向: 无线通信. Author brief introduction:Han Zhonghua, male, Han, born in 1977, graduate student of MD, major in Intelli- gent Traffic System, Data Mining and Pattern Recogni- tion, teach in Faulty of information, Shenyang Jianzhu University.Wu Chendong, male, born in 1960, Han, graduate student of PHD, Supervisor of Doctor, Profes- sor, major in Intelligent Traffic System, Pattern Recogni- tion, teach in Faulty of information, Shenyang Jianzhu University. Yang Liying, female, born in 1979, Han, graduate student of MD, major in Intelligent Traffic Sys- tem, teach in Faulty of information, Shenyang Jianzhu University.Deng Xiangning, female, born in 1973, Han, graduate student of MD, major in Wireless Communica- tion. ( 110168 辽宁沈阳 沈阳建筑大学信息学院) 韩中华 吴成东 杨丽英 邓湘宁 (Faulty of Information, Shenyang Jianzhu Universi- ty, Shenyang, Liaoning, 110168 )Han, Zhonghua Wu, Chengdong Yang,Liying Deng, Xiangning 通信地址: ( 110168 辽宁沈阳浑南新区沈阳建筑大学信息学院 通信教研室) 韩中华 (投稿日期:2005.5.6) (修稿日期:2005.5.20) 32 - -