社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 239|回复: 3

[原创] 【CH554式改评测】CH554和libusb(上)

[复制链接]

3188

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2018-4-16 16:29:37 | 显示全部楼层 |阅读模式
本帖最后由 ljj3166 于 2018-4-16 16:31 编辑

开始进入到USB的部分了
也是这块片子的一大卖点

玩了一下例程中的HID和KM
demo实现起来很简单
稍微了解一下USB的协议
就能看个大致了
USB协议底层这些玩意儿
还是不去深究了,头很晕
重点是把一大堆描述符折腾清楚
基本上就能跑起来

想想现在集成USB协议的CH554真是方便
全硬实现
查查寄存器,撸撸数据,哪里不会点哪里
真棒

楼主使用巨硬的OS
usb的驱动
虽然沁恒也有提供
但毕竟封装了起来
不能愉快滴玩耍
所以想到无敌的libusb-win32
楼主使用的是CompatibilityHID
源码里面使用的VID是5131,PID是2007
看看设备描述符:
1.png
注意高低字节的次序
还有个很重要的地方
配置描述符:
2.png
pipe的端点描述
后面通信,这个得要对的上

先把windows驱动换了吧
祭出无敌的libusb
3.png
找到VID、PID对应的USB设备
看准咯,把设备整坏了憋怪楼主
4.png
装13必备
然后是一些基本的安装操作
不啰嗦
5.png
骚气侧漏
6.png
像这么牛掰的片子
楼主手上还有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原创,如需转载或用于商业用途需征得作者同意并注明出处

此帖出自单片机论坛
So what......


回复

使用道具 举报

575

TA的帖子

1

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2018-4-20 21:55:06 | 显示全部楼层
老版本的libusb、?????

点评

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


回复

使用道具 举报

3188

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

 楼主| 发表于 2018-4-20 22:05:51 | 显示全部楼层
mars4zhu 发表于 2018-4-20 21:55
老版本的libusb、?????

不要被名字迷惑

点评

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


回复

使用道具 举报

575

TA的帖子

1

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2018-4-21 21:47:25 | 显示全部楼层
ljj3166 发表于 2018-4-20 22:05
不要被名字迷惑

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

我用的libusb。


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-7-21 08:05 , Processed in 0.185204 second(s), 28 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表