小弟想使用CH372制作一个USB键盘,使用的芯片是AT89C52+CH372,读写操作通过模拟时序进行,程序如下,CS已经接地 void CH372_WR_CMD_PORT( unsigned char cmd ) { /* 向CH372的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ delay2us(); P1 = cmd; CH372_A0 = 1; // 选择CH372的命令口 CH372_RD = 1; //如果I/O默认电平是高电平,那么这是可选操作 CH372_WR = 0; delay(5); CH372_WR = 1; CH372_A0 = 0; delay(5); } unsigned char CH372_RD_DAT_PORT( void ) { unsigned char dat; delay(5); CH372_A0 = 0; //选择CH372 的数据口 CH372_RD = 0; dat = P1; CH372_WR = 1; delay(5); CH372_RD = 1; return( dat ); }
void CH372_WR_DAT_PORT( unsigned char dat ) { /* 向CH372的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */ P1 = dat; CH372_A0 = 0; CH372_RD = 1; CH372_WR = 0; delay(5);// 对于高速单片机,该指令用于延时,以便向CH372_WR产生宽度至少为80nS的低电平脉冲 CH372_WR = 1; }
不知道是否正确?请版主指点
还有一个问题是内置构建模式下,看程序 CH372_WR_CMD_PORT( CMD_CHECK_EXIST ); /* 测试CH372是否正常工作 */ CH372_WR_DAT_PORT( 0x55 ); /* 写入测试数据 */ i = ~ 0x55; /* 返回数据应该是测试数据取反 */ if ( CH372_RD_DAT_PORT( ) != i ) { /* CH372不正常 */ blue = 0; for ( i=80; i!=0; i-- ) { CH372_WR_CMD_PORT( CMD_RESET_ALL ); /* 多次重复发命令,执行硬件复位 */ CH372_RD_DAT_PORT( ); } CH372_WR_CMD_PORT( 0 ); delay(50); /* 延时50ms */ }
我设置了一个LED灯, blue所示,在内置固件模式下,灯亮,说明CH372不正常工作,不知道什么原因,请版主指点
我的理解是这部分: CH372_WR_CMD_PORT( CMD_SET_USB_MODE ); CH372_WR_DAT_PORT( 2 ); /* 设置为使用外置固件的USB设备方式 */ for ( i=100; i!=0; i-- ) { /* 等待操作成功,通常需要等待10uS-20uS */ if ( CH372_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; 应该时成功的,因为将设备接入电脑后,提示发现“新硬件,USB CH372/CH375”
望版主指点迷津啊[Emot]13[/Emot]