学海荡舟手机网

主页 > 实用文摘 > 教育文摘_18 > > 详细内容

USB总线接口芯片CH371及其应用_接口电路论文

摘要:ch371是一种新型usb通用总线接口芯片。利用该芯片可在不了解任何usb协议或固件程序甚至驱动程序的情况下,轻松地将并口或串口产品升级到usb接口。文中介绍了该接口芯片的主要特点和引脚功能,给出了ch371与其它总线进行接口的几种应用电路,同时给出了ch371与mcs-51单片机的接口程序。

    关键词:usb  总线接口芯片  ch371  单片机

1 引言

ch371是一种usb总线通用接口芯片。该芯片具有8位数据总线以及读、写、片选控制线和中断输出,可以方便地挂接到单片机、dsp、mcu等控制器的系统总线上;在计算机系统中,通过ch371的配套软件可提供简洁易用的操作接口,从而使其与本地端的单片机通讯就如同读写硬盘中的文件一样简单。由于ch371屏蔽了usb通讯中的所有协议,因而可在计算机应用层与本地端控制器之间提供端对端的连接。在不需要了解任何usb协议或者固件程序甚于驱动程序的情况下,就可轻松地将并口、串口产品升级到usb接口。

    ch371的主要特点如下:

●屏蔽了usb协议,可在计算机应用层与本地端之间实现端对端的连接。

●具有单向数据流和请求加应答两种通讯模式,并支持伪中断。

●可自动完成usb配置过程,完全不需要本地端控制器作任何处理。

●采用标准的usb1.1接口,即插即用,d+引脚内置上接电阻。

●内置4个端点,支持usb的控制传输、批量传输、中断传输。

●带有通用windows驱动程序,可提供设备级接口和应用层接口。

●具有通用本地8位数据总线,可用4线控制读选通、写选通、片选输入和中断输出。

●占用16个地址,可选择直接地址方式或者复用地址方式。

●内置输入输出缓冲区,能以中断方式通知本地端控制器传输数据。

●内置i2c主接口,因而应用层可以直接读写外挂的i2c从设备。

●在主控方式下可以提供16根据输入信号线或12根独立控制的输出信号线。

●内置上电复位电路,可提供高电平有效复位输出和低电平有效复位输出。

●内含可选的看门狗电路watch-dog,能为本地端控制器提供监控。

●具有dip28、sop28、dip24、chip等多种封装形式。

2 引脚功能

ch371的引脚排列如图1所示,表1所列是其引脚功能。

表1 ch371的引脚功能

28脚封装
的引脚号
24脚封装
的引脚号
引脚名称类  型

引  脚  说  明

2824vcc电源电源正端
129gnd电源接地
1411xi输入晶体振荡输入端,带偏置电阻
1310xo输出晶体振荡反相输出端
107d+双向usb d+数据线,内置上拉电阻可控
118d-双向usb d-数据线
96off输入用于关闭d+上位电阻,高有效,带下拉
22151912d7d0双向8位双向数据总线,带上拉,可直接输入和独立控制输出
44rd输入读选通输入,低有效,带上拉,同时用于看门狗的清除输入
33wr输入写选通输入,低有效,带上拉
2723cs输入片选输入,低有效,带下拉
22ale输入地址锁存使能,高有效,带上拉,在下降沿可锁存数据总线的复用地址
11int输出中断输出,传输成功,低有效
585部分支持a3a0双向4位地址输入线,带上拉,可直接输入和独立控制输出
2421scl输出i2c接口时钟线
2320sda双向i2c接口数据线,开漏输出,带上拉
2522rst输出上电复位和看门狗复位,高有效
26不支持rst输出上电复位和看门狗复位,低有效

3 应用

3.1 与usb总线的连接

图2是ch371与usb总线的接口连接电路,ch371芯片可以直接使用usb总线的5v电源。电容c3和c4用于电源退耦;将电阻r1和r2串接在ch371与usb总线之间可进行阻抗匹配;晶振x1、电容c1和c2用于ch371芯片的时钟振荡电路。ch371芯片的scl和sda信号线可以直接连接i2c接口的从设备,如连接24cox器件以用来存储系统断电后不能丢失的重要数据,也可以存储身份识别数据、记费数据等,由于24cox中的数据只有计算机应用层才能够存取。

3.2 与单片机的接口电路

ch371芯片具有通用的被动并行接口,可以直接连接多种单片机、dsp和mcu。图3所示是ch371与mcs-51系列单片机的接口电路,ch371可通过d7~d0、rd、wr、cs、ale直接挂接到at89c51的系统总线上。连接ale而不连接a3~a0则采用复用地址方式,连接a3~a0而不连接ale则采用直接地址方式。当采用复用地址方式时,ch371的a3~a0脚空闲,此时可以参考主控方式将a3~a0用于led驱动或状态输入等;当采用直接地址方式时,应该将ch371芯片的ale引脚悬空或者接高电平,然后通过a3~a0直接输入地址。该电路中,ch371可向at89c51提供上电复位信号rst。ch371的中断输出int连接到u2的外部中断into,反相器u5用于简单的地址译码,sram器件62256的地址为8000h-ffffh,ch371的地址为0000h-7fffh(实际只需要16个地址)。

    3.3 主控方式应用

图4是ch371在主控方式下的应用电路。该电路实际是基于ch371的主控方式设计的8通道数据采集器。可以看出:包括ch371在内,该电路只用到了三个集成电路,并且不需要任何单片机、dsp、mcu等控制器。ch371芯片的双向引脚a3~a0应该设置为输出,其中a3用于以低电平启动模数转换,a2~a0用于选择采集通道,双向引脚d7~d0应该设置为输入,用于输入采集到的结果,cs、ale用于输入采集状态。实际电路应该采用精确的参考电压,并添加辅助电路(如电源退耦电容等)。另外,也可以用自带多通道选择器的模数转换芯片来代替u6和u7,如8通道ad芯片max158等。

3.4 与单片机的接口程序

下面是u2(mcs-51单片机)与u1(ch371)的接口参考程序:

;* * * * * * * * * * * * * * * * * * * * *

;需要主程序定义的参数

;ch371_page equ 00h;ch371所在的页面地址,地址译码后自动片选

;ch371_system equ 02h;ch371系统功能设定寄存器的地址偏移

;ch371_config equ 02h;ch371设备配置寄存器的地址偏移

;ch371_int_set equ 06h;ch371中断数据设定寄存器的地址偏移

;ch371_status equ 06h;ch371传输状态寄存器的地址偏移

;ch371_length equ 07h;ch371数据长度寄存器的地址偏移

;ch371_buffer equ 08h;ch371o数据缓冲区的起始地址偏移

;save_status data 29h;保存传输状态,根据需要可选

;save_length data 2ah;当前数据缓冲区中的长度,用于保存下传长度

;save_buffer data 30h;数据缓冲区,用于保存接收到的下传数据

;* * * * * * * * * * * * * * * * * * * * *

;初始化子程序

;use:acc,dptr

ch371_init:mov dph,#ch371_page

;ch371所在的页面地址,地址译码后自动片选mov dpl,#ch371_length;ch371数据长度寄存器的地址偏移

图3

    mov a,#ofh

movx @dptr,a;置上传数据长度寄存器为15,暂时没有数据上传

clr a;尚未有数据下传

mov save_length,a;保存下传数据长度

setb ito;置外部信号为下降沿触发

clr ieo;清中断标志

setb pxo;置高优先级

setb exo;允许中断

ret

;上传数据子程序

;entry:ro指向存放了准备上传数据的缓冲区,r7准备上传的数据长度0至8

;use:acc,b,r0,r7,dptr

ch371_upload:mov b,r7;将数据长度暂存到b中

mov dph,#ch371_page;ch371所在的页面地址,地址译码后自动片选

mov dpl,#ch371_buffer;ch371数据缓冲区的起始地址偏移

mov a,r7;上传数据长度

jz ch371_upload_o;数据长度为0则不必写入

ch371_upload_1:mov a,@ro;读取一字节的数据

inc ro;指向下一个数据的地址

movx @dptr,a;写到ch371的上传数据缓冲区

inc dpl

djnz r7,ch371_upload-1;继续读取上传数据直至结束

ch371_upload_0:mov dpl,#ch371_length;ch371数据长度寄存器的地址偏移

mov a,b

movx @dptr,a;将本次数据的长度置入上传数据长度寄存器

ret

;中断服务子程序

;use:堆栈6字节,工作寄存器组1的ro,r7

ch371_inter:push psw;现场保护

clr ieo;清中断标志,防止重复执行,对应于into中断

push acc

push dpl

push dph

setb rso;psw.3,切换至工作寄存器组1

mov dph,#ch371_page;ch371所在的页面地址,地址译码后自动片选

mov dpl,#ch371_status;ch371传输状态寄存器的地址偏移

movx a,@dptr;读取传输状态寄存器

mov save-status,a;保存传输状态

mov dpl,#ch371_length;ch371数据长度寄存器的地址偏移

jb acc.0,ch371_int_up;传输状态寄存器位0为1,则指示上传完成

;是数据下传完成中断

movx a,@dptr;读取下传数据长度寄存器

mov save_length,a;保持下传数据长度

jz ch371_int_ret ;下传数据长度为0,则直接退出中断

mov dpl,#ch371_buffer;ch371数据缓冲区的起始地址偏移

mov ro,#save-buffer;单片机内部的数据缓冲区,用于存放下传数据

mov r7,a ;用于读取数据的计数

ch371_int_down:movx a,@dptr;读取一字节的下传数据

inc dpl ;指向下一个数据的地址

mov @ro,a;保存到数据缓冲区

inc ro

djnz r7,ch371_int_down;继续读取下传数据直至结束

sjmp ch371_int_ret ;接收完下传数据,退出中断

;是数据上传完成中断

ch371_int_up:mov a,#0fh;15

movx @dptr,a ;置上传数据长度寄存器为15,暂时没有后续数据

ch371_int_ret: ;中断返回

pop dph

pop dpl

pop acc

pop psw ;恢复寄存器并选择工作寄存器组0

reti ;中断返回

;* * * * * * * * * * * * * * * * * * * * *

4 结束语

ch371芯片具有通用的被动并行接口,可以直接连接多种单片机、dsp、mcu等。可以预见,ch371将在usb产品设计中大显身手。