ljj3166 发表于 2018-4-16 16:29

【CH554式改评测】CH554和libusb(上)

<div class='showpostmsg'> 本帖最后由 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 = Ep2Buffer;// ^ 0xFF;         // OUT数据取反到IN由计算机验证
//                }
//                UEP2_T_LEN = len;
                                                                UEP2_T_LEN = 8;
                                                                Ep2Buffer = 'g';
                                                                Ep2Buffer = 'o';
                                                                Ep2Buffer = 't';
                                                                Ep2Buffer = ' ';
                                                                Ep2Buffer = 'd';
                                                                Ep2Buffer = 'a';
                                                                Ep2Buffer = 't';
                                                                Ep2Buffer = 'a';
                UEP2_CTRL = UEP2_CTRL & ~ MASK_UEP_T_RES | UEP_T_RES_ACK;       // 允许上传
                                                                send_flag = 0x01;   
            }

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

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

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

</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

mars4zhu 发表于 2018-4-20 21:55

老版本的libusb、?????

ljj3166 发表于 2018-4-20 22:05

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

不要被名字迷惑:lol

mars4zhu 发表于 2018-4-21 21:47

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

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

我用的libusb。
页: [1]
查看完整版本: 【CH554式改评测】CH554和libusb(上)