memcpy(BufLogDescr, SetupGetCfgDescr, sizeof( SetupGetCfgDescr )); memcpy( );是标准的C的库函数.可以查找一下功能. 将SetupGetCfgDescr指针的内容复制到BufLogDescr中,复制长度sizeof( SetupGetCfgDescr ),返回实际复制长度. const UINT8C SetupGetDevDescr[] = { 0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00 }; 是针对51MCU KEIL编译器下面的定义.定义到代码区的数组. AVR单片机GCC编译器的定义如下: prog_char SetupGetDevDescr[] = { 0x80, 0x06, 0x00, 0x01, 0x00, 0x00, 0x12, 0x00 };
这是怎么回事?是不是U盘没有插好?还是其他的情况,请技术人员指导,谢谢
技术人员呢?帮我分析一下好吗?它检测到的设备是全速的,是不是这个问题?
你测一下UD+上的电压是是多少?供电是几V?还有你的MCU的晶振是多少?
供电5V ,UD+3.14V,51单片机晶振用的是11.0592,374的晶振是24M
UD+的电压不正常,正常好像是3.7V,请问是哪里出了问题?还是374哪里没有连接正确?谢谢
你用CH374EVT.ZIP中的HOST.C程序做一下测试.以便于确认是硬件问题还是软件的问题. VCC上加电容了没有?一定要保证供电良好. SendByte(0xF0); while(1) { s=Wait374Interrupt(); mDelaymS( 100 ); if(s==ERR_USB_UNKNOWN) {
SendByte(s); } else { SendByte(s); break; } } 这段函数是做什么用的?应该可以去掉.
VCC和GND之间加了220UF的电容,那里是没有用的,开始我没有加这段程序,我以为是没有查询到中断,我就加了这段,不加那段程序 s = GetDeviceDescr( buf ); // 获取设备描述符 SendByte(s); 返回还是FA啊,不知道怎么回事?
这个程序是用你的程序修改的,可以获取设备描述符,你可以试试。 另,建议初次调试未通过之前,尽量不要自行修改示例程序,毕竟所有的示例都是测试过的,应该不会有问题 UploadImages/20088514393687.rar
1223
请问用AVR开发CH374的SPI读取U盘的设备描述符时,端口初始化 void CH374_PORT_INIT( ) /* 由于使用通用I/O模拟并口读写时序,所以进行初始化 */ { /* 如果是硬件SPI接口,那么可使用mode3(CPOL=1&CPHA=1)或mode0(CPOL=0&CPHA=0),CH374在时钟上升沿采样输入,下降沿输出,数据位是高位在前 */ CH374_SPI_SCS = 1; /* 禁止SPI片选 */ CH374_SPI_SCK = 1; /* 默认为高电平,SPI模式3,也可以用SPI模式0,但模拟程序可能需稍做修改 */ /* 对于双向I/O引脚模拟SPI接口,那么必须在此设置SPI_SCS,SPI_SCK,SPI_SDI为输出方向,SPI_SDO为输入方向 */ } 对于双向I/O引脚模拟SPI接口,那么必须在此设置SPI_SCS,SPI_SCK,SPI_SDI为输出方向,SPI_SDO为输入方向 如何修改?还需要修改那些地方?谢谢
如何修改?还需要修改那些地方?谢谢
假设硬件连接如下: /* AVR 374 PORTB.0 -------- SCS# PORTB.1 -------- SCK PORTB.2 -------- SDI PORTB.3 -------- SDO */ 那么: void CH374_PORT_INIT( ) { PORTB = 0x07; /* 设置SCS#,SCK,SDI默认为高电平 */ DDRB = 0x07; /* 设置SCS#,SCK,SDI,为输出,设置SDO为输入 */ }