采用CY7C68013A的USB系统固件程序设计
采用CY7C68013A的USB系统固件程序设
计
2007年第4期电子工程33
采用CY7C68013A的USB系统固件程序设计
李文宫,武传华
(解放军电子工程学院,合肥230037)
摘要:在USB系统设计的过程中,编写固件程序是非常重要的一个环节,它直接影
响到开发产品的数据传
输速度.文章以CYPRESS公司的USB外设接口芯片FX2为例,介绍了在设计开发
USB外设中,固件的作用以
及固件程序的编写
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
,并给出了相应的VHDL语言程序.
关键词:USB系统设计;固件程序;单片机;VHDL语言
TheUSBSystemFirmwareProgrammeUsingCY7C68013A LIWen—gong.WUChuan—hua
(ElectronicEngineeringInstitutionofPLA,Hefei230037) Abstract:WritingfirmwareprogramisaveryimportantstepindesigningUSBsystemforitaff
ectingthedatatrans-
missionspeedofproductdirectly.Thispaperintroducestheeectoffirmwareandtheflowofwr
itingfirmwareprogram
indevelopingUSBoutsideequipmentsbytakingFX2ofCYPRESSforanexample,andprovi
dessomerelevantVHDL
programs?
Keywords:USBsystemdesign;firmwareprogram;SCM;VHDLlanguage 1引言
CY7C68013A是Cypress公司推出的一个带
USB2.0内核,8051兼容的EZ—USBFX2单片机.
USB接口技术为外设与主机之间提供了一种高速
的双向数据通道.最新的USB2.0连接速度超过 IEEE1394,因此它被广泛地应用于数据采集,数 据传输,工业控制和消费数码等方面.同时它可 以支持多个不同设备的串联连接,理论上可以连 接127个USB设备,而且连接的方式也十分灵活, 既可以使用串行连接,也可以使用集线器(Hub) 把多个设备连接在一起,再同PC机的USB接口 相连.此外,它还可以从系统中直接汲取电流,无 需单独的供电系统.USB的这些特点使它获得了 广泛的应用.但是使用上的方便则意味着开发上 的复杂,主要是编程的复杂性大大增加了. 在设计开发一个USB外设的时候,开发者主 要需要编写三部分程序:?固件程序(Fireware Process);?USB驱动程序(DriverProcess);?客 户应用程序(ApplicationProcess).本文主要阐述 固件程序的编写.
2固件要完成的工作
固件(Fireware)实际上是单片机的程序文件, 其编写语言可以采用C语言,汇编语言或VHDL 等语言.它的操作方式与硬件联系紧密,包括 USB设备的连接,USB
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
,中断处理等,它不是 单纯的软件,而是软件和硬件的结合,开发者需要 对端口,中断,协议和硬件结构非常熟悉.固件程 序一般放入MCU中,当把设备连接到主机上 (USB连接线插入插孔)时,上位机复位并发现新 设备,然后建立连接.因此,编写固件程序的一个 最主要的目的就是让Windows可以
检测
工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训
和识别设 备.
2.1CY7C68013A芯片特点
EZUSBFX2的独特设计使得CY7C68013A 具有以下特点:
(1)在单片中集成了USB2.0收发器,SIE(串 行接口引擎)和增强的8051微处理器; (2)软件:8051程序从内部RAM运行,程序 可以通过USB总线下载,或者从EEPROM中装 载,或者使用外部存储设备(只支持128管脚的封
电子工程
装);
(3)四个可编程BuLK/INTERuPT/ISOCH— RONOUS端点.缓冲方式有:双缓冲,三倍缓冲和 四倍缓冲;
(4)通用可编程接口(GPIF),可以同大多数 8位或16位并行接口直接连接,具有可编程的波 形描述符和配置寄存器,支持多重RDY输入和 CTL输出;
(5)集成工业
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
的8051内核,具有以下增 强特性:高达48MHz的时钟;每条指令四个时钟周 期;两个USART;三个计数器/定时器;扩展的中断 系统;两个数据指针;
(6)通过再枚举方式支持总线供电;
(7)智能的串行接口引擎(SIE);
(8)矢量USB中断;
(9)在控制传输阶段为SETUP和DATA提供 分离的数据缓冲区;
(10)集成兼容控制器,运行100kHz或
400kHz;
(11)8051可工作在48MHz,24MHz,12MHz
三种时钟频率.
3CY7C68013A固件程序的编写
USB设备启动流程如下:
(1)USB设备接人USB口,发出连接USB命 令;
(2)主机发出读设备描述符两次;
(3)主机根据设备描述符——厂商ID,产品 ID,启动相应设备驱动程序;
(4)设备驱动程序初始化USB设备;
?读设螽辅述符;
?读配置描述符?;
?选择接口,端点(管道),确定传输方式. USB固件程序通常由三部分组成:?初始化 单片机和所有的外围电路(包括CY7C68013A); ?主循环部分,其任务是可以中断的;?中断服务 程序,其任务是对时间敏感的,必须马上执行.根 据USB协议,任何传输都是由主机(Host)开始的, 单片机作它的前台工作,等待中断.主机首先要 发令牌包给USB设备(这里是CY7C68013A), CY7C68013A接收到令牌包后就给单片机发中断. 单片机进入中断服务程序,首先读CY7C68013A 的中断寄存器,判断USB令牌包的类型,然后执行 相应的操作.在USB单片机程序中,要完成对各 种令牌包的响应,其中比较难处理的是SETUP包, 主要是端口0的编程.固件程序框图流程如下图 所示:
固件程序框图
单片机与CY7C68013A的通信主要是靠单片 机给CY7C68013A发命令和数据来实现的.
CY7C68013A的命令字分为三种:初始化命令字, 数据流命令字和通用命令字.CY7C68013A数据 手册给出了各种命令的代码和地址.单片机先给 CY7C68013A的命令地址发命令,根据不同命令的 要求再发送或读出不同的数据.
下面的程序是处理主机的标准控制请求的一 个模板:
main_
process:
process(reset_n,elk) begin
ifreset—
n='0'then一一一一一一一
——
resetoutputsignals elsiffalling—edge(elk)then一一一一一一 ————
resetstatemachine caserhstateiS
whenRHIDLE=>
whenREQUEST——GET—DESCRIPTOR
李文宫,等:采用CY7C68013A的USB系统固件程序设计35
=>一一一一一一getdescriptorrequest
—————.———.
senddifierentcorn. mandaccordingtodeviceaddress
whenREQUESTGET_STATUS=>一一 —''———'
getstatusrequest
whenREQUEST—SET—ADDRESS=> ——
setaddressrequest
whenREQUEST—SET—FEATURE=> .————..————
setfeature
whenREQUEST—CLEAR—FEATURE= >一一一一一一一clearfeature whenREQUEST—SET—CONFIGURA- TIONlREQUEST—SET_DESCRIPTOR=> ————————————
setconfigurationrequest whenREQUEST—GET—CONFIGURA- TION=>一一一getconfigurationrequest
whenREQUEST—SET—INTERFACE= >一一一一一一setinterfacerequest whenOthers=>
endRequestHandler; USB正常使用以前,必须由主机配置设备. 主机一般会从USB取配置信息后再确定此设备有 哪些功能.作为配置操作的一部分,主机会设置 设备的配置值,如果必要的话会选择合适的接口 备选设置.其初始化函数为:
begin
ifreset—
n:'0'then一一一一一一一一
resetstatemachine
tsstate<=TSDISCONNECTED: ih—
state<=IH—
IDLE;
a0<='0':一一一一一一一一reset outputsignals data—
out<=X"O0"; wr..
n<:'1';
rd—
n<='1':
recv—
n<='1':
req—type<=X"O0": step<=X"FF":一一一一一resetinter-
nalsignals&inprocessvariables
data—
out<=X"O0"; ts—
data<=TRANSEIVER—
DATA:
config<='0': remote_
wakeup<:'0': ir_
O:=X"O0":
ir_
l:='0':
is—
setup:'0';
active—
ep:=X"FF"; ram—
address:=0; read—
count::0; to—
read:=0;
read—
in:0;
data—
length:=0: data—
count:=0; is_
receive:'0'; to—
write:=0; is—
transmit:='0'; handle—
step:=0;
last—
ts—
state:=TS—
IDLE;
在发出连接USB命令后,主机先读取设备描
述符,然后发出设置USB地址setup包,设置USB
地址后,进行主机客户驱动与设备初始化.其余
端点endpoint依此类推.
在其头文件里需定义USB规范中的各种描述 符格式,包括设备描述表,配置描述表,接口描述 表,端点描述表,字符串描述表以及描述表类型. 这样,在发送配置,接口1,端点1,接口2,端点2, 类,厂商等联合描述表时,主机USB可以根据描述 表类型标识区分各种分描述表.
下面是固件程序的主循环部分:
entityDeviceTranseiveris port(
reset—
n:inSTD—
LOGIC;
elk:inSTD—
LOGIC;
int—
n:inSTD—
LOGIC;
a0:outSTD—
LOGIC;
(下转第43页)
黄文静,等:常态实时混叠信号的盲分离算法研究43 4结论
上述实验利用FastICA算法分别对语音信号 和图像信号进行分离,从分离的效果来看,基本将 信号全部分离出来了,因此这种算法在实际中具 有可行性和有效性.然而在消减过程中固定的非 线性特征的使用和对累积误差非常灵敏的类似于
GramSchmidt正交化(或解相关)的运用,在存在
大量源信号的条件下,可能会导致提取信号的质
量的迅速下降.
参考文献
1J.一FCardoso,eta1.Independentcomponentanalysis,a survereyofsomealgebraicmethod.Proc.ISCAS,1996,
96 2:93—
2S.Amari.T.ChenandA.Cichocki.Nonholonomicor. thogonallearningalgorithmsforblindsourceseparation. Neurocomputation,2000,12:1463—1484
3J.Karvanen,J.Eriksson,andV.Koivunen.Pearson systembasedmethodforblindseparation.Proceedingsof SecondInternationalWorkshoponIndependentComponent AnalysisandBlindSignalSeparation,2000:585—590
4YuanqingLi,A.Cichocki,S.Amari.Analysisofsparse representationandblindsourceseparation.NeuralCompu—
tation,2004,16:1193.1234
5YuanqingLi,A.Cichocki,S.Amari.Underdetermined BlindSourceSeparationbasedonsparserepresention. IEEETransactionsonSignalProcessing,2006,54:423—
437
6A.Hyv.finen,Eoja:Independentcomponentanalysis: algorithmsandapplications,NeuralNetworks13,2000: 41l-430
7Hyv,rinen,A.etal,Independentcomponentanalysis, JohnWiley&Sons.2001
8A.Hyv.rinen,EOja.Afastfixedpointalgorithmforin—
dependentcomponentanalysis,IEEETrans.onNeural Computation,1997,9(7):1483—1492
黄文静女,安徽省合肥市人,研究方向为通信信号 的盲分离技术.
杨俊安男,安徽省巢湖市人,中国科学技术大学博 士,中国人民解放军电子工程学院教授,博士生导师,研究
方向为信号处理,智能计算等.
(上接第35页)
data_
in:inSTD—
LOGIC—VECTOR(7downto0); data—
out:outSTD—
LOGIC—VECTOR(7downto 0);
wr_
n:outSTD—
LOGIC;
rd—
n:outSTD—
LOGIC;
suspend:inoutSTD—
LOGIC;
reev—
n:outSTD—
LOGIC:
cmd:inSTD—
LOGIC—VECTOR(7downto0); execn:inSTD—
LOGIC;
req—type:outSTD—
LOGIC—VECTOR(7downto 0);
step:outstd_
logic_
vector(7downto0)
);
endDeviceTranseiver; main—
process:
4结束语
固件程序的编写是整个USB外设开发中非常 重要的一环,它直接影响到设计开发的产品的数 据传输速度.例如,采用不同的传输类型,设置不 同的分组大小,是否采用DMA方式,传输缓冲区 的大小等都会使得数据传输速度发生很大的变 化.还有在高速情况下的超时处理等,也包含了 很多的内容.
2
3
参考文献
张念淮,江浩.USB总线接口开发
指南
验证指南下载验证指南下载验证指南下载星度指南下载审查指南PDF
.国防工业出版 社.2002.1
陈启美,丁传锁.计算机USB接口技术,南京:南京大 学出版社,2003.1
胡晓军,张爱成.USB接口开发技术.西安:西安电子 科技大学出版社,2005.5
李文宫男,合肥解放军电子工程学院o5级硕士研 究生.
武传华男,合肥解放军电子工程学院407教研室主
任,副教授,硕士研究生导师,