本帖最后由 ljj3166 于 2018-4-16 16:31 编辑
开始进入到USB的部分了
也是这块片子的一大卖点
玩了一下例程中的HID和KM
demo实现起来很简单
稍微了解一下USB的协议
就能看个大致了
USB协议底层这些玩意儿
还是不去深究了,头很晕
重点是把一大堆描述符折腾清楚
基本上就能跑起来
想想现在集成USB协议的CH554真是方便
全硬实现
查查寄存器,撸撸数据,哪里不会点哪里
真棒
楼主使用巨硬的OS
usb的驱动
虽然沁恒也有提供
但毕竟封装了起来
不能愉快滴玩耍
所以想到无敌的libusb-win32
楼主使用的是CompatibilityHID
源码里面使用的VID是5131,PID是2007
看看设备描述符:
注意高低字节的次序
还有个很重要的地方
配置描述符:
pipe的端点描述
后面通信,这个得要对的上
先把windows驱动换了吧
祭出无敌的libusb
找到VID、PID对应的USB设备
看准咯,把设备整坏了憋怪楼主
装13必备
然后是一些基本的安装操作
不啰嗦
骚气侧漏
像这么牛掰的片子
楼主手上还有6个
- while(1)
- {
- if(Ready&& (Ep2InKey==0))
- {
- Enp2BlukIn( );
- mDelaymS( 100 );
- }
- // mDelaymS( 100 ); //模拟单片机做其它事
- if(send_flag == 0x01)
- {
- printf(Ep2Buffer);
- send_flag = 0x00;
- memset(Ep2Buffer, '\0', THIS_ENDP0_SIZE);
- }
- else {}
- }
复制代码
稍微改一下单片鸡的代码
大概意思就是收到数据后
把接收到的数据打印出来
- case UIS_TOKEN_OUT | 2: //endpoint 2# 端点批量下传
- if ( U_TOG_OK ) // 不同步的数据包将丢弃
- {
- len = USB_RX_LEN; //接收数据长度,数据从Ep2Buffer首地址开始存放
- // for ( i = 0; i < len; i ++ )
- // {
- // Ep2Buffer[MAX_PACKET_SIZE+i] = Ep2Buffer[i];// ^ 0xFF; // OUT数据取反到IN由计算机验证
- // }
- // UEP2_T_LEN = len;
- UEP2_T_LEN = 8;
- Ep2Buffer[MAX_PACKET_SIZE+0] = 'g';
- Ep2Buffer[MAX_PACKET_SIZE+1] = 'o';
- Ep2Buffer[MAX_PACKET_SIZE+2] = 't';
- Ep2Buffer[MAX_PACKET_SIZE+3] = ' ';
- Ep2Buffer[MAX_PACKET_SIZE+4] = 'd';
- Ep2Buffer[MAX_PACKET_SIZE+5] = 'a';
- Ep2Buffer[MAX_PACKET_SIZE+6] = 't';
- Ep2Buffer[MAX_PACKET_SIZE+7] = 'a';
- UEP2_CTRL = UEP2_CTRL & ~ MASK_UEP_T_RES | UEP_T_RES_ACK; // 允许上传
- send_flag = 0x01;
- }
复制代码
USB中断里头
接收到数据后,返回“got data”,并置位send_flag
怕编辑器崩溃,未完待续,请看下集......
此内容由EEWORLD论坛网友ljj3166原创,如需转载或用于商业用途需征得作者同意并注明出处