Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1357344
  • 博文数量: 281
  • 博客积分: 8800
  • 博客等级: 中将
  • 技术积分: 3346
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-17 22:31
文章分类

全部博文(281)

文章存档

2013年(1)

2012年(18)

2011年(16)

2010年(44)

2009年(86)

2008年(41)

2007年(10)

2006年(65)

我的朋友

分类: LINUX

2009-06-17 21:38:13

USB接口一样,PCMCIA接口几乎是所有笔记本电脑必备的接口之一,其接口标准由PCMCIA协会定义,称为PC Card Standard Realese xPCMCIA现在用的最广的标准为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,完成模块的逻辑验证工作。

接口标准中与本设计密切相关的内容介绍

管脚定义及其功能介绍

我们支持的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&Ground3.3V5V,与卡的版本和CIS配置有关。在PCMCIA 2.x中,卡初始化时一定是5V;如果CIS配置成支持3.3v,则工作后Vcc变为3.3V,这种卡称为双电压卡。我们设计为3.3V单电压工作方式,属于低电压卡,只能插入低电压插槽(socket)或通用插槽,这是PCCard 1995R5.0)定义的

2.         Vpp1&Vpp2:可编程存储器如EEPROM的编程电压。对于我们的设计Vpp1&Vpp2我们不需要,可以由CIS设定为3.3V

3.         VS1#&VS2#:电压探测 Valtage sense对于我们的设计,VS1#=0,VS2#1’bZ,即3.3V的低电压工作方式

4.         A25:A064MB地址空间。对于x86机,只有64KB I/O地址,地址线只有第16位有用。

我们要使用的I/O窗口有3*256B(由Windows系统决定的)。

5.         CE1#card enable 控制D7-:D0上的数据。对于16bitshost,它控制偶数地址

6.         CE2#card enable对于16bitshost,它控制奇数地址。我们要设计16bithost,可以支持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.     READYCard Ready。表示卡初始化完毕或者执行动作完毕。I/O卡里被IREQ#代替。只在初始化阶段IO设备被认为是存储设备,此时代表ready,初始化完毕主机识别到这是一个I/O设备,此后该信号代表中断信号。所以在PCMCIA接口IP中将不会出现Ready信号,只有IREQ#信号。但是此信号在卡的初始化阶段代表Ready。我们在使用FPGA实现的时候,CIS是在FPGA配置阶段初始化的。另外此IP还支持外部逻辑对其CIS进行配置,后面会有更详细的解释。

13.     WP:写保护,在设计时下拉到GNDI/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改变。

卡结构信息

卡信息结构(Card Information Structure or Metaformat)是实现PCMCIA接口的一个组成部分,它为主机提供卡的配置信息。

在本设计中,我们在PCMCIA接口IP中使用了256x8ROM作为属性存储器来存放卡信息结构。所有这些地址都被存放在偶地址中,从0开始。ROM地址x中的数据对应的PCMCIA接口地址为2x,即忽略PCMCIA的最低地址位。

Metaformat共分为4个层(Layer),每一层由若干Tuple构成。第一层(Layer 1)为基本兼容层,它提供最基本的卡数据组织。包括所支持的配置、设备制造商和设备专有特性,如尺寸、速度和编程信息。普通的卡设计一般只需完成这一层的CIS设计就可以了。

多个Tuple构成链状结构。Tuple的基本结构如下图

TPL_CODETuple标识,TPL_LINK代表本TupleTuple体部分的字节数。Tuple里的数据格式采用小端模式(Little Endian)——如果是多字节数据,数据的低字节先出现。

与有线网卡基本一样。不同的是它必须包括2LAN功能扩展Tuple:一是LAN_TECH_CODE,值为7;二是LAN_MEDIA_CODE,应该设置为合适的值。

 

功能配置寄存器

配置选项寄存器(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,它表示主机选中了的配置表的索引。

配置和状态寄存器(configuration and status register

寄存器地址:0202H

changed: 卡状态变化显示

sigchgstschg的屏蔽信号

iois8:主机将它设为1,如果主机只支持8I/O读写

RFU:保留字,应为0

AudioI/O enable

Intr:卡将它置为1表示当前需要中断服务,否则它为0. 只读。中断分为脉冲和电平中断两种方式。

IntrACK:对于支持单个中断的I/O设备,该位为0,只读。Single function PC Cards ignore this field on writes and always return zero (0).

管脚代替寄存器(pin replacement register

寄存器地址:0204H

CBVD1: 0

CBVD2:0

CREADY:

CWProt: 0

RBVD11

RBVD2:1

RREADY:

RWProt:写保护状态,0

作为IO卡,我们只实现CREADY RREADY

插槽和拷贝寄存器(socket and copy register

寄存器地址:0206

 

Reserved:为0

Copy number:当前卡的拷贝号。

SocketNumber:卡所在插槽号码

该寄存器实际上对于同一个HBA上同时存在多个完全相同的卡时才有用。

基址寄存器(I/O base register

寄存器地址:02100212H

限制寄存器(I/O Limit Register

界定I/O的地址范围,对于本设计,使用了8I/O地址。I/O限制寄存器的值为8’h0f

 

接口IP验证

验证的主要内容

验证主要包括以下部分:

首先基本的读写时序要正确。包括CIS,功能配置寄存器和I/O的读写。验证时应选择最坏情况。其次验证各种控制信号的工作,如中断信号的产生和清楚。

上的验证

目前本IP已经在Xilinx FPGA xc2v3000上通过验证。验证过程如下:

(1)       使用的是Dell笔记本电脑。

(2)       Socket Controller的芯片是TIPCI-1225,支持CardBus PC Card Release 6

(3)       能够从CIS中解析到数据。当将文献[1]ModemCIS放到FPGA上时,计算机能够解析到CIS并认为该卡为标准的Modem,自动安装了驱动程序。

(4)       CIS中的设备类型设置为User Specific时,安装上作者本人写的驱动程序后发现卡进入IO状态,中断号为7IO范围D200~D2FF。通过应用程序向IO端口写数据发现能够控制IO端口上的寄存器。

(5)       由于IO状态下寄存器COR是必须的,其它寄存器是可选的。验证结果只能证明COR的设计是正确的。

(6)       应用程序能够连续的向不同IO端口写数据,然后读回正确的结果。

阅读(2399) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~