利用USB控制器设计的Windows音量控制器
由TCDl208AP的时序图可以看出,TCDl208AP采用二相驱动脉冲工作,时序脉冲驱动电路提供4路工作脉冲,即光积分脉冲SH,电荷转移脉冲φ1、φ2,输出复位脉冲RS。系统提供的主时钟频率CLK为4 MHz,设定数据输出频率为1 MHz。TCDl208AP的典型最佳工作频率为l MHz,该器件具有2160位有效像元,正常工作时要有52个虚设单元输出(DUMMY 0UTPUTS)信号(含暗电流信号)。因为该器件是二列并行传输,所以在一个周期内至少要有1 106(2 212/2=1 106)个φ1脉冲,即TSH> 当Windows识别并进行USB枚举后,为了得到上述格式的单字节响应,操作系统开始向终端3IN发送周期性IN请求。该部件监控旋转控制的变化情况,并且当有动作(如音量增加)请求时发送通信数据;没有动作请求时,该固件返回0值。 5 完善代码
MAX3420E简化了USB修改过程,SPI主控器(即ATtiny13)将报告数据字节写入EP3INFIFO(endpoint 3 IN FIFO)的寄存器。然后SPI主控器将数值1写入EP3INBC(endpoint3IN byte count)寄存器,表示为了响应USB的下一个IN请求,将会传送1个字节。传送发生后,MAX3420E产生中断请求,表明下一个字节的数据可以写入EP3INFIFO了。
下面是完整的传送程序。可以将音量控制器的HID信息传送给PC机。看似非常简单,但是该编码却包含了很多的HID控制页面。剩余的代码实现代码循环。该循环会检测旋转控制器,然后点亮发光二极管。对任意USB外围器件来说,USB样板文件代码需要进行内部处理。这个样板文件代码控制着器件的枚举、悬挂、恢复以及USB总线置零等命令。
Send_byte:
idi MAX_Reg,rEP3INFIFO
mov MAX_Dat,audio_flags
clr audio_flags
rcall wreg
idi MAX_Reg, rEP3INBC
mov MAX_Dat,1
rjmp wreg
4 读取旋转控制
旋转编码器用格雷编码端子A和B分别表示顺时针和逆时针旋转。旋转控制器与MAX3420E上有内置上拉电阻的GPIN引脚相连。图2显示的是左旋和右旋时的开关转接状态。锁定位置状态1和3是控制停止位置。控制器经过1个或3个状态后,可到下一个锁定位置。该固件只需对旋钮旋转进行译码,就可以实现向锁定状态1和3的转换。例如,实现右旋状态转换需要由3到1或由2到3。
图2 旋转编码器的开关连接状态
ATtiny13有512字长的程序存储空间。编码需要完成以下几项工作: 首先要对设备进行枚举。这一步包括对MAX3420主控制器的各种类型的"获取描述符"请求进行解码,对对应的表数据进行定位以及对终端零值FIFO进行数据写入,以将其传送至固件。
编码时也应该为随时发生的USB总线置0以及USB总线的悬挂和恢复进行测试。必须对旋转控制位置和按钮开关状态进行周期性读取和译码。当主机接受了由EP3IN传来的用于发送HID控制数据的信息包后,该代码还必须为下一次的IN传送进行终端的数据加载,并为下一次的数据传输表明控制端点。
为了减小代码量,设计过程中采用下面的方法: 第一,省去了可选择性USB串描述符。这些描述符是描述诸如供应商、器件类型等的文本串。这些字符串只是信息性质的,对USB外围器件的操作来说,没有任何价值。第二,没有使用可选择性USB遥控唤醒部分。这个部分实现起来并不困难(MAX3420E会承担这项工作的绝大部分),但是却会占用码字空间。第三,没有把HID报告的描述符写入程序闪存器,而是写入EEPROM。ATtiny13有64字节的EEPROM,可以写入该EEPROM的任意表数据,都会保存在程序闪存器中。
6 写入代码
如果只用图符方式进行此项设计,那么可以用6引脚的J2连接AVRISP2在线程序设计器来下载这些程序模块。如果想要研究或修改该代码,也可以把ATJTAGICE2ND(用于AVR系列的完全在线仿真器)连接到J2上。不管使用哪种下载方式,都不要忘记把HEX文件(闪存器代码)和EEP模块(EEPROM数据)都写进去。
7 总结[2]
现在的电子应用中,USB接口几乎已经取代了串行接口成为PC机上接口连接的首选。本设计表明:虽然USB比串行端口更为复杂,但是USB连接却并不需要更多的代码或者昂贵的微处理器。代码的绝大部分是USB样板文件,因此可以在多项设计中重复使用它。另外,USB有巨大的优势:从电缆中获取电源,自动的"握手"和错误检测以及可以进行热插拔。如果想要保留已有的MCU和工具,可以采用诸如MAX3420E那样的基于SPI的USB控制器来搭建USB外围电路。
参考文献
[1] Maxim公司.MAX3420 datasheet,2005-09-26.
[2] 张弘.USB接口设计[M].西安:西安电子科技大学出版社,2002.
[3] 卢珞.罗婷. 基于SPI的USB控制器接口设计[J]. 单片机与嵌入式系统应用,2006(12): 41-45.
于蕾(讲师),主要研究方向为电子电路系统设计。
- USB设备的调试与测试技巧(11-11)
- USB系统结构与应用设计(01-18)
- 基于C8051F320 USB接口的数据采集存储电路(01-18)
- 基于USB的CAN总线适配器设计(01-21)
- 带USB接口的短信收发最小系统设计(01-23)
- 基于USB总线和Aduc831单片机的数据采集系统的设计(01-25)