8位单片机的16位外部总线扩展与应用

发布者:李国永最新更新时间:2006-08-04 来源: 单片机及嵌入式系统应用关键字:总线  单片机  寻址 手机看文章 扫描二维码
随时随地手机看文章

  随着电子设计技术的进步和芯片制造工艺水平的提高,16位和32位单片机的使用越来越广泛,但是8位单片机因其制造工艺成熟、价格低廉等特点,仍然在市场上占有相当大的比例,尤其在成本敏感和可靠性要求极高的汽车电子领域,更占用绝对优势,带有外部总线的8位单片机,可以方便地与8位总线设备(如A/D、RAM和CAN总线)相连。随着对传输性能要求的提高,出现了大量的16位总线设备(如网络接口芯片),8位单片机要与16位总线设备相连接,通常的做法是利用I/O端口来模拟16位总线的读/写时序,数据传输速率较低,且原有的8位设备的传输速率也随之降低,因而限制了8位单片机的使用范围,本文提出一种8位单片机扩展16为外部总线的方法,不影响原有8位器件的前提下,可实现对16位总线设备的高速存取;最后,介绍了如何利用该方法与IDE硬盘相连接,并应用于车载数据采集系统。

1 8位/16位总线时序分析

1.1 8位单片机总线时序

带有外部总线的8位单片机有很多,如51系列,AVR系列等,本文以W77E58为例,W77E58是Winbond公司推出的增强型51单片机,工作时钟最高为40M赫兹,在同样的时钟频率下,W77E58指令速度是传统51单片机的3倍;另外,W77E58对程序存储器和数据存储器的寻址能力都为64KB。图1中上半部分为读时序,下半部分为写时序。

以读数据为例,P0、P2口输出当前地址,ALE的下降沿锁存低8位地址,高8位保持不变;而后,读信号RD使能(低电平),外部设备把数据送到P0口,RD的上升沿把数据读入单片机。写数据与此类似,不过数据方向相反,同时为保证数据能够正确写入外部设备,单片机在写信号WR使能前把数据送到P0口,WR无效后须保持一定时间,从图1中可以看出,单片机用P0口存取8位数据,P2口仅用于地址输出。

1.2 IDE硬盘总线时序

下面以IDE硬盘为例来分析16位总线时序,图2是IDE硬盘的接口示意图[1],只标出了与总线有关的信号线:DIOR/DIOW,读/写;DCS0/DCS1,片选;DD0-DD15,16位数据线;DA0-DA2,3位地址线。

IDE硬盘是典型的16位总线设备。IDE接口有两个片选信号,DCS1用来寻址控制寄存器。默认状态下即可对IDE硬盘进行存取操作,故一般把该信号线直接连到高电平而只使用DCS0。其时序如图3所示。

读/写周期开始时DIOR和DIOW均处于无效状态,DA0-DA2连接到主机(在这里为单片机)的地址输出。在收到读请求(DIOR使能)后把数据送至数据线上,主机利用DIOR的上升沿锁存该数据;之后,硬盘控制器延时后释放数据线,在接收写请求时(DIOW使能),则让数据线处于三态(tri-state),等待主机输出数据,最后在DIOW的上升沿把数据写入硬盘控制器,在DIOW上升沿之前,主机需把数据准备好。

对比图1和图3可知,总线时序基本一致,只是在数据线上传输的数据位数不同,但是,主机一条指令完成一个读/写周期,从外部设备到主机的16位数据在指令完成后不再有效;而从主机到外部设备的数据必须在指令完成前准备好,因而要把8位总线扩展成16位总线,必须要同时考虑读/写时数据的锁存问题。

2 16位总线扩展的实现

根据前面对总线时序的分析,采用如图4所示的方法对8位总线进行扩展,使其满足16位总线读/写。主要由以下两部分组成:1片GAL16V8(U5),实现片选信号的译码和其他信号的编码;2片74HC573(U3、U4),实现高8位数据锁存。CS1-CS4是A9-A15的译码输出,可连接4个外部设备。地址范围根据具体设备来设定,假设CS2上连接有16位总线设备:

这里“&”表示“与”,“!”表示“非”,即RD和CS5同时有效时,LE5有效;WR和CS6同时有效时,LE6有效。注意:CS5和CS6有一部分地址空间与CS2重合,即选通CS2的同时,也同时会选通CS5或CS6。另外,通过外部设备地址线的连接,使得8000H-81FFH和8200H-83FFH寻址同一个位置,以图2中的IDE硬盘为例,DA0->A0,DA1->A1,DA2->A2。

单片机写16位数据时,执行写操作使CS6有效(寻址FE00H-FFFFH),输出高8位数据并锁存到U4,然后执行写操作使CS2有效(寻址8200H-83FFH),P0口上的数据和U4锁存的数据同步输出,形成16位数据D0-D15,从而写入外部设备。

单片机读16位数据时,执行读操作使CS2有效(寻址8000H-81FFH),外部设备的低8位送至P0口,而高8位同时被U3锁存,然后执行读操作使CS5有效(寻址FC00H-FDFFH),U3锁存的数据被送至P0口。

在上面的读/写过程中,虽然对CS2的寻址位置不同(读为8000H-81FFH,写为8200H-83FFH),但由于位置重合,故可对16位外部设备正确读/写。另外,如下单片机寻址连接到CS1、CS3、CS4上的8位设备,则由于U3和U4没有选通,对其操作没有任何影响。

从上面的实现可以看出,扩展后的16位外部总线与外部设备进行数据交互时只增加一条指令。本方法与常规的端口模拟方法的比较结果如表1所列。从表中可以看出,采用本方法后,传输速率是常规方法的3倍。

另外,上述扩展方法还可以进一步引申:1)若有未使用的I/O口(如W77E58的P1口),则可用来直接输出高8位数据,从而可以去掉图4中的U4;2)若对成本不太敏感,则可把图4中的逻辑器件用CPLD实现,从而使设计更为灵活,布线更为方便,结构更为紧凑,基本实现原理仍然如图4所示。

3 在车载数据采集系统中的应用

8位单片机扩展16位外部总线的方法已应用于车载数据采集系统,图5为该系统的原理框图。汽车厂商在开发新车型或者关键零部件升级时,必须经过样品试制、产品鉴定、小批试制和大批生产等必要阶段。每个阶段中,都伴随着大量的可靠性试验,车载数据采集系统正是为这些试验而设计的。鉴于其特殊的使用条件,必须满足如下基本要求:能够进行连续、长时间数据采集、时间有可能是几天或者一个月;因为有可能很多台车辆的试验同时进行,因而要求系统成本低且安全可靠,具有CAN总线数据采集接口。在图5中,8位单片机上挂有3个8位总线器件(USB Slave器件,RAM和CAN总线器件)和1个16位总线接口设备(IDE硬盘)。

单片机采用前面提到的W77E58;为保证较高的数据传输速率,便于与外部串口设备(LCM显示屏)通信,外部晶振频率使用33M赫兹。

USB Slave器件采用PDIUSBD12,使用模块化的方法实现一个USB接口,本次设计通过该器件把IDE硬盘映射成一个可移动硬盘,从而实现了大容量存储类(MassStorage Class)。

RAM采用HY62WT08081E。该器件提供32KB的数据空间,用于数据采集以及FAT32文件系统操作的缓存。

CAN总线接口器件采用SJA1000+TLE6250的组合,SJA1000是独立的CAN控制器,用于汽车和工业环境中的控制器局域网络,TLE6250是针对汽车环境设计的CAN收发器。

IDE硬盘使用经过防震处理的工业用硬盘,也可使用CF卡加IDE转接线的方式。

图6为车载数据采集系统的简要软件流程图。考虑到USB端口和CAN总线上的数据一般不会同时向系统发出请求,故软件采用查询方式工作,主要包括以下几部分:主流程、USB协议实现[2]、CAN总线数据[3]和其他车辆状态信号采集,以及FAT32协议实现。

4 小结

本设计在8位单片机上实现了16位外部总线,可对16位设备进行高速存取,并且保留了原8位总线的功能,这种8位/16位总线共存的方式,较之端口模拟总线方式,极大地提高了数据的传输速率,该16位总线扩展方式已成功应用于车载数据采集系统,在汽车的道路可靠性试验中,安装了多套该系统,试验结果表明,该系统使用方便,工作稳定、可靠,数据传输率高、完全满足汽车动态采集数据的需要,该16位总线的扩展方式,可应用于具有8位外部总线的单片机,在一定程度上,扩大了该类单片机的使用范围。

关键字:总线  单片机  寻址 引用地址:8位单片机的16位外部总线扩展与应用

上一篇:8位单片机的16位外部总线扩展与应用
下一篇:8位单片机的16位外部总线扩展与应用

推荐阅读最新更新时间:2024-03-16 12:17

恩智浦将AWS云服务扩展至S32车用MCU平台
恩智浦将 AWS 云服务扩展到 S32 汽车 MCU 和处理器平台,为新型车辆架构提供灵活的云连接服务。 恩智浦半导体已在其 S32 微控制器 (MCU) 和处理器计算平台上扩展了对安全云连接的支持。 针对车身、区域控制和电气化应用,恩智浦已将 Amazon Web Services (AWS) 云服务集成到其 S32K3 汽车 MCU 中,从而平衡性能和功效,同时应对当今和未来的连接安全和安全挑战。 凭借支持 AWS IoT Core 的 FreeRTOS 库,具有集成云连接功能的 S32K3 缩短了软件定义汽车 (SDV) 的开发时间。它们安全地连接到云,提供车辆数据驱动的见解和服务和无线 (OTA) 更新,以及 S3
[汽车电子]
提高MSP430G系列单片机的Flash 擦写寿命的方法
摘要 在嵌入式设计中,许多应用设计都需要使用EEPROM 存储非易失性数据,由于成本原因,某些单片机在芯片内部并没有集成EEPROM。MSP430G 系列处理器是TI 推出的低成本16 位处理器,在MSP430G 系列单片机中并不具备EEPROM。为了存储非易失性数据,MSP430G 系列处理器在芯片内部划分出了256 字节的Flash 空间作为信息Flash,可用于存储非易失性数据,但是由于Flash 与EEPROM 在擦写寿命上存在一定差距,所以在实际应用中,这种应用方式并不能够满足所有客户的需求。本应用笔记介绍了使用代码区域Flash 来模拟EEPROM,通过一定的软件处理算法,可以大大增加数据存储周期的一种方法。本文
[嵌入式]
提高MSP430G系列<font color='red'>单片机</font>的Flash 擦写寿命的方法
有关单片机串口的几个小招数
1.可用函数发生器当串口发送器用 如果你要调试串口,只有一块扳,计算机又不在手边,你可以用函数发升器当串口发送器来用,如你的波特率是9600,那你把函数发生器频率调到9600/2=4800HZ上输出TTL电平直接到RXD上就行了,如果是RS232接口,你频率不变就选函数发生器双极性(交流输出)就是了,注意电平有峰峰值12VPP就够了,此时你的单片机收到数据必须是55H,你可以用MOV P1,SBUF,在P1上去测电压,这样没显示也可测试串口了. 理论依旧:55H 是01010101 串口启始位是0,先发55H最低位,于是一帧就是0(启始)101010101(停止)................0(启始)101010101(停止)
[单片机]
恩智浦发布LPC2900系列 扩展了32位ARM MCU产品线
三款基于ARM968E-S处理器的全新恩智浦微控制器扩展了业界最广泛的32位 ARM 微控制器产品线 荷兰埃因霍芬,2007年9月24日 ——恩智浦半导体(NXP Semiconductors)(由飞利浦创建的独立半导体公司)发布了LPC2900系列微控制器,进一步扩展了其ARM7? 和ARM9? 微控制器业界最广泛的生产线。恩智浦LPC2900基于广受欢迎的、高性能的ARM968E-S? 处理器,针对工业、医疗、发动机控制和汽车电子行业内的应用,为设计师提供一个具有高成本效益、灵活的、低功耗的解决方案。恩智浦此次工发布了三款ARM9 微控制器,分别为LPC2919、LPC2917和LPC2915,使其业界领先的基于ARM技术
[单片机]
8051单片机基础7:函数的特殊用法
参考来源:Keil Help uVision Help Cx51 Compiler User’s Guide Language Extensions Function Declarations 函数声明/定义时,与标准C语言存在一定差异,主要为以下几个方面: 声明函数为中断处理函数入口 选择函数使用的8051通用寄存器组 配置函数的内存模型 声明可重入的函数 函数声明/定义规范 return_type funcname ( args ) small / compact / large reentrant interrupt x
[单片机]
8051<font color='red'>单片机</font>基础7:函数的特殊用法
串口通信 校验码_8051单片机串口通信中的检错方法
对于基于flash控制器的8051的芯片结构,一般在进行数据传输时,都是先通过串口将数据传送到flash控制器的buffer中。由于buffer的大小为512 bytes,所以每次传输的最大数据量为512bytes。本文中所讨论的三种检错方法的传输数据量均为512 bytes。 1 检错方式 基于8051的串口数据通信系统的硬件开发平台框图如图1所示。利用该平台进行数据传输时,通常有三种数据检错方式。 1.1 奇偶校验 奇偶校验是检错中比较常见的一种方法。它利用数据中的1的个数作为检错的标志位,若1的个数为奇数个,则错误检测的标志位为1,若1的个数为偶数,则错误检测的标志位为0。在发送端和接收端同时检测奇偶位,若得到相同
[单片机]
串口通信 校验码_8051<font color='red'>单片机</font>串口通信中的检错方法
PIC单片机系统开机的时候一直会复位可能的原因?
可能的原因:也许,您该检查一下您的电源走线是不是够粗,或者,程序是不是一开始运行就点亮LED或者叫BUZZER?因为,PICmicro开始任务的电压通常是蛮低的。如果因为上述原因而让电压骤降,可能会让Vcc电压瞬间掉至reset电压以下,而造成重置。如果您的示波器不够好,很有可能根本观察不到此电压变动之状况。 WDT TIMEOUT 的标准时间为18mSec, 但是非常重要的一点, WDT TIMEOUT 的最小值为7~9mSec, 而且会受温度的影响 并且这个值不是测试值,而是计算值,请不要太相信. 若你有使用WDT,建议在5mSec以内Clear WDT较好 注意芯片的LVP(低压编程使能)一定要禁止,如果你确实需要它开,你确
[单片机]
MSP430单片机按键中断程序
#include IRRemote.h void main(void) { //初始化 Initialize(); //死循环 while(1) { unsigned int transmit; //初始化变量 transmit = ENDTRANSMIT; //等待按键按下 SetForPress(); //进入LPM4模式 LPM4; Debounce(); //扫描键盘 KeyS CAN (); //键盘处理 KeyLookup(); if (Error
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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