专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
8位单片机的16位外部总线扩展与应用
2019-04-15 18:14
发布
生成海报
站内文章
/
PIC单片机
15336
0
1063
随着电子设计技术的进步和芯片制造工艺水平的提高,
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
单片机,工作时钟最高为
40 MHz
。在同样的时钟频率下,
W77E58
指令速度是传统
51
单片机的
3
倍;另外,
W77E58
对程序存储器和数据存储器的寻址能力都为
64 KB
。图
1
中上半部分为读时序,下半部分为写时序。
图
1
单片机
W77E58
的读
/
写时序
以读数据为例,
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
位地址线。
图
2 IDE
硬盘接口
IDE
硬盘是典型的
16
位总线设备。
IDE
接口有两个片选信号,
DCS1
用来寻址控制寄存器。默认状态下即可对
IDE
硬盘进行存取操作,故一般把该信号线直接连到高电平而只使用
DCS0
。其时序如图
3
所示。
图
3 IDE
硬盘读
/
写时序
读
/
写周期开始时
DIOR
和
DIOW
均处于无效状态,
DA0
~
DA2
连接到主机(在这里为单片机)的地址输出。在收到读请求(
DIOR
使能)后把数据送至数据线上,主机利用
DIOR
的上升沿锁存该数据;之后,硬盘控制器延时后释放数据线。在收到写请求时(
DIOW
使能),则让数据线处于三态(
tristate
),等待主机输出数据;最后在
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
位总线设备:
CS1
:
0000H
~
7FFFH
;
CS2
:
8000H
~
83FFH
;
CS3
:
8400H
~
85FFH
;
CS4
:
8600H
~
87FFH
;
CS5
:
8000H
~
81FFH
,
FC00H
~
FDFFH
;
CS6
:
8200H
~
83FFH
,
FE00H
~
FFFFH
;
LE5 = !RD & !CS5
,
LE6 = !WR & !CS6
;
这里
“&”
表示
“
与
”
,
“!”
表示
“
非
”
,即
RD
和
CS5
同时有效时,
LE5
有效
; WR
和
CS6
同时有效时,
LE6
有效。注意:
CS5
和
CS6
有一部分地址空间与
CS2
重合,即选通
CS2
的同时,也同时会选通
CS5
或
CS6
。另外,通过外部设备地址线的连接,使得
8000H
~
81FFH
和
8200H
~
83FFH
寻址同一个位置。以图
2
中的
IDE
硬盘为例:
DA0>A0
,
DA1>A1
,
DA2>A2
。
图
4
具体实现原理
单片机写
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
不同方法
16
位总线速度对比(
fosc=33 MHz
)
另外,上述扩展方法还可以进一步引申:
①
若有未使用的
I/O
口(如
W77E58
的
P1
口),则可用来直接输出高
8
位数据,从而可以去掉图
4
中的
U4
;
②
若对成本不太敏感,则可把图
4
中的逻辑器件用
CPLD
实现,从而使设计更为灵活,布线更为方便,结构更为紧凑,基本实现原理仍然如图
4
所示。
3
在车载数据采集系统中的应用
8
位单片机扩展
16
位外部总线的方法已应用于车载数据采集系统,图
5
为该系统的原理框图。汽车厂商在开发新车型或者关键零部件升级时,必须经过样品试制、产品鉴定、小批试制和大批生产等必要阶段。在每个阶段中,都伴随着大量的可靠性试验,车载数据采集系统正是为这些试验而设计的。鉴于其特殊的使用条件,必须满足如下基本要求:
能够进行连续、长时间数据采集,时间有可能是几天或者一个月;因为有可能很多台车辆的试验同时进行,因而要求系统成本低且安全可靠;具有
CAN
总线数据采集接口。在图
5
中,
8
位单片机上挂有
3
个
8
位总线器件(
USB Slave
器件、
RAM
和
CAN
总线器件)和
1
个
16
Ta的文章
更多
>>
8位单片机的16位外部总线扩展与应用
0 个评论
Ubuntu在当前目录下右键直接打开terminal终端
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮