CH365 WCH | Alldatasheet
Document overview
- Manufacturer or author: Provided By ALLDATASHEET.COM(FREE DATASHEET DOWNLOAD SITE)
- PDF pages: 18
Technical content
CH365中文手册(一) 1 PCI 总线接口芯片CH365 中文手册 版本:1D http://wch.cn 1、概述 CH365是一个连接PCI总线的通用接口芯片,支持I/O端口映射、存储器映射、扩展ROM 以及中 断。CH365 将32 位高速PCI 总线转换为简便易用的类似于ISA 总线的8 位主动并行接口,用于制作 低成本的基于PCI总线的计算机板卡,以及将原先基于ISA 总线的板卡升级到PCI总线上。PCI 总线 与其它主流总线相比,速度更快,实时性更好,可控性更佳,所以CH365 适用于高速实时的I/O控制 卡、通讯接口卡、数据采集卡、电子盘、扩展ROM 卡等。下图为其一般应用框图。 2、特点
- 实现基于32位PCI总线的从设备接口。
- 转换为主动并行接口:8位数据,16位地址,I/O 读和写,存储器读和写。
- 可以设定PCI板卡的设备标识(Vendor ID,Device ID,Class Code 等)。
- 支持以字节、字或双字为单位对I/O 端口或者存储器进行读写。
- 非突发存取的实测速度可达每秒7MB,读写脉冲的宽度从30nS到240nS 可选。
- 自动分配I/O基址,支持长度达240字节的I/O 端口。
- 支持本地硬件定址功能,自由选择I/O 地址,在指定地址实现I/O 端口。
- 直接升级ISA的I/O板卡到PCI总线,完全不需要修改原ISA 卡的相关软件。
- 直接映射支持容量为32KB的存储器SRAM或者扩展ROM(Boot ROM)。
- 无需外接元器件扩容支持容量为64KB以及128KB 的存储器或者扩展ROM。 PCI_INTA SYS_EX (INT_REQ) MEM_WR (IOP_HIT) MEM_RD IOP_WR IOP_RD D[7-0] A[15-0] PCI_CBE[3-0] PCI_AD[31-0] PCI_RST PCI_CLK PCI_DEVSEL PCI_TRDY PCI_IRDY PCI_FRAME PCI_IDSEL PCI_PAR CH365 接口芯片 PCI 总线 本地 8 位 总线
CH365中文手册(一) 2
- 支持扩展ROM无硬盘引导,支持闪存Flash-Memory 在线升级。
- 可以提供扩展ROM应用的子程序库BRM,用于BIOS环境下用户界面显示及数据处理。
- 支持低电平有效的本地中断请求,支持中断共享。
- 提供两线串行主机接口,可以挂接类似24C0X 的两线串口EEPROM器件。
- 内置4uS 至1mS的硬件计时单元,用于软件运行过程中作为延时参考。
- 大引脚间距(0.8mm)的PQFP-80封装,与CH361P引脚兼容,直接替代。
- 通用的驱动程序支持Windows 98/ME/2000/XP,通过DLL 提供应用层API。
- 芯片本身无需驱动程序即可工作,升级ISA 板卡可以不需要驱动程序。
- 多项专利技术,简便易用,低成本。 3、封装 封装形式 塑体宽度 引脚间距 封装说明 订货型号 PQFP-80 20mm x 14mm 0.8mm 31.5mil 标准的PQFP80贴片 CH365P 4、引脚 4.1. 电源线 引脚号 引脚名称 类型 引脚说明 20,61,80 VCC 电源 正电源端 1,21,60 GND 电源 公共接地端 4.2. PCI总线信号线
CH365中文手册(一) 3 引脚号 引脚名称 类型 引脚说明
64 PCI_RST 输入 系统复位信号线,低电平有效
65 PCI_CLK 输入 系统时钟信号线,上升沿有效
PCI_AD31 ~PCI_AD0 三态输出 及输入 地址和双向数据复用信号线 6,13 24,74 PCI_CBE3 ~PCI_CBE0 输入 总线命令和字节使能复用信号线
12 PCI_PAR 三态双向 奇偶校验信号线
75 PCI_IDSEL 输入 初始化设备选择信号线,高电平有效
7 PCI_FRAME 输入 帧周期开始信号线,低电平有效
8 PCI_IRDY 输入 发起设备准备好信号线,低电平有效
9 PCI_TRDY 三态输出 目标设备准备好信号线,低电平有效
10 PCI_DEVSEL 三态输出 目标设备选中信号线,低电平有效
11 PCI_INTA 三态输出 INTA中断请求信号线,低电平有效
4.3. 本地端信号线 引脚号 引脚名称 类型 引脚说明 51-58 D7~D0 三态输出 及输入 8 位双向数据信号线,内置上拉电阻, D7同时是两线串行接口的SDA 信号线 33-39 42-50 A15~A0 输出 16位地址信号线,A15~A10 可以独立控制输出, A15 可以设定为两线串行接口的SCL 信号线
40 IOP_RD 输出 I/O 端口的读选通/使能,低电平有效
41 IOP_WR 输出 I/O 端口的写选通/使能,低电平有效
62 MEM_RD 输出 存储器或扩展ROM 的读选通/使能,低电平有效
MEM_WR 输出 存储器或扩展ROM 的写选通/使能,低电平有效 63 复用 IOP_HIT 输入 本地硬件定址请求,低电平有效,内置上拉电阻 SYS_EX 输出 可以独立控制的输出信号线, 可以设定为两线串行接口的SCL 信号线 59 复用 INT_REQ 输入 本地中断请求输入,低电平有效,内置上拉电阻 5、工作模式设定 为了在不增加引脚的前提下提供更多可用功能,CH365对部分引脚进行复用,通过“工作模式设 定”进行功能选择。“工作模式设定”的具体方法如下:将本地端8位数据信号线D7~D0采用上拉或 者下拉的方式设定为所需的高电平或者低电平,CH365被复位后根据这些信号线的默认状态设定工作 模式以及参数;而这些信号线在作为 8 位数据总线被驱动时,因为一般外部设备的驱动电流不小于 1mA,所以上拉或者下拉不会影响其对数据总线的驱动;另外,CH365 仅在被复位后的1uS 内一次性 设定工作模式以及参数,所以,如果外部设备的驱动能力很小或者是OC 集电极开路驱动,则可以仅 在复位后的短时间内实现下拉,而在其余时间屏蔽下拉或者转换成上拉。 下图为工作模式设定的两种电路,CH365 已经在芯片内部为8 位数据总线D7~D0 连接了40KΩ 的弱上拉电阻,如果在芯片外部连接下拉电阻,则数据线为低电平,否则为高电平。图中左边的电路 适用于一般情况,D4和D1被6.8KΩ电阻下拉为低电平,故数据线D7~D0上的设定值为11101101(二 进制数);并且由于上拉和下拉的阻值较大,所以不会影响CH365 和外部设备对数据总线的驱动。当
CH365中文手册(一) 4 外部设备的驱动能力小于1mA或者是集电极开路驱动时,可以参考图中右边的电路。图中RST即PCI 总线的复位信号,由于电容C5的作用,使得A 点在RST复位完成后继续保持几个微秒的低电平,CH365 在此期间完成工作模式设定。图中右边的电路在D7~D0上的设定值为11101101。 下表为设定工作模式和参数所对应的数值(1 即高电平,0 即低电平)。例如,D1=0 则可以定义 PCI 板卡的ID,D3=0则启用中断功能,D4=0则启用本地硬件定址的功能,D3和D4不能都为0。 数据线 数据线的设定说明 设定值=0 设定值=1 D0 设定系统复位后A15的默认值 复位后A15 为0 复位后A15 为1 D1 选择PCI厂商和设备标识ID 由外部提供ID 使用CH365 默认的ID D3 选择复用引脚59的功能 INT_REQ SYS_EX D4 选择复用引脚63的功能 IOP_HIT MEM_WR 其它 提供给产品制造商使用,数据线的状态可以从PCI 设备配置空间41H 中读取, 例如:在D2、D5、D6、D7引脚上可选地连接下拉电阻,供应用程序识别板卡功能 6、寄存器 6.1. 基本约定 6.1.1. 属性简写:R=完全只读,W=可读可写,S=只读但可以事先设定,….=省略号。 6.1.2. 数据的数制:如果以H结尾则为十六进制数,否则为二进制数。 6.1.3. 数值的通配符以及属性:r=保留(禁止使用),x=任意值,….=省略号。 6.2. 配置空间0FFH-00H 类别 地址 寄存器名称 寄存器属性 系统复位后默认值 01H-00H 厂商标识:Vendor ID SSSS 4348H 03H-02H 设备标识:Device ID SSSS 5049H 05H-04H 命令寄存器:Command RRRRRRRRRRRRRRWW 0000000000000000 07H-06H 状态寄存器:Status RRRRRRRRRRRRRRRR 0000010000000000 08H 芯片版本:Revision ID SS 10H 0BH-09H 设备类代码:Class Code SSSSSS 100000H 0FH-0CH SSSSSSSS 00000000H 13H-10H I/O端口基址: I/O Base Address RRRRRRRRRRRRRRRR WWWWWWWWRRRRRRRR 0000000000000000 0000000000000001 17H-14H 存储器基址: Memory Base Address WWWWWWWWWWWWWWWW WRRRRRRRRRRRRRRR 0000000000000000 000000000000x000 2FH-18H SSSS….SSSS 0000….0000H 标准 PCI 设备 配置 空间 33H-30H 扩展ROM基址: ROM Base Address WWWWWWWWWWWWWWWW WRRRRRRRRRRRRRRW 0000000000000000 0000000000000000
CH365中文手册(一) 5 3BH-34H SSSSSSSSSSSSSSSS 0000000000000000H 3FH-3CH 中断号和中断引脚等: Interrupt Line & Pin RRRRRRRRRRRRRRRR RRRRRRRRWWWWWWWW 0000000000000000 0000000x00000000 40H 芯片控制寄存器 RRRRRWWW rrrrr00x 41H 8位总线D7-D0输入端口 RR xxH 42H 芯片状态寄存器 RRRRRRRR xxrxrxrx 43H 保留 (禁止使用) (禁止使用) 控制 寄存 器和 杂项 其它 4FH-44H是43H-40H 的别名地址;0FFH-50H保留,只读00H 6.3. I/O空间0FFH-00H(寄存器的实际地址为I/O 端口基址加表中的偏移地址) 类别 偏移地址 寄存器名称和说明 寄存器属性 复位后的默认值 端口 0EFH-00H 标准的本地I/O 端口 WW 连接到I/O 设备 0F0H A7-A0地址设定寄存器 WWWWWWWW xxxxxxxx 0F1H A15-A8地址设定寄存器 WWWWWWWW 000000xx 0F2H 保留 (禁止使用) (禁止使用) 存储 器 接口 0F3H 存储器数据存取寄存器 WW 连接到存储器 0F4H 数据存取寄存器 WW xxH 0F5H 控制和状态寄存器 WRRRRRRW 00000000 0F6H 地址设定寄存器 WW 00H 两线 串行 接口 0F7H 设备地址和命令寄存器 WW 00H 0F8H 芯片控制寄存器 RRRRRWWW rrrrr00x 0FAH 读写速度控制寄存器 WRRWRWWW 0rr0r111 0FCH 硬件循环计数寄存器 RR xxH 控制 寄存 器和 杂项 其它地址 保留 (禁止使用) (禁止使用) 6.4. 寄存器的位说明 寄存器名称 位址 属性 位的使用说明 位值=0 位值=1 位0 W 设定A15 引脚的输出值 低电平 高电平 位1 W 设定SYS_EX引脚的输出值 低电平 高电平 芯片控制寄存器 (配置空间40H) (I/O 空间偏移0F8H) 位2 W 设定INTA中断激活状态 无中断 有中断 位0 S PCI 设备标识的当前选择 外部ID 默认ID 位2 S 本地硬件定址的功能 禁用 启用 位4 S 内置Boot-ROM的功能 禁用 启用 位6 S SYS_EX输出信号线 禁用 启用 芯片状态寄存器 (配置空间42H) 位7 S 中断功能的使能状态 禁用 启用 位0 W 两线串行接口的操作状态 完成 操作 两线串口控制和状态寄存 器(I/O 空间偏移0F5H) 位7 W 选择SCL 输出信号线 A15 SYS_EX W W W 位2~位0 设定读写脉冲宽度,步距为30nS 位4 为0,则000~111 对应30nS~240nS 位4 为1,则000~111 对应0nS~210nS 位4 W 数据和地址输出建立时间 15nS 45nS 读写速度控制寄存器 (I/O 空间偏移0FAH) 位7 W 存储器空间预取控制位 禁止 使能 7、功能说明
CH365中文手册(一) 6 7.1. 空间映射 PC 机中包括三种空间:存储器空间、I/O空间、配置空间。存储器空间主要包括内存、显存、扩 展ROM、设备缓冲区等,一般用于存放大量数据和进行数据块交换。I/O 空间主要包括设备的控制寄 存器和状态寄存器,一般用于控制和查询设备的工作状态以及少量数据的交换。配置空间主要用于向 系统提供设备自身的基本信息,并接受系统对设备全局状态的控制和查询。 为了避免地址冲突,PCI总线要求各个设备所占用的地址能够重定位。重定位是由设备的配置空 间的基址寄存器实现的,通常情况下,各个设备的基址寄存器总是被BIOS 或者操作系统分配为不同 的基址,从而将各个设备分别映射到不同的地址范围。在需要时,应用程序也可以自行修改基址。 CH365的存储器空间占用32K字节,偏移地址是0000H~7FFFH,可以全部提供给外部设备使用, 实际地址是存储器基址加上偏移地址。CH365的I/O空间占用256字节,去掉CH365自用寄存器,还 可以提供240 字节给外部设备使用,偏移地址是00H~EFH,实际地址是I/O 基址加上偏移地址。 7.2. 内部结构和信号线
CH365中文手册(一) 7 上图是CH365 内部的主要结构。CH365 对PCI 总线的各种信号进行译码后,产生内部数据总线 D31~D0、内部地址总线A31~A0、读I/O 端口信号、写I/O 端口信号、读存储器信号、写存储器信 号等。图中已经标明了各个信号的传输方向。 结构图右侧的信号是指CH365提供给本地端的各个外部引脚。地址线A15~A0用于提供相对于基 址的偏移地址,数据总线D7~D0在读操作时用于输入数据,在写操作时用于输出数据。IOP_RD用于 提供I/O 读选通脉冲信号,IOP_WR 用于提供I/O 写选通脉冲信号,MEM_RD 用于提供存储器读选通脉 冲信号,MEM_WR 用于提供存储器写选通脉冲信号,上述引脚的读写选通脉冲信号都是低电平有效。 CH365提供的地址线、数据总线、读写选通信号线类似于ISA 总线的信号线,所以非常适合将ISA板 卡升级到PCI总线上。并且从图中可以看出,CH365提供的读写选通信号已经在芯片内部被片选控制, CH365输出的读写选通信号只是在其基址映射范围内有效,所以外部设备不再需要片选译码。 在I/O 读写操作期间,CH365 的A7~A0 输出I/O 端口的偏移地址,提供给外部设备的有效偏移 地址范围是00H~EFH,外部设备可以进一步对A7~A0进行译码产生二级片选信号。在I/O读写操作 期间,CH365 的A15~A10 保持不变,但可以由内部寄存器事先设定为高电平或者低电平,A9~A8 输 出PCI 总线的地址,如果使用本地硬件定址的功能,则应该对CH365 的A9~A0 进行地址译码,通过 IOP_HIT 引脚向CH365 请求本地定址,以实现与ISA 总线相兼容的000H~3FFH 地址范围内的I/O 端 口定址。 在存储器读写操作期间,CH365的A14~A0输出存储器的偏移地址,提供给外部设备的有效偏移 地址范围是0000H~7FFFH。在存储器读写操作期间,CH365 的A15保持不变,但可以由内部寄存器事 先设定为高电平或者低电平,用于存储器地址线扩展或者页面选择。由于扩展ROM 属于存储器的一种, 所以其操作方式以及操作时序与存储器相同。 7.3. 数据宽度 CH365支持PC机程序以单字节、双字节(字)、四字节(双字)为单位对I/O 端口或者存储器进 行读写。在多字节连续读写操作期间,CH365 每读写完一个字节数据后,就会自动将偏移地址加1, 以指向下一字节的偏移地址。由于PC 机只要执行一条读写四字节数据的指令,CH365 就会自动将其 分解为4 个8位数据的连续读写操作,所以在PC机看来,CH365能够提供8 位、16位和32位的数据 宽度,而且实际情况也是32位数据宽度时的工作效率更高,总体数据交换速度更快。 下图左边是汇编指令“OUT DX,EAX”的波形,其中DX 是CH365 的I/O 基址范围内的任意双字 边界的地址,例如DX=IoBaseAddr+4;右边是“OUT DX,AL”的波形,其中DX是CH365的I/O 基址 范围内的任意地址,例如DX=IoBaseAddr+1,对应的C语言指令是“outportb(IoBaseAddr+1,Value)”。 I/O 读操作和存储器的读写操作与I/O写操作的情况相类似。当PC机程序执行32位数据宽度的指令 时,由于CH365自动产生连续的4 次8位数据操作,所以数据传输效率比PC机程序执行8 位数据宽 度的指令时更高。 7.4. 示例说明 基于CH365设计一块类似于打印口的PCI板卡。设计约定板卡的I/O偏移地址00H是数据端口, 偏移地址01H 是状态端口,偏移地址02H 是控制端口。当插入PC 机后,该板卡可能被分配一个I/O
CH365中文手册(一) 8 基址9500H,则数据端口的实际I/O 地址是9500H,状态端口的I/O 地址是9501H,控制端口的I/O 地址是9502H。区分各个端口是对CH365 的A7~A0 进行地址译码实现的,如果不需要其它端口,也 可以只对A1~A0进行简化译码。 如果将两块完全相同的上述板卡插入PC 机,则第二块板卡也会被系统自动分配一个I/O 基址, 但一定不会与第一块板卡的I/O基址相同。如果第二块板卡的I/O基址是C700H,则第二块板卡的控 制端口的实际I/O地址是C702H,从而使得两块完全相同的PCI板卡分别具有不同的I/O 端口地址, 避免了I/O 地址冲突。 板卡设计者和相关的应用程序事先知道各个端口的偏移地址,但是无法事先知道板卡的I/O 基 址,所以应用程序在对PCI板卡进行I/O操作前,需要通过板卡的配置空间的I/O基址寄存器了解当 前板卡的I/O基址,再由I/O基址加上各个端口的偏移地址计算出各个端口的实际I/O 地址,最后根 据实际I/O 地址对各个端口进行I/O操作。 存储器方面与I/O端口类似,以CH365连接一个32KB容量的双口SRAM进行高速数据交换为例。 如果 CH365 的存储器基址被分配为 E3050000H,则计算机程序读写物理地址范围 E3050000H~ E3057FFFH 就是读写该双口SRAM。注意,实际的PC 机程序通常使用转换后的虚拟地址而不是物理地 址;另外,如果要在DOS下对存储器进行读写,通常要将存储器基址设置在DOS 可寻址的1MB以下, 例如000D0000H 或者000D8000H。 以下是相应的读写过程示例。 ① 向控制端口写出数据5AH,对应C 语言程序“outportb(0x9502,0x5A)”。执行后CH365 的地 址线A7~A0输出控制端口的偏移地址02H(地址9502被分解为基址9500H和偏移地址02H, CH365只输出偏移地址,不输出基址),CH365的数据线D7~D0输出5AH,同时IOP_WR输出 一个低电平脉冲,脉冲宽度由CH365 的读写速度控制寄存器事先设定,默认是240nS。 ② 从数据端口和状态端口读入数据,对应C语言程序“inport(0x9500)”,返回结果的低字节 是从数据端口读取的数据,高字节是从状态端口读取的数据。执行后CH365 的地址线A7~ A0 首先输出数据端口的偏移地址00H,同时IOP_RD输出第一个低电平脉冲,外部设备应该 将数据输出到数据总线D7~D0 上;然后CH365 的地址线A7~A0 输出状态端口的偏移地址 01H,同时IOP_RD输出第二个低电平脉冲,外部设备应该将状态输出到数据总线D7~D0上。 ③ 存储器读写与I/O读写类似,但有两点区别:第一是CH365 的地址线A14~A0输出15位偏 移地址,而I/O 只有A7~A0 输出8 位偏移地址;第二是用MEM_RD 引脚输出读控制信号代 替IOP_RD 引脚输出读控制信号,用MEM_WR引脚输出写控制信号代替IOP_WR引脚输出写控 制信号,从而能够让外部设备区分出是存储器读写操作,而不是I/O 端口的读写操作。 8、参数 8.1. 绝对最大值(临界或者超过绝对最大值将可能导致芯片工作不正常甚至损坏) 名称 参数说明 最小值 最大值 单位 TA 工作时的环境温度 -20 70 ℃ TS 储存时的环境温度 -55 125 ℃ VCC 电源电压(VCC接电源,GND 接地) -0.5 6.5 V VIO 输入或者输出引脚上的电压 -0.5 VCC+0.5 V 8.2. 电气参数(测试条件:TA=25℃,VCC=5V,不包括连接PCI 总线的引脚) 名称 参数说明 最小值 典型值 最大值 单位 VCC 电源电压(请参考下面的注意事项) 3.3 5 5.5 V ICC 工作时的电源电流 10 20 50 mA VIL 低电平输入电压 -0.5 0.8 V VIH 高电平输入电压 2.0 VCC+0.5 V VOL 低电平输出电压(4mA吸入电流) 0.5 V
CH365中文手册(一) 9 VOH 高电平输出电压(4mA输出电流) 4.5 V IIN 无上拉的输入端的输入电流 10 uA IUP 带上拉的输入端的输入电流 50 uA RUP 上拉电阻的阻值(非线性等同值) 40 60 100 KΩ 注意事项:CH365的输入承受电压实际是电源电压加上0.5V,例如,当CH365 工作于3.3V 电源 电压时,外部设备提供给CH365 的输入电压不得超过3.8V。当CH365 的电源电压低于4V 时,PCI 总 线的主频不得超过33MHz,也就是说PCI总线不得超频工作。 8.3. 时序参数(测试条件:TA=25℃,VCC=5V,FCLK=33.3MHz,参考附图) 名称 参数说明 最小值 典型值 最大值 单位 FCLK CLK输入频率(PCI总线的主频) 0 33.3 40 MHz 读选通或写选通的低电平脉冲宽度 30 可选择 30~240 240 默认值 nS 多字节连续选通的高电平间隔宽度 默认值 可选择 30或60 60 nS TAS 地址A15~A0输出建立时间 12 可选择 15或45 nS TAH 地址A15~A0输出保持时间 12 15 nS TDS 数据D7~D0输出建立时间 12 可选择 15或45 nS TDH 数据D7~D0输出保持时间 12 15 nS TIS 数据D7~D0输入建立时间 15 nS TIH 数据D7~D0输入保持时间 0 nS TINT INT_REQ中断请求的脉冲宽度 80 100 nS FSCL SCL输出频率(两线接口的主频) FCLK / 128 = 260 KHz TI2C0 开始和终止操作时SDA低电平时间 3.84 uS TI2C1 开始和终止操作时SDA高电平时间 3.84 uS TI2CS SDA数据输出建立时间 1.92 uS TI2CH SDA数据输出保持时间 1.92 uS 8.3.1. 读写选通脉冲的宽度TEN 由读写速度控制寄存器的位2~位0 设定,可以以PCI 总线时钟周 期30nS 为步距在30nS~240nS之间进行选择,误差10%。 8.3.2. 在多字节连续读写操作中,读写选通脉冲的间隔TENS由读写速度控制寄存器的位4 设定,设 定为0 则间隔30nS,设定为1 则间隔60nS,误差10%。在单字节读写操作中,TENS的最小值 是150nS,一般在400nS 以上。如果接双口RAM 或者其它读写速度慢于25nS 的外围电路,建 议设定间隔为60nS。 8.3.3. 地址输出建立时间TAS 和数据输出建立时间TDS 是指地址和数据输出有效相对于读写选通脉 冲下降沿的提前时间,TAS和TDS由读写速度控制寄存器的位4设定,设定为0 时为15nS,设 定为1 时为45nS,误差10%。 8.3.4. 对于读操作,CH365在读选通脉冲的上升沿从8 位数据总线D7~D0采样数据,所以外部设备 应该在读选通脉冲的上升沿之前将有效数据送到数据总线上。数据输入建立时间TIS是指要求 外部设备送到数据总线D7~D0上的数据有效相对于读选通脉冲上升沿的提前时间。 8.3.5. 中断请求的脉冲宽度TINT是指确保CH365接受到中断请求的低电平脉冲的宽度,如果INT_REQ 处于低电平的时间太短,则CH365 可能接受不到中断请求。 8.3.6. 两线串行接口时序:SDA信号线是输入输出双向端口,CH365在SCL的下降沿输出数据到SDA, 在SCL 的上升沿采样SDA上的输入数据;在两线串行接口空闲的情况下,SCL保持低电平,SDA 三态输出禁止,但被芯片内部的上拉电阻保持在高电平。
CH365中文手册(一) 10 9、应用 9.1. 连接PCI总线(下图) 这是CH365与PCI总线连接的标准电路,电容C1~C4用于电源退耦,C2~C4是容量为0.1uF的 独石或者高频瓷片电容,数量不应少于3 个,分别就近并联在CH365的三对电源引脚上。连接PCI总 线的电源线引脚可以自由选择,但数量不宜少于4 对。 CH365属于高频数字电路,应该考虑信号阻抗匹配,在设计PCB板时需要参考PCI总线规范。建 议CH365 的PCI信号线的长度都小于35mm,尽量走弧线或者45度线,避免直角或者锐角走线,并且 尽量将信号走线布在元件面,而在PCB背面保留大面积的接地覆铜。CH365的PCI时钟线CLK 的长度 尽量保持在50mm~65mm 之间,并且不宜靠近其它信号线,建议在CLK 两侧及PCB 背面布置接地线或 者覆铜,以减少周边信号线的干扰。
CH365中文手册(一) 11 9.2. 连接存储器(下图左边的电路) CH365 通过MEM_RD和MEM_WR与存储器U2(型号是SRAM62256)连接。在读写存储器U2 之前, 需要先读取CH365 配置空间的存储器基址寄存器,然后由基址加上偏移地址获得U2 在计算机存储器 空间的实际物理地址,最后通过实际物理地址或者由物理地址转换后的虚拟地址读写存储器U2 中的 内容。 基于CH365的通用驱动程序WDM和动态链接库DLL,C 语言程序示例: UCHAR mByte; // 数据单元,用于保存从存储器中读出的数据或者准备写入存储器的数据 mPCH365_MEM_REG mMemBase; // 存储器基址,实际数据单元的地址等于基址加上偏移地址 CH365OpenDevice( TRUE, FALSE ); // 打开CH365 设备,与文件操作一样,使用前要先打开 CH365GetMemBaseAddr( &mMemBase ); // 获取CH365 的存储器基址 CH365ReadMemByte( & mMemBase -> mCh365MemPort[0x1234], &mByte ); // 上述操作从存储器的1234H地址读取一个字节的数据 CH365WriteMemByte( & mMemBase -> mCh365MemPort[0x2E0C], mByte + 0x76 ); // 上述操作将此前读取的数据加上76H 后写到存储器的2E0CH 地址 CH365CloseDevice( ); // 所有操作结束后,在应用程序退出前,应该关闭CH365 设备 在DOS 下或者没有操作系统的PC机中,上述操作的汇编程序是: MOV AX,0B10DH ;以双字为单位写PCI 配置空间 MOV BX,CH365_PCI_BUS_DEV_ADDR ;CH365 板卡的PCI 地址,即总线/设备/功能号
CH365中文手册(一) 12 MOV ECX,000D0001H ;将存储器设定到D000H 段,该段一般在PC机中空闲 MOV DI,0014H ;存储器基址寄存器的偏移地址PC_BASE_ADDR1 INT 1AH ;设置存储器的基址,以启用存储器空间 ;自动分配的存储器基址一般在1MB以上,由于DOS 不能寻址,所以需要修改存储器基址 MOV AX,0D000H MOV ES,AX ;将段地址置为D000H MOV AL,ES:[1234H] ;从存储器的1234H 地址读取一个字节的数据 ADD AL,76H MOV ES:[2E0CH],AL ;将读取的数据加上76H 后写到存储器的2E0CH 地址 如果将普通的SRAM换成双端口SRAM,则CH365 可以通过双端口存储器与外部的单片机或者DSP 交换数据。如果将CH365 的读写选通脉冲的宽度设定为30nS,并且使用双字为单位进行数据交换, 则数据传输的实测速度可以达到每秒7M字节。 9.3. 连接扩展ROM(上图右边的电路) CH365通过MEM_RD与ROM芯片U3(型号是27C512)连接。CH365支持EPROM和闪存Flash-Memory, 容量为32KB或者64KB,如果将SYS_EX用于A16地址线,则最大容量可达128KB。一般情况下CH365 直接支持32KB 容量的扩展ROM(即27C256 芯片的容量),但可以在扩展ROM 的程序中通过控制A15 地址线支持64KB 容量的ROM 芯片。可选的下拉电阻R1 用于CH365 的工作模式设定,图中的数据线 D0 被连接了下拉电阻,所以系统复位后,地址线A15为低电平,从而选择U3的低32KB(偏移地址为 0000H~7FFFH),而在需要读取U3的高32KB时(偏移地址为8000H~0FFFFH),可以通过写芯片控制 寄存器的位0 重新设定A15 地址线,SYS_EX 用于A16 地址线时与A15 的用法类似。另外,PCI 扩展 ROM 的内容通常被BIOS复制到RAM内存中,所以需要设置CH365的扩展ROM基址以重新映射U3到存 储器空间。CH365的A15引脚不仅能用作地址线,还可以自由控制,例如在需要同时连接SRAM和ROM 时,通过A15 切换两者的片选。 PC 机中的扩展ROM 相当于一个电子盘,如果在其中写入引导程序和应用程序,即使计算机没有 硬盘和操作系统,扩展ROM中的引导程序和应用程序也能够控制计算机实现某些特定的功能。例如, 无硬盘PC 机用于工业控制,控制外部设备及作业流程等。 9.4. 连接两线串口的EEPROM(下图左边的电路) CH365的SCL信号线可以选用SYS_EX或者A15,系统复位后的默认选择是A15,通常在A15 用作 地址线时选用SYS_EX,否则选用A15。因为SDA 信号线同时是数据线D7,为了防止在SCL 高电平期 间由于SDA变化而产生不必要的误操作,通常借助于工作模式设定使SCL信号线(SYS_EX或A15)在 系统复位后保持低电平。 CH365的两线串行接口使用7位设备地址,可以同时连接多个设备。设备地址和命令寄存器的位 7 至位1 为7位设备地址位,用以选择从设备;位0为命令位,置0 代表写操作,置1 代表读操作。 例如CH365 连接了两个24C02芯片,下表是从一个芯片读和向另一个芯片写的操作步骤。
CH365中文手册(一) 13 操作的步骤 从12H 地址读 向34H 地址写 说明 查看24C02 的A2-A1-A0引脚 A2-A1-A0=000 A2-A1-A0=010 实际的设备地址 设备地址和命令寄存器 写入10100001 写入10100100 设备地址和命令 地址设定寄存器 写入12H 写入34H 设定操作地址 数据存取寄存器 无操作 写入56H 写入数据56H 控制和状态寄存器 将位0 置为1,其它位不变 开始接口操作 控制和状态寄存器 等待位0 变为0 或者等待10mS 等待操作完成 数据存取寄存器 读出78H 无操作 读出数据78H 基于CH365的通用驱动程序WDM和动态链接库DLL,上述操作的C 语言程序是: UCHAR mByte; // 数据单元,用于保存从24C02 中读出的数据或者准备写入的数据 CH365ReadI2C( 0x50, 0x12, &mByte ); // 从A2-0=000的24C02 的12H 地址中读取一字节 CH365WriteI2C( 0x52, 0x34, 0x56 ); // 向A2-0=010的24C02 的34H 地址写入56H 数据 9.5. I/O端口应用(上图右边的电路) 读选通/使能IOP_RD和写选通/使能IOP_WR控制74LS139的译码使能,74LS139将地址译码输出 2 路读控制和2路写控制,经过74LS245输入缓冲和74LS374 锁存输出,获得2组每组8位缓冲输入 和2 组每组8位锁存输出。例如,CH365的I/O 基址被设定为5A00H,则读取5A00H 端口就是读取第 一组缓冲输入,写入5A01H端口就是写入第二组锁存输出。如果CH365没有连接扩展ROM 或者存储器, 则空闲的地址线A14~A10以及A15可以直接作为输出控制线使用。A15-A8地址设定寄存器在系统复 位后A14~A10 为低电平,A15 在复位期间为低电平,复位后则由工作模式设定,默认为高电平,除 非系统复位时数据线D0被下拉,由工作模式设定为低电平。 CH365 的输入和输出信号与TTL 电平和CMOS 电平兼容,可以连接ADC/DAC/MCU等芯片,输出引 脚的驱动电流大于5mA,可以在串接限流电阻后直接驱动LED 显示。CH365提供了8 根地址线A7~A0 用于I/O 地址译码,有效偏移地址范围是0EFH~00H,长度不超过240 字节,一般情况下,外部电路 可以无需片选线或者直接强制片选。 基于CH365 的通用驱动程序WDM和动态链接库DLL,上述操作的C 语言程序是: UCHAR mByte; // 数据单元,用于保存从I/O 端口中读出的数据或者准备写入I/O 的数据 mPCH365_IO_REG mIoBase; // I/O 端口基址,实际数据单元的地址等于基址加上偏移地址 CH365GetIoBaseAddr( &mIoBase ); // 获取I/O 端口的基址,这是可选操作,不必执行, // 如果不获取I/O基址则可以在I/O 操作中只指定偏移地址,相当于I/O 基址为0, // 在调用CH365的DLL后,DLL会自动将偏移地址加上基址再进行I/O 操作, // 存储器与此类似,如果存储器操作中只指定偏移地址,则DLL 会自动加上存储器基址
CH365中文手册(一) 14 CH365ReadIoByte( & mIoBase -> mCh365IoPort[0x00], &mByte ); // 上述操作从I/O端口的00H偏移地址读取一个字节的数据,即读入第一组缓冲输入 CH365WriteIoByte( & mIoBase -> mCh365IoPort[0x01], 0x47 ); // 上述操作将数据47H写到I/O端口的01H 偏移地址,即作为第二组锁存输出 CH365SetA15_A8( 0x24 ); // 设置A13 为高电平,A10 为高电平,其余引脚为低电平 在DOS 下或者没有操作系统的PC机中,上述操作的汇编程序是: MOV AX,0B109H ;以字为单位读取PCI 配置空间 MOV BX,CH365_PCI_BUS_DEV_ADDR ;CH365 板卡的PCI 地址,即总线/设备/功能号 MOV DI,0010H ;I/O 端口基址寄存器的偏移地址PC_BASE_ADDR0 INT 1AH ;读取I/O 端口的基址,由计算机初始化时自动设置 AND CX,0FFFEH ;获得I/O 端口的基址,最低位为指示位,要屏蔽掉 MOV BX,CX ;该值为I/O 端口的基址 LEA DX,[BX].CH365_IO_PORT[0] ;第一组缓冲输入的I/O 端口地址,I/O 基址加0 IN AL,DX ;读取74LS245 缓冲输入的数据 LEA DX,[BX].CH365_IO_PORT[1] ;第二组锁存输出的I/O 端口地址,I/O 基址加1 MOV AL,47H OUT DX,AL ;将数据47H 写入74LS374 锁存输出寄存器 LEA DX,[BX].CH365_MEM_ADDR_H ;A15-A8地址设定寄存器的I/O 端口地址,在CH365 内部 IN AL,DX ;为了保持其余引脚的状态,先读取原A15-A8地址 OR AL,20H ;仅将A13 置为高电平,而其余引脚保持不变 AND AL,0F7H ;仅将A11 置为低电平,而其余引脚保持不变 OUT DX,AL ;将新的A15-A8写入地址设定寄存器 CH365 的I/O 端口具有与存储器相同的数据传输速度,只是PC 机在I/O 空间的指令少于在存储 器空间的指令。一般情况下,外部设备可以将控制和状态等寄存器单元映射到I/O空间,而将数据块 交换缓冲区映射到存储器空间。 9.6. 连接单片机等 PC 机通过CH365与单片机或者DSP进行双向数据传输,可以使用四种方式:一是使用双口SRAM, 让CH365 和单片机能够读写同一块存储器,以大数据块为单位进行双向数据交换;二是使用双向缓冲 接口芯片CH421,分别为CH365写单片机和单片机写CH365 提供64字节的缓冲区,以64字节的数据 块为单位进行双向数据交换;三是使用8255 提供的异步数据交换,以一个数据字节为单位进行双向 数据交换;四是以半字节或者位数据交换为主的低速传输,不需要增加额外的硬件成本,例如使用软 件配合的4 位数据交换接口、CH365本身提供的两线串行接口、使用软件模拟的SPI 接口等。 9.6.1. 带握手信号的异步数据交换(下图) 常用的I/O 扩展芯片8255,如果A 口工作于方式2,则可以在CH365 和单片机之间提供标准的 带握手信号的以字节为单位的异步数据交换。在电路连接上,如果8255 的A 口连接CH365,则由单 片机对8255 进行控制;如果8255 的A 口连接单片机,则由PC 机通过CH365 对8255 进行控制。当 8255 的A 口工作于方式2 时,可以向CH365 和单片机提供输入缓冲区空/满,输出缓冲区空/满等握 手信号以及中断信号。 图中U21(82C55A)的A 口连接单片机U22(89C51),地址线A15 用于复位U21,在计算机应用 程序中将U21 的A口设置在方式2,单片机的中断是低电平触发。 当计算机向单片机写数据后,其写操作使-OBF 变为低电平,U22 进入中断程序;当单片机在中 断程序中读取数据后,其读操作-ACK使-OBF恢复为高电平;计算机程序查询到-OBF的状态,从而可 以再次向单片机写数据。 当单片机向计算机写数据后,其写操作-STB使IBF变为高电平;如果启用了CH365 的中断功能, 则-STB 向SYS_EX输出的低电平脉冲使计算机进入中断服务程序,如果未启用中断功能,则计算机程 序使用查询方式检查IBF 的状态;计算机程序查询到IBF 的状态并读取单片机的数据,其读操作使 IBF 变为低电平;单片机查询到IBF的状态,从而可以再次向计算机写数据。
CH365中文手册(一) 15 9.6.2. 使用双向缓冲接口芯片CH421 CH421能够提供CH365与单片机的快速连接,详细内容请参考CH421 芯片手册。 9.7. I/O端口扩展(可以参考上图,将上图中U22 去掉) CH365可以直接连接大多数常用的I/O端口扩展电路,图中用U21 进行I/O 扩展。由于早期8255 的读写速度在300nS以上,而后期82C55A的读写速度可以达到200nS以下,所以U21应该选用82C55A 型号。8255 的端口地址被定位于偏移地址00H~0EFH,实际上只用到00H~03H 地址,其余都是别名 地址。8255 可以将 8 位数据线扩展为3 个8 位的数据端口,例如,向偏移地址03H 写入控制字 10010000B,则将U21的PA端口设置为8 位输入,将PB端口以及PC端口设置为8 位输出。 基于CH365 的通用驱动程序WDM和动态链接库DLL,上述操作的C 语言程序是: UCHAR mByte; // 数据单元,用于保存从I/O 端口中读出的数据或者准备写入I/O 的数据 mPCH365_IO_REG mIoBase = NULL; // I/O 端口基址,设定为0 则DLL 会自动加上基址 CH365ReadIoByte( & mIoBase -> mCh365IoCtrl, &mByte ); // 先读取芯片控制寄存器 CH365WriteIoByte( & mIoBase -> mCh365IoCtrl, mByte | mBitAddr15Out ); // A15=1 CH365WriteIoByte( & mIoBase -> mCh365IoCtrl, mByte & ~ mBitAddr15Out); // A15=0 // 上述3个操作控制A15引脚输出高电平脉冲,从而复位U21(82C55A) CH365WriteIoByte( & mIoBase -> mCh365IoPort[0x03], 0x90 ); // 10010000B // 上述操作设置8255的控制字,PA 输入,PB/PC 输出 CH365ReadIoByte( & mIoBase -> mCh365IoPort[0x00], &mByte ); // 上述操作从8255的PA输入数据 CH365WriteIoByte( & mIoBase -> mCh365IoPort[0x01], 0x8E ); // 上述操作向8255的PB输出数据8EH 9.8. 其它辅助功能 9.8.1. 硬件循环计数寄存器 CH365 提供了宽度为一个字节的硬件计时单元,以PCI 总线主频的128 分频为计时输入,对于 PCI 总线的标准33.3MHz主频,硬件循环计数寄存器每隔3.84uS 增加一个计数,从00H 计数到0FFH 再循环到00H 共需要983.04uS。通过比较前后两次读取的计数的差值,可以计算出实际延时,用来 代替误差较大的计算机软件指令循环。 9.8.2. 8位总线输入端口 CH365 在PCI设备配置空间提供了8位总线状态输入端口,读取该端口时I/O和存储器的读写选
CH365中文手册(一) 16 通控制线都不会输出信号,所以能够读取当前本地数据总线D7~D0的静态数值。如果数据总线的D6 引脚上连接了下拉电阻,则读出的数据的位6 为0,否则为1。一般该功能用于应用程序识别板卡的 功能或者扩展ROM中的引导程序读取该板卡的外部配置信息,例如,D6和D7下拉代表某种配置方式, 仅D6 下拉又代表另一种配置方式,应用程序或引导程序可以据此作出区别。 9.9. 硬件中断 CH365 支持低电平有效的中断请求,如果数据线D3 连接下拉电阻,则工作模式设定为启用中断 功能,SYS_EX引脚复用为INT_REQ,作为本地中断请求输入引脚。 当INT_REQ引脚检测到低电平后,CH365的中断激活状态位(即芯片控制寄存器的位2)自动设 置为1,CH365通过PCI_INTA引脚向PCI总线申请中断。此时即使INT_REQ引脚再恢复为高电平,CH365 依然保持在中断激活状态,直到PC 机的CH365 中断服务程序将CH365 的中断激活状态位清除为0。 但是,如果清除中断激活状态位后INT_REQ引脚仍然检测到低电平,则CH365再次进入中断激活状态。 如果PC 机程序以软件方式将CH365 的中断激活状态位设置为1,也可以使CH365 进入中断激活 状态,从而向PCI总线申请中断。这样的软件中断与由外部INT_REQ低电平导致的硬件中断具有完全 相同的特性,可以用于测试CH365的中断功能。 详细说明请参考CH365评估板资料中的《CH365 中断功能说明》,标准的中断过程如下: ① 外部电路向INT_REQ输出低电平有效的中断请求信号,导致CH365 的中断激活位变为1。如 果外部电路提供的是低电平脉冲,则脉冲宽度必须大于TINT。 ② CH365 通过PCI总线的INTA信号向PC机申请中断。 ③ PC 机进入CH365的中断服务程序。 ④ 如果外部电路提供的中断请求不是脉冲信号,则中断服务程序应该通知外部电路撤消中断 请求,也就是将INT_REQ恢复为高电平。 ⑤ 中断服务程序将CH365 的芯片控制寄存器的中断激活状态位清除为0,CH365 的PCI_INTA 引脚恢复为高阻状态,撤消了对PC机的中断请求。 ⑥ 中断服务程序进行必要的中断处理,该步骤也可以在进入中断后先执行。 ⑦ 中断处理完毕,PC机退出CH365 的中断服务程序。 9.10. 本地硬件定址与升级ISA(适合升级ISA 总线的I/O 板卡) 通常情况下,PCI设备的I/O基址是由计算机初始化时自动分配的,一方面保证了一些专用I/O 地址不会被随意占用,另一方面保证了多个设备的I/O地址不会冲突。与ISA板卡的I/O 地址可以灵 活使用不同,PCI总线规范没有提供一种由产品制造商确定板卡I/O地址的方法,这样在一些特殊应 用中就会有些不方便:第一是在不同类型的计算机上,同一种PCI板卡被自动分配的I/O 地址可能不 同;第二是在计算机初始化并且尚未分配I/O 地址前,板卡无法工作;第三是自动分配的I/O地址都 在1000H 地址以上,而不能定位到3FFH至000H地址范围以及专用的I/O地址;第四是将ISA板卡直 接升级到PCI总线时,需要修改应用程序,以便在I/O 操作前先获取I/O 端口的基址。 CH365提供了一种可以由产品制造商选定PCI 设备I/O地址的方法,即本地硬件定址,其原理是 将PCI 设备的部分I/O 地址译码通过外围的二级译码电路实现。外围的二级译码电路比较简单,与 ISA 总线的I/O 地址译码类似,CH365 将PCI 总线I/O 操作的地址同步提供给外围电路,当外围电路 对地址译码匹配后,向CH365请求本地硬件定址,再由CH365 请求PCI 总线在该地址进行I/O操作。 以PC 机的基于PCI总线的故障诊断卡(Debug Card或Post Card)为例,PC机在自检过程中不 断地向0080H 地址的I/O 端口输出故障代码(Post Code);但由于PC 机在完成大部分自检过程后才 为PCI 设备分配I/O地址,所以常规的PCI板卡无法捕捉到之前的故障代码;即使在分配了I/O地址 之后,常规的PCI板卡也无法定位到专用I/O 地址0080H。 下图是使用CH365 制作的故障诊断卡的部分电路。电阻R7 用于工作模式设定,数据线D4 被下 拉,设定值是11101111,CH365 将复用引脚MEM_WR 设定为本地硬件定址请求输入信号线IOP_HIT。 比较器U11(可用74F138 实现),用于对地址A9~A1 进行匹配比较,当CH365 提供的地址与预设地 址值0080H~0081H相同时,U11输出低电平。CH365接收到本地硬件定址请求后,输出有效的IOP_RD 读取数据,或者输出有效的IOP_WR 写出数据。对于故障诊断卡,只需要接收I/O 数据,数据触发器
CH365中文手册(一) 17 U12 将故障代码锁存,由字符译码电路U13 和U14 译码后显示在数码管上。 CH365 内部已经限定本地硬件定址的地址范围是03FFH至0000H,对应于ISA板卡的I/O地址范 围。当PC机进行I/O操作时,CH365的A9~A0总是同步输出操作地址,外围的二级译码电路只需要 对地址A9~A0 进行匹配比较。CH365 要求外围的二级译码延时不超过20nS,也就是说,外围电路对 地址译码比较后产生本地硬件定址请求的时间不能超过20nS。上图以等值比较器74ALS688说明功能, 实际的外围译码电路通常选用可编程器件16V8或者译码器74F138,16V8建议使用15nS速度。 下图左边的电路是用TTL 逻辑电路实现的二级译码电路,由于TTL 逻辑电路的速度较低,译码 时间可能超过 20nS,所以该图仅用于功能说明和逻辑说明,实际电路建议采用右边的电路,使用简 单的可编程器件进行二级译码。 U18 对CH365提供的A9~A4进行译码,产生8 个长度为16字节的I/O 地址区域。如果原ISA板 卡占用270H~27FH地址,则将U18的Y7引脚直接连接到CH365的IOP_HIT引脚。当PC机在270H~ 27FH 地址范围进行I/O操作时,IOP_HIT就会被U18置为低电平,CH365在IOP_RD和IOP_WR引脚输 出读写选通信号,外部电路根据读写信号与计算机交换数据,当然外部电路还可以进一步对A3~A0 进行地址译码。 实际电路建议使用一个可编程器件U20(型号GAL16V8)进行二级译码,电路简洁并且使用方便。 一般情况下,16V8 在完成二级地址译码后还有剩余的资源(1 脚输入、11脚输入、15脚至19脚输出), 可以用作其它功能,例如,作进一步地址译码,将低位地址与IOP_RD和IOP_WR组合后进行I/O 端口 选择译码,产生片选信号CS1~CS5等。 另外,使用本地硬件定址功能后,CH365不仅在硬件定址范围响应I/O 操作,同时也在计算机自 动分配的I/O 地址范围内响应I/O 操作。例如,硬件定址为240H~247H,PC 机自动分配的I/O 地址 范围为C000H-C0FFH,则操作240H地址等于操作C000H 地址,读写247H地址等于读写C007地址。 基于CH365 的本地硬件定址功能,产品制造商可以很方便地将原有的ISA 板卡直接升级到PCI 总线上,并且仍然可以使用ISA板卡的原有I/O 端口地址,从而不需要对应用程序作任何修改。 9.11. 设定PCI设备ID 一般情况下,PCI 板卡直接使用CH365 芯片的默认设备ID。如果产品制造商需要设定为自己的 设备ID 或者专用的设备ID,可以在系统复位后将数据线D1 下拉,对CH365 进行工作模式设定,使 之工作于外部ID模式,并由外围电路提供新的设备ID。 当设定工作模式而使CH365 使用外部ID 后,CH365 配置空间中寄存器属性为S 的所有单元,都
CH365中文手册(一) 18 将被直接映射到以0040H 为起始地址的本地存储器中,也就是说,配置空间3FH~00H 地址对应本地 存储器的7FH~40H 地址。例如,读取配置空间的00H 地址就是读取本地存储器的0040H 地址;读取 配置空间的2CH 地址就是读取本地存储器的006CH 地址;如果将本地存储器的0043H~0040H 地址的 数据设定为12345678H,则该PCI 板卡的厂商标识(Vendor ID)为5678H,设备标识(Device ID) 为1234H;同理,可以在存储器的006FH~006CH地址设定PCI 板卡的子系统标识(Subsystem ID)。 提供新的设备ID的本地存储器包括扩展ROM以及其它具有只读属性的存储器。对于支持扩展ROM 的PCI 板卡,可以直接将PCI设备ID设置在ROM芯片的007FH~0040H地址,而不必再增加任何外围 器件。如果PCI板卡本身不需要扩展ROM,但又需要设定PCI 设备ID,则有两种方法:一种方法是增 加一个额外的ROM芯片,仅用于提供新的PCI 设备ID,而不作为扩展ROM;另一种方法是参考下图的 电路,使用简单的可编程器件(例如16V8等)模拟ROM 芯片,向CH365 提供新的PCI 设备ID。 下图中U16 在MEM_RD 为高电平时,三态输出禁止;在MEM_RD 低电平有效时,输出与地址A7~ A0 相关的数据。例如,在MEM_RD 低电平有效时,如果A7~A0 为48H 则输出PCI 板卡的芯片版本号 (Revision ID),如果A7~A0为49H则输出PCI 板卡的设备主分类代码(Class Code)。 9.12. 通过I/O读写存储器 一般情况下,CH365的本地存储器被映射到计算机的存储器空间,读写本地存储器是在存储器空 间进行的,为了支持较大容量的扩展ROM 或者存储器,以及便于在DOS下操作寻址,CH365还提供了 一种将存储器空间转向I/O空间的方法,适用于容量较大的扩展ROM和数据存取比较有序的存储器。 该方法直接支持64KB容量的存储器或者扩展ROM。通过I/O 读写存储器空间的步骤见下表。 寄存器 寄存器操作 读数据程序(ASM) 读数据程序(C/C++) A15~A0 地址设定 寄存器 写入起始地址 mov dx,PORT_ADDR mov ax,START_ADDR out dx,ax outport (PORT_ADDR, START_ADDR); 存储器 数据存取 寄存器 顺序读写数据 地址自动增加 mov dx,PORT_DATA mov di,BUFFER_ADDR mov cx,LENGTH rep insb int i; char buf[LENGTH]; for (i=0; i<LENGTH; ++i) buf[i]=inportb(PORT_DATA); 程序中用到的常量和变量: PORT_ADDR代表A15-A0地址设定寄存器的端口地址(即:I/O 基址+0F0H); PORT_DATA代表存储器数据存取寄存器的端口地址(即:I/O 基址+0F3H); START_ADDR 代表要存取的数据在扩展ROM 或者存储器中的起始地址; LENGTH代表要存取的数据的长度,也就是字节数; BUFFER_ADDR 代表存放读出数据的缓冲区的起始地址;buf 为数据缓冲区。