第一次用CH375 求助[原创]

求助 我第一次用CH375 单片机:STC12C5A60S2 用测试命令(06H)时,CH375返回值总是00 用命令(01H)时也是返回00 这是哪里的问题? 晶振换成有源的也是一样。

帮我看下程序对不对?

CLR CS1 ;CH375_1有效

SETB A0 ;写命令操作 CLR WR SETB RD LCALL DY_100US ;延时100US MOV A,#06H ;测试命令(06H) MOV P2,A

CLR A0 ;写数据操作 CLR WR SETB RD LCALL DY_100US ;延时100US MOV A,#03H MOV P2,A LCALL SEND_DATA ;串口发送数据,调试用

CLR A0 ;读数据操作 CLR RD SETB WR LCALL DY_100US ;延时100US MOV A,P2 LCALL SEND_DATA ;串口发送数据,调试用20141917585165.jpg

根据你的现象测试命令没有正常通过,检查一下CH375芯片有没有正常工作?第25脚低电平、第26脚高电平。检查一下你的并口接线是否正确?读数据的时候P2方向设置成输入。


第25脚低电平、第26脚高电平 是对的。 并口接线: CH375第15脚--MCU_P2.0 CH375第16脚--MCU_P2.1 。 。 。 CH375第22脚--MCU_P2.7


我上传了电路,帮我看下连接是否有错?

另外LED是不是在接有USB设备的情况下会亮(不管MCU有没有对CH375操作)? 我板子接上USB设备LED从没有亮过。是不是CH375没工作?


看了你的原理图我们提供的基本上一样,应该没有什么问题。时序那一块有点问题,按照下面的流程来写: CLR CS1 CH375_1有效

MOV A,#06H 测试命令(06H) MOV P2,A SETB A0 写命令操作 CLR WR SETB RD SET WR CLR A0 LCALL DY_100US 延时100US MOV A,#03H MOV P2,A CLR A0 写数据操作 CLR WR SETB RD SET WR SET A0 LCALL DY_100US 延时100US LCALL SEND_DATA 串口发送数据,调试用

CLR A0 读数据操作 CLR RD SETB WR MOV A,P2 SET RD LCALL DY_100US 延时100US LCALL SEND_DATA 串口发送数据,调试用

LED灯只有在设置完模式之后插入设备才会变亮,你现在测试命令都没有通过是不会变亮的。


非常感谢ZBin的帮助!操作成功。 我用CH75的目的是要用51单片机接USB键盘输入数据,还要驱动USB打印机打印数据。请问有没有相关例子可以参考?要汇编语言的。


下面是CH375B操作鼠标键盘的汇编程序(1楼):http://www.wch.cn/bbs/View.asp?S=101&I=19463


谢谢ZBin! 那个例子好像是个通用的程序。实际操作USB键盘没有这么复杂吧? 能不能给我说下操作USB键盘的流程?从CH375B上电复位开始。谢谢!


例子中的是操作鼠标的例子,操作键盘的还要跟复杂一下。 上电复位后大致流程是: (1)做测试命令,设置模式 (2)等待设备连接 (3)对键盘初始化:获取设备描述符、设置地址、获取配置描述符、获取HID类描述符 (4)对于键盘设备,则可以设置报表 (5)最后进行对应端点的数据传输。


(4)对于键盘设备,则可以设置报表

设置报表的命令是什么?在CH375和CH372的技术文档里面都没有。在例程里面也没有。


这个你可以看一下HID类协议规范。 我们程序中设置报表描述符的命令码是 Set_Report_Cms: DB 21H,09H,00H,02H,00H,00H,01H,00H 例程是操作鼠标的,没调用这个命令,你可以参考一下设置地址那条命令。


12 01 10 01 00 00 00 08 F3 04 34 02 58 24 00 02 00 01 09 02 22 00 01 01 00 A0 32 09 04 00 00 01 03 01 02 00 09 21 11 01 00 01 22 3E 00 07 05 81 03 04 00 0A 05 01 09 02 A1 01 09 01 A1 00 05 09 19 01 29 03 15 00 25 01 95 03 75 01 81 02 95 05 75 01 81 03 05 01 09 30 09 31 15 81 25 7F 75 08 95 02 81 06 09 38 15 81 25 7F 75 08 95 01 81 06 C0 C0


上面第11楼是CH375B操作鼠标范例编译后运行的结果。 从数据可以看出,鼠标的各描述符都能正确读出。 但是按鼠标左、右键和移动鼠标都没有数据送出,这是为什么?


那你要看下你获取的端点号是否正确,按照你上面描述的端点号应该为0X81,你看下你获取数据的端点号是不是0X81?


我截取数据看了一下,端点号是81H。

    MOV R7,Endp_Num ;端点号 lcall Uart_Send ;串口发送数据,调试用 MOV R7,Endp_Num ;端点号 MOV R6,#DEF_USB_PID_IN LCALL Issue_Token

这是论坛上的范例程序呢,我想应该是调试通过了才放上论坛的吧。跟硬件有没有关系呢?


我们的例子程序都是测试通过的,你的这种现象可能与你的鼠标有关系,你可以换一个鼠标试一下? 另外,对于部分鼠标需要设置有重试次数,可以改成: MOV R7,#89H ;位7为1则收到NAK时无限重试, 位3~位0为超时后的重试次数 LCALL CH375_WR_DAT_PORT


只有登录才能回复,可以选择微信账号登录