USB总线接口芯片CH371及其应用_接口电路论文
关键词: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脚封装 的引脚号 | 引脚名称 | 类 型 | 引 脚 说 明 |
28 | 24 | vcc | 电源 | 电源正端 |
12 | 9 | gnd | 电源 | 接地 |
14 | 11 | xi | 输入 | 晶体振荡输入端,带偏置电阻 |
13 | 10 | xo | 输出 | 晶体振荡反相输出端 |
10 | 7 | d+ | 双向 | usb d+数据线,内置上拉电阻可控 |
11 | 8 | d- | 双向 | usb d-数据线 |
9 | 6 | off | 输入 | 用于关闭d+上位电阻,高有效,带下拉 |
2215 | 1912 | d7d0 | 双向 | 8位双向数据总线,带上拉,可直接输入和独立控制输出 |
4 | 4 | rd | 输入 | 读选通输入,低有效,带上拉,同时用于看门狗的清除输入 |
3 | 3 | wr | 输入 | 写选通输入,低有效,带上拉 |
27 | 23 | cs | 输入 | 片选输入,低有效,带下拉 |
2 | 2 | ale | 输入 | 地址锁存使能,高有效,带上拉,在下降沿可锁存数据总线的复用地址 |
1 | 1 | int | 输出 | 中断输出,传输成功,低有效 |
58 | 5部分支持 | a3a0 | 双向 | 4位地址输入线,带上拉,可直接输入和独立控制输出 |
24 | 21 | scl | 输出 | i2c接口时钟线 |
23 | 20 | sda | 双向 | i2c接口数据线,开漏输出,带上拉 |
25 | 22 | rst | 输出 | 上电复位和看门狗复位,高有效 |
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产品设计中大显身手。