参考的程序是“ch376host”,其他帖子中推荐的 开头部分写: /**************************************** ** Copyright (C) WCH 1999-2009 ** ** Web: http://www.winchiphead.com ** **************************************** ** USB 1.1 Host Examples for CH376 ** ** KC7.0@MCS-51 ** ** Version: v1.0 ** ** Author: tech14 ** ** Time : 2009/11/18 ** **************************************** 应该是沁恒官方提供的,但是在官方页面上没找到下载的地方 我参照这个程序编写自己的程序,一点一点的添加 增加一点,运行一下看看效果 我用的是8位并口,软件模拟接口方式
写到“获取设备描述符”时就不成功了,输出“get device descr failed” 我怀疑是前面设置速度的问题 前有面调用这样的函数 void set_freq(void) { CH376_WR_CMD_PORT(0x0b); // 切换使375B进入低速模式 CH376_WR_DAT_PORT(0x17); CH376_WR_DAT_PORT(0xd8); } 我不明白0x0b,0x17,0xd8这三个参数是什么意思 查数据手册中的命令,似乎与速度没有关系
我重新写设置低速的函数: void CH376_SET_USB_SPEED(void) { CH376_WR_CMD_PORT(CMD_SET_USB_SPEED); //0x04 CH376_WR_CMD_PORT(0x02); } 替换原先的设置速度,获取设备描述符就成功了 但不是很稳定,有时还是会失败
修改 UINT8 Get_Dev_Descr(),增加输出语句 发现是 DATA阶段 不成功, issue_token(receive_mode, (0<<4) | DEF_USB_PID_IN); status = wait_interrupt(); 读出的状态值是 0x16 (检测到USB设备断开事件) 不明白为什么
另外,不知道 (0<<4) 有什么用,0左移4为不还是0么?
请问,void set_freq(void) 中的那三个参数,能解释一下是什么意思么? 另外问个小问题,这两种复位方法效果一样么: 1. 用 CMD_RESET_ALL 命令复位 2. 在CH376芯片第2脚RSTI,高电平一段时间再恢复低电平(不知道高电平需要持续多长时间?)