5259|3

3416

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

【CH554式改评测】CH554和libusb(上) [复制链接]

本帖最后由 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个
  1.     while(1)
  2.     {
  3.         if(Ready&& (Ep2InKey==0))
  4.         {
  5.             Enp2BlukIn( );
  6.             mDelaymS( 100 );
  7.         }
  8. //        mDelaymS( 100 );                                                   //模拟单片机做其它事
  9.                 if(send_flag == 0x01)
  10.                 {
  11.                         printf(Ep2Buffer);
  12.                         send_flag = 0x00;
  13.                         memset(Ep2Buffer, '\0', THIS_ENDP0_SIZE);
  14.                 }
  15.                 else {}
  16.     }
复制代码


稍微改一下单片鸡的代码
大概意思就是收到数据后
把接收到的数据打印出来
  1.         case UIS_TOKEN_OUT | 2:                                                 //endpoint 2# 端点批量下传
  2.             if ( U_TOG_OK )                                                     // 不同步的数据包将丢弃
  3.             {
  4.                 len = USB_RX_LEN;                                               //接收数据长度,数据从Ep2Buffer首地址开始存放
  5. //                for ( i = 0; i < len; i ++ )
  6. //                {
  7. //                    Ep2Buffer[MAX_PACKET_SIZE+i] = Ep2Buffer[i];// ^ 0xFF;         // OUT数据取反到IN由计算机验证
  8. //                }
  9. //                UEP2_T_LEN = len;
  10.                                                                 UEP2_T_LEN = 8;
  11.                                                                 Ep2Buffer[MAX_PACKET_SIZE+0] = 'g';
  12.                                                                 Ep2Buffer[MAX_PACKET_SIZE+1] = 'o';
  13.                                                                 Ep2Buffer[MAX_PACKET_SIZE+2] = 't';
  14.                                                                 Ep2Buffer[MAX_PACKET_SIZE+3] = ' ';
  15.                                                                 Ep2Buffer[MAX_PACKET_SIZE+4] = 'd';
  16.                                                                 Ep2Buffer[MAX_PACKET_SIZE+5] = 'a';
  17.                                                                 Ep2Buffer[MAX_PACKET_SIZE+6] = 't';
  18.                                                                 Ep2Buffer[MAX_PACKET_SIZE+7] = 'a';
  19.                 UEP2_CTRL = UEP2_CTRL & ~ MASK_UEP_T_RES | UEP_T_RES_ACK;       // 允许上传
  20.                                                                 send_flag = 0x01;   
  21.             }
复制代码


USB中断里头
接收到数据后,返回“got data”,并置位send_flag

怕编辑器崩溃,未完待续,请看下集......

此内容由EEWORLD论坛网友ljj3166原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自单片机论坛

最新回复

哦,原来是libusb-win32,这个好像已经停止更新了,推荐使用libusb。 我用的libusb。  详情 回复 发表于 2018-4-21 21:47
点赞 关注
个人签名

So TM what......?

 

回复
举报

659

帖子

1

TA的资源

纯净的硅(中级)

沙发
 
老版本的libusb、?????
此帖出自单片机论坛

点评

不要被名字迷惑  详情 回复 发表于 2018-4-20 22:05
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
mars4zhu 发表于 2018-4-20 21:55
老版本的libusb、?????

不要被名字迷惑
此帖出自单片机论坛

点评

哦,原来是libusb-win32,这个好像已经停止更新了,推荐使用libusb。 我用的libusb。  详情 回复 发表于 2018-4-21 21:47
 
个人签名

So TM what......?

 

 

回复

659

帖子

1

TA的资源

纯净的硅(中级)

4
 
ljj3166 发表于 2018-4-20 22:05
不要被名字迷惑

哦,原来是libusb-win32,这个好像已经停止更新了,推荐使用libusb。

我用的libusb。
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表