免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1487 | 回复: 0
打印 上一主题 下一主题

PCMCIA接口IP设计 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-17 21:38 |只看该作者 |倒序浏览

http://www.biplip.com/default.aspx?mid=363&ctl=View&ItemId=315
一、设计背景说明
与USB接口一样,PCMCIA接口几乎是所有笔记本电脑必备的接口之一,其接口标准由PCMCIA协会定义,称为PC Card Standard Realese x。PCMCIA现在用的最广的标准为PC Card Std-1995,因此我们的设计也依此标准。由于缺少足够的资料,尤其是PCMCIA标准需要高价购买,一般个人独立设计PCMCIA接口IP很难。
下图是PCMCIA的应用系统结构,支持PCMCIA卡的笔记本电脑主机提供了PCMACIA HBA(Host Bus Adapter)和Socket,带阴影的PC Card是需要PC Card的开发者设计的。目前市场上有专用的PCMCIA接口芯片,但对于片上系统设计,一般要求PCMCIA接口IP嵌入到整个芯片中而不是独立的采用专用的芯片。


图 1 PCMCIA的应用系统结构
本设计所完成的PCMCIA接口IP支持以下功能:
l         支持PC Card standard Release 1995 16-bit I/O–only PC卡。
l         设计工作时钟10MHz以上即可。
l         支持3.3V低电压插槽II类卡。
l         支持硬复位和软件复位。
l         属性存储器读周期任意,写周期任意。
l         设计支持256*8bit卡信息结构。它既可以由FPGA在配置阶段自动初始化,也可以在系统reset之后由外部逻辑写入。
l         7个字节的功能配置寄存器。
l         可配置I/O 基地址和I/O窗口。
l         支持电平中断和脉冲两种中断方式,但建议配置CIS时将Card配置为只支持电平中断。设置为脉冲中断方式时,卡将中断信号置1,则产生单个长度为约0.5ms[1]脉冲的长度的脉冲。脉冲产生完毕后如果卡中断信号如果仍然存在,将会产生新的中断脉冲。
l         提供专门的Debug管脚,便于测试。
  
另外需要设计完整的testbench,完成模块的逻辑验证工作。
二、PCMCIA接口标准中与本设计密切相关的内容介绍
2.1管脚定义及其功能介绍
我们支持的PC Card的物理规格为TypeII,外观尺寸8.56cm×5.4cm,厚0.5cm。采用I/O& Memory 模式,此时的68芯接口信号定义如下:
管脚
名称
描述
管脚
名称
描述
1
GND

35
GND
  
2
Data 3
  
36
CD1#
  
3
Data 4
  
37
Data 11
  
4
Data 5
  
38
Data 12
  
5
Data 6
  
39
Data 13
  
6
Data 7
  
40
Data 14
  
7
CE1#
  
41
Data 15
  
8
Address 10
  
42
CE2#
  
9
OE#
  
43
VS1#/Refresh
  
10
Address 11
  
44
IORD#
在存储器模式下为Reserved
11
Address 9
  
45
IOWR#
在存储器模式下为Reserved
12
Address 8
  
46
Address 17
  
13
Address 13
  
47
Address 18
  
14
Address 14
  
48
Address 19
  
15
WE#
  
49
Address 20
  
16
IREQ#
在存储器模式下为Ready
50
Address 21
  
17
Vcc
  
51
Vcc
  
18
Vpp1
  
52
Vpp2
  
19
Address 16
  
53
Address 22
  
20
Address 15
  
54
Address 23
  
21
Address 12
  
55
Address 24
  
22
Address 7
  
56
Address 25
  
23
Address 6
  
57
VS2#/Rsrvd
  
24
Address 5
  
58
RESET
  
25
Address 4
  
59
WAIT#
  
26
Address 3
  
60
INPACK#
在存储器模式下为Reserved
27
Address 2
  
61
REG#
  
28
Address 1
  
62
SPKR#
在存储器模式下为BVD2
29
Address 0
  
63
STSCHG#
在存储器模式下为BVD1
30
Data 0
  
64
Data 8
  
31
Data 1
  
65
Data 9
  
32
Data 2
  
66
Data 10
  
33
IOIS16#
在存储器模式下为WP
67
CD2#
  
34
GND
  
68
GND
  
注:#代表低电平有效
信号功能的详细解释如下:
1.         Vcc&Ground:3.3V~5V,与卡的版本和CIS配置有关。在PCMCIA 2.x中,卡初始化时一定是5V;如果CIS配置成支持3.3v,则工作后Vcc变为3.3V,这种卡称为双电压卡。我们设计为3.3V单电压工作方式,属于低电压卡,只能插入低电压插槽(socket)或通用插槽,这是PC-Card 1995(R5.0)定义的
2.         Vpp1&Vpp2:可编程存储器如EEPROM的编程电压。对于我们的设计Vpp1&Vpp2我们不需要,可以由CIS设定为3.3V。
3.         VS1#&VS2#:电压探测 Valtage sense。对于我们的设计,VS1#=0,VS2#=1’bZ,即3.3V的低电压工作方式
4.         A25:A0:64MB地址空间。对于x86机,只有64KB I/O地址,地址线只有第16位有用。
我们要使用的I/O窗口有3*256B(由Windows系统决定的)。
5.         CE1#:card enable 控制D7-:D0上的数据。对于16bits的host,它控制偶数地址
6.         CE2#:card enable对于16bits的host,它控制奇数地址。我们要设计16bit的host,可以支持CE1#和CE2#同时有效。Attribute存储器(CIS)必须是偶数地址的。
7.         OE#:output enable
8.         WE#:write enable
9.         REG#:register
交易类型
OE#
WE#
REG#
通用存储器读
0
1
1
通用存储器写
1
0
1
属性存储器读
0
1
0
属性存储器写
1
0
0
10.     CD1#:Card detect
11.     CD2#:Card detect。两个CD必须同时有效才行。这两条线不要接到芯片上,直接接到地线,同时要卡的地线与插槽的地线相连。
12.     READY:Card Ready。表示卡初始化完毕或者执行动作完毕。I/O卡里被IREQ#代替。只在初始化阶段IO设备被认为是存储设备,此时代表ready,初始化完毕主机识别到这是一个I/O设备,此后该信号代表中断信号。所以在PCMCIA接口IP中将不会出现Ready信号,只有IREQ#信号。但是此信号在卡的初始化阶段代表Ready。我们在使用FPGA实现的时候,CIS是在FPGA配置阶段初始化的。另外此IP还支持外部逻辑对其CIS进行配置,后面会有更详细的解释。
13.     WP:写保护,在设计时下拉到GND。I/O卡里没有使用,被IOIS16#代替。所以在PCMCIA接口IP中将不会出现WP信号,只有IOIS16#信号。
14.     WAIT#:卡可以通过置位WAIT#插入等待周期,WAIT信号译码OE#信号。Tuple 1Bh定义插入WAIT后的最大cycle timing.WAIT#的最大时间值为12us。
15.     INPACK#:input port  Acknowledge。当本设备的IO地址与其它设备有交叠时有用。当卡被选中且当前读写卡的I/O时,该信号有效。在卡被配置之前该信号都应该无效。
16.     IORD#:I/O读。
17.     IOWR#:I/O写。
18.     IREQ#:中断请求。
19.     IOIS16#:I/O数据支持16bit时,如果地址线是卡所支持的I/O地址时,IOIS16#有效。
20.     SPKR#:Digital Audio Wavform 可以不理,直接接到高电平。我们在设计中用它来指示卡已经被配置为I/O卡。
21.     STSCHG#:I/O状态变化通知。
22.     RESET:卡复位,进入未配置状态,需要在卡上用大于100K欧姆的电阻上拉,以保证卡在插入插槽的时候已经处于复位状态。
  
交易类型
IORD#
IOWR#
OE#
WE#
REG#
I/O read
0
1
1
1
0
I/O Write
1
0
1
1
0
Attribute Memory Read
1
1
0
1
0
Attribute Memory
1
1
1
0
0
Common Memory Read
1
1
0
1
1
Common Memory Write
1
1
1
0
1
属性存储器的读周期是300ns,写周期缺省是250ns,可以通过设置CIS改变。
2.2 卡结构信息
卡信息结构(Card Information Structure or Metaformat)是实现PCMCIA接口的一个组成部分,它为主机提供卡的配置信息。
在本设计中,我们在PCMCIA接口IP中使用了256x8的ROM作为属性存储器来存放卡信息结构。所有这些地址都被存放在偶地址中,从0开始。ROM地址x中的数据对应的PCMCIA接口地址为2x,即忽略PCMCIA的最低地址位。
Metaformat共分为4个层(Layer),每一层由若干Tuple构成。第一层(Layer 1)为基本兼容层,它提供最基本的卡数据组织。包括所支持的配置、设备制造商和设备专有特性,如尺寸、速度和编程信息。普通的卡设计一般只需完成这一层的CIS设计就可以了。
多个Tuple构成链状结构。Tuple的基本结构如下图
TPL_CODE是Tuple标识,TPL_LINK代表本Tuple的Tuple体部分的字节数。Tuple里的数据格式采用小端模式(Little Endian)——如果是多字节数据,数据的低字节先出现。
对于目前流行的无线局域网网卡,它的CIS与有线网卡基本一样。不同的是它必须包括2个LAN功能扩展Tuple:一是LAN_TECH_CODE,值为7;二是LAN_MEDIA_CODE,应该设置为合适的值。

2.3功能配置寄存器
2.3.1配置选项寄存器(configuration option register)
寄存器地址:0200H

SRESET:当软件将该位置为1时,系统进入复位状态,它的功能与reset管脚有效一样,只要该位为1,系统进入未配置的复位状态。
LevlREQ:如果卡支持中断,则:1=电平触发中断,0=脉冲触发,此时脉冲宽度必须大于0.5ms。
Function Configuration Index/Common memory address extension:对于I/O卡,该域为Function Configuration Index,它表示主机选中了的配置表的索引。
2.3.2配置和状态寄存器(configuration and status register)
寄存器地址:0202H
changed: 卡状态变化显示
sigchg:stschg的屏蔽信号
iois8:主机将它设为1,如果主机只支持8位I/O读写
RFU:保留字,应为0。
Audio:I/O enable
Intr:卡将它置为1表示当前需要中断服务,否则它为0. 只读。中断分为脉冲和电平中断两种方式。
IntrACK:对于支持单个中断的I/O设备,该位为0,只读。Single function PC Cards ignore this field on writes and always return zero (0).
2.3.3管脚代替寄存器(pin replacement register)
寄存器地址:0204H
CBVD1: 0
CBVD2:0
CREADY:
CWProt: 0
RBVD1:1
RBVD2:1
RREADY:
RWProt:写保护状态,0
作为IO卡,我们只实现CREADY和 RREADY
2.3.4插槽和拷贝寄存器(socket and copy register)
寄存器地址:0206


Reserved:为0
Copy number:当前卡的拷贝号。
SocketNumber:卡所在插槽号码
该寄存器实际上对于同一个HBA上同时存在多个完全相同的卡时才有用。
2.3.5 I/O基址寄存器(I/O base register)
寄存器地址:0210,0212H
2.3.6.I/O 限制寄存器(I/O Limit Register)
界定I/O的地址范围,对于本设计,使用了8个I/O地址。I/O限制寄存器的值为8’h0f。

三、PCMCIA接口IP验证
3.1验证的主要内容
验证主要包括以下部分:
首先基本的读写时序要正确。包括CIS,功能配置寄存器和I/O的读写。验证时应选择最坏情况。其次验证各种控制信号的工作,如中断信号的产生和清楚。
四、在FPGA上的验证
目前本IP已经在Xilinx FPGA xc2v3000上通过验证。验证过程如下:
(1)       使用的是Dell笔记本电脑。
(2)       Socket Controller的芯片是TI的PCI-1225,支持CardBus PC Card Release 6。
(3)       能够从CIS中解析到数据。当将文献[1]中Modem的CIS放到FPGA上时,计算机能够解析到CIS并认为该卡为标准的Modem,自动安装了驱动程序。
(4)       将CIS中的设备类型设置为User Specific时,安装上作者本人写的驱动程序后发现卡进入IO状态,中断号为7,IO范围D200~D2FF。通过应用程序向IO端口写数据发现能够控制IO端口上的寄存器。
(5)       由于IO状态下寄存器COR是必须的,其它寄存器是可选的。验证结果只能证明COR的设计是正确的。
(6)       应用程序能够连续的向不同IO端口写数据,然后读回正确的结果。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/19273/showart_1967833.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP