USB设备试验
一.布景
在ATMEL官方网站上供给了USB的运用比如(详情请参阅“BasicUSB Application”阐明),里边有源代码(是用IAR编译的,需求稍作修正才干用在ADS上),两个不同的USB驱动程序。两个不同的USB驱动程序,在PC机上是两个不同的运用比如。当装置完两个不同的驱动后,一个呈现的是调制解调器的设备,能够用超级终端来完结USB数据的收发。另一个是USB 设备,用ATMEL供给的“BasicUSB_6124.exe”来完结USB数据的收发。我起先一向在用后面的比如来做试验,但试了好久都没有成功,后来改用前面的成功了。
二.USB驱动装置阐明
当第一次与host PC机衔接时,体系会弹出一个“找到新的硬件导游”窗口,挑选“从列表或指定方位装置”后点击“下一步”。在接下来的窗口中挑选“不要查找。我要自己挑选要装置的驱动程序”,然后点击“下一步”。再在接下来的窗口中点击“从磁盘装置”,找到“atm6124ser.inf”地点的目录后翻开。再点击“下一步”开端装置,最后点“完结”就能够。
装置完结后,会在设备管理器的“调制解调器”栏中检查到“ATMEL AT91 USB serial emulation #2”设备。此刻就能够运用“超级终端”经过USB与AT91SAM7S64通讯了。详请请检查该目录的“BasicUSB Application.pdf”文件。
三.试验意图
用PC机上的超级终端发送数据,AT91SAM7S64经过USB接纳超级终端上发过来的数据(USB的读操作),再经过USB将接纳到的数据回来给PC机上的超级终端(USB的写操作),这样就完结了PC机与 AT91SAM7S64的USB通讯。假如AT91SAM7S64将接纳到数据经过DBUG串口再发送出去,这样AT91SAM7S64就能够当作一个 USB转串口的设备运用。
四.试验源程序
由于这个试验的源程序比较多,且ATMEL供给了具体的文档和源代码,故不再列出。有什么问题能够经过ccn422@hotmail.com联络我。
别的由于ATMEL的源码中没有使能重映射功用,假如想将程序下载到地址为0x00200000的SRAM中调试,又要运用在0x0地址空间的中止向量表,使程序跳转到中止处理程序,有必要运用重映射的功用。所以我在起动代码(AT91F_LowLevelInit)中加了重映射这条指令,如下:
if (Remap_Flag == 0)
{ //由于不能重复履行重映射指令,所以加了Remap_Flag标志来防止屡次履行重映射指令
Remap_Flag = 0xff;
*AT91C_MC_RCR = AT91C_MC_RCB; //Remap Command Bit
}
五.呈现的问题与处理方法
1> 每次从头装载程序进行调试时,Remap_Flag没有等于0。
原因是进入C代码前,没有初始化存储器的内容。用户能够将起动代码中的“bmain”改成“b__main”,即在跳入到main()函数前履行__main初始化库函数,也可自己参加初始化存储器的代码。程序如下:
InitReset
IMPORT |Image$$RO$$Limit|; End of ROM code (=start of ROM data)
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit|; to zero initialise
;********************************************************
;* Copy and paste RW data/zero initialized data *
;********************************************************
LDR r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
LDR r1, =|Image$$RW$$Base| ; and RAM copy
LDR r3, =|Image$$ZI$$Base|
;Zero init base => top of initialised data
CMP r0, r1 ; Check that they are different
BEQ %F1
0
CMP r1, r3 ; Copy init data
LDRCC r2, [r0], #4 ;–> LDRCC r2, [r0] + ADD r0, r0, #4
STRCC r2, [r1], #4 ;–> STRCC r2, [r1] + ADD r1, r1, #4
BCC %B0
1
LDR r1, =|Image$$ZI$$Limit| ; Top of zero init segment
MOV r2, #0
2
CMP r3, r1 ; Zero init
STRCC r2, [r3], #4
BCC %B2
假如想具体了解该部分的原理,能够参阅三星公司为44B0写的起动代码部分材料。
2> 这个试验浪费了许多的时刻,原因便是由于我一向用的atm6124.sys和atm6124.inf驱动程序以及BasicUSB_6124.exe来做此试验,当履行BasicUSB_6124.exe后,总是呈现“设备不能衔接”。为此我专门去书店买了《USB2.0运用与规划》参阅,再研讨和调试源代码,再加上细心的阅览“BasicUSB Application.pdf”文件,后来改用atm6124ser.inf驱动程序与超级终端来完结了本次试验。
六.总结
假如一开端就很成功的完结了本次试验,我可能对USB的原理等不会了解到多少,正是由于呈现了问题,我才会为了处理问题而去找相关的材料学习,终究到问题的处理。因而呈现问题并不是一件什么坏事,相反,问题的呈现会引导咱们静下心来向更深层次去探求,终究更深入更全面地把握常识。