完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
为了搞懂u***协议原理,我看了很多天的书,感觉很多东西不太确定。然后发现一个好东西,就是u***isp(u***asp),开源的avr下载线,看代码可以把u***原理彻底搞懂,甚至连底层的信号传输都是用软件实现的。并且这个东西功能很简单。但是没有说明书,读代码很累,读了很多很多天,90%多的东西都搞懂了。于是就可以改一些源代码,做做试验什么的。
首先atmega48的源代码不变,刷进去,没有成功。并且单片机发热。找各种原因,每个引脚的接线都看了一遍,没发现问题,陷入困惑中。u***接头用的是一个坏的u***延长线,因为万用表的表笔插入u***接口比较费劲,我只是草率的测过一遍,线的颜色红白绿黑顺序是对的。现在找不到头绪,于是我就又找了一根坏的u***延长线,我把这根线的母头剪下来,然后插到那根待测试的u***接头,我又四根线全部用万用表量了一下,依然没有发现问题,这根母头的线每个颜色都能对上那根待测试的线的颜色。……发愁,找不到原因。然后我想了一下,虽然线的颜色顺序对,但也有可能顺序是整个相反的。于是测了一下,又喜又气。所有正规的u***线都是红色接正,黑色接负,但是我找的这两根线都是顺序相反的……。这两根线是截然不同的,一根很结实的样子,还有磁环,另一根虽然没有磁环,但是线也很粗,做工都不是很差,就是有些坑爹。正负极相反,单片机发热,猜是烧了,然后证实了,为了找毛病用了两个atmega48,全部阵亡。 后来想改一下源代码,让下载线变成hid设备。源代码只改3处,u***config.h里边class改成3,USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 改成 43 。 u***drv.c里边再设备描述符前加入 PROGMEM char u***DescriptorHidReport[] = { 0x06, 0x00, 0xFF, // USAGE_PAGE (Generic Desktop) 0x09, 0x01, // USAGE (Vendor Usage 1) 0xA1, 0x01, // COLLECTION (Application) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) 0x75, 0x08, // REPORT_SIZE (8 bits) // 14 bytes Feature report#1 ( 8 bytes sent to/from host) 0x85, 0x01, // Global Report ID (cannot be 0) Command Report 8 bytes + ID 0x95, 0x08, // Global Report Count 8 (number of Report Size fields) 0x09, 0x00, // Usage Undefined 0x15, 0x00, // Local Usage Minimum (each Report Count must be associated with a Usage) 0x26, 0xFF, 0x00, // Local Usage Maximum 0xB2, 0x02, 0x01, // Main Feature (Data,Var,Abs,Buf) // 28 bytes Feature report#2 ( 16 bytes sent to/from host) 0x85, 0x02, // Global Report ID (cannot be 0) Data Report 16bytes + ID 0x95, 0x10, // Global Report Count 16 (number of Report Size fields) 0x09, 0x00, // Usage Undefined 0x15, 0x00, // Local Usage Minimum (each Report Count must be associated with a Usage) 0x26, 0xFF, 0x00, // Local Usage Maximum 0xB2, 0x02, 0x01, // Main Feature (Data,Var,Abs,Buf) // 42 buytes 0xC0 // END_COLLECTION }; 这个hid报表描述符,我从网上看了很多教程,然后又找的现成的描述符,试了好几个,都是插入电脑只有接入声音没有拔出声音。我用的wireshark3.2.0,来分析u***数据。每次发送完设备描述符,配置描述符,字符串描述符,然后请求报表描述符,请求3次,设备没有回应,然后复位u***设备,然后反复循环如此。于是各种改源代码找原因。看不见摸不着的东西找问题很费劲,于是又接上一个指示灯。每次都要执行到一个switch里边,把灯亮语句放在switch的开头就亮 ,放到结尾就不亮。怀疑是到哪个case出了问题,于是10来个case各种删除然后编译,有时删了这个case正常有时删那个正常,最后总结case只要删的多就正常,最后明白了------》atmega48容量太小,程序超过了4k,刷机时不提示任何错误。最后把不重要的功能删除,刷入,正常。 开始我用的libu***开源库做的实验,改成hid设备之后发现libu***用不了了,又学了一下hidapi开源库。 |
|
|
|
只有小组成员才能发言,加入小组>>
2548 浏览 0 评论
1146浏览 2评论
745浏览 1评论
499浏览 0评论
265浏览 0评论
427浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 09:41 , Processed in 1.282107 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号