自制avr下载线

2020-03-23来源: eefocus关键字:avr  下载线  usb协议

为了搞懂usb协议原理,我看了很多天的书,感觉很多东西不太确定。然后发现一个好东西,就是usbisp(usbasp),开源的avr下载线,看代码可以把usb原理彻底搞懂,甚至连底层的信号传输都是用软件实现的。并且这个东西功能很简单。但是没有说明书,读代码很累,读了很多很多天,90%多的东西都搞懂了。于是就可以改一些源代码,做做试验什么的。


首先atmega48的源代码不变,刷进去,没有成功。并且单片机发热。找各种原因,每个引脚的接线都看了一遍,没发现问题,陷入困惑中。usb接头用的是一个坏的usb延长线,因为万用表的表笔插入usb接口比较费劲,我只是草率的测过一遍,线的颜色红白绿黑顺序是对的。现在找不到头绪,于是我就又找了一根坏的usb延长线,我把这根线的母头剪下来,然后插到那根待测试的usb接头,我又四根线全部用万用表量了一下,依然没有发现问题,这根母头的线每个颜色都能对上那根待测试的线的颜色。……发愁,找不到原因。然后我想了一下,虽然线的颜色顺序对,但也有可能顺序是整个相反的。于是测了一下,又喜又气。所有正规的usb线都是红色接正,黑色接负,但是我找的这两根线都是顺序相反的……。这两根线是截然不同的,一根很结实的样子,还有磁环,另一根虽然没有磁环,但是线也很粗,做工都不是很差,就是有些坑爹。正负极相反,单片机发热,猜是烧了,然后证实了,为了找毛病用了两个atmega48,全部阵亡。


后来想改一下源代码,让下载线变成hid设备。源代码只改3处,usbconfig.h里边class改成3,USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH   改成 43       。  usbdrv.c里边再设备描述符前加入


PROGMEM char usbDescriptorHidReport[] = {

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,来分析usb数据。每次发送完设备描述符,配置描述符,字符串描述符,然后请求报表描述符,请求3次,设备没有回应,然后复位usb设备,然后反复循环如此。于是各种改源代码找原因。看不见摸不着的东西找问题很费劲,于是又接上一个指示灯。每次都要执行到一个switch里边,把灯亮语句放在switch的开头就亮  ,放到结尾就不亮。怀疑是到哪个case出了问题,于是10来个case各种删除然后编译,有时删了这个case正常有时删那个正常,最后总结case只要删的多就正常,最后明白了------>atmega48容量太小,程序超过了4k,刷机时不提示任何错误。最后把不重要的功能删除,刷入,正常。


开始我用的libusb开源库做的实验,改成hid设备之后发现libusb用不了了,又学了一下hidapi开源库。

关键字:avr  下载线  usb协议 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic492362.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:网上某人的avrJTAG ICE仿真器中m16程序的烧法
下一篇:atmega8a -pu设置熔丝位,atmega8a -pu最小系统

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

AVR单片机IAR AVR C语言中断编程
一、AVRmega16中断向量表向量号 程序地址 中断源 描述 IAR AVR中的定义 1 000 RESET 外部引脚电平引发的复位,上电复位,掉电检测复位,看门狗复位,以及JTAG AVR 复位 RESET_vect 2 002 INT0 外部中断请求0 INT0_vect 3 004 INT1 外部中断请求1 INT1_vect 4 006 TIMER2 COMP 定时器/计数 2 比较匹配 TIMER2_COMP_vect 5 008 TIMER2 OVF 定时器/计数 2 溢出 TIMER2_OVF_vect 6 00A TIMER1 CAPT 定时器/计数 1事件捕捉 TIMER_ CAPT_vect 7 00C
发表于 2020-03-04
AVR看门狗心得
简介:AVR单片机系列(例如,ATMEGA168等)使用增强功能的看门狗(Enhanced Watchdog Timer),与原来的看门狗相比较,除了有相同复位的功能以外,还增加了中断的功能设计时。使用看门狗的中断功能,可以实现从Power Down状态唤醒CPU;另外同时能使中断和复位功能,可以在系统发生错误时,先进入中断状态,保存关键数据到EEPROM,然后在进行系统复位。AVR单片机系列(例如,ATMEGA168等)使用增强功能的看门狗(Enhanced Watchdog Timer),与原来的看门狗相比较,除了有相同复位的功能以外,还增加了中断的功能设计时。使用看门狗的中断功能,可以实现从Power Down状态唤醒CPU
发表于 2020-03-03
AVR看门狗心得
AVR看门狗详解
简介:AVR看门狗 一个硬件单元,当程序由于某种原因跑“飞”了,它就Reset程序。就像小狗看门一样。AVR看门狗 一个硬件单元,当程序由于某种原因跑“飞”了,它就Reset程序。就像小狗看门一样。//Watchdog initialize// prescale: 2048Kvoid watchdog_init(void){WDR(); //this prevents a timout on enablingWDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs}上面是用ICC的App Builder生成的看门狗初始化程序,这些语句达不到初始化看门狗的目的,需要
发表于 2020-03-03
AVR看门狗详解
利用笔记本电脑废热供能的笔记本散热器具体方案
简介:本方案拟利用基于AVR32 AT32UC3A单片机控制器的评估套件和开发系统EVK1100,开发利用电脑废热供电的笔记本电脑散热器。一、项目概述1.1 引言现如今,能源危机日趋严重。人们的环境保护意识在不断提高,在发展新能源的同时,努力提高能源利用率也是一个方向。当前,半导体温差发电技术以其各种优点越来越引起人们的关注。该技术已经被应用于工业余热、废热的回收利用、航天辅助电力系统等。笔记本电脑在工作过程中,其CPU及其他部件的高速运转会产生大量的热量,而且,随着目前笔记本电脑硬件配置的逐渐升级,在提升性能的同时,笔记本电脑的整体发热量也在不断上升。为了解决这个问题,人们设计了散热底座。然而,市面上所看到的笔记本电脑
发表于 2020-03-03
利用笔记本电脑废热供能的笔记本散热器具体方案
AVR熔丝位设置教程
简介:对AVR熔丝位的配置是比较细致的工作,用户往往忽视其重要性,或感到不易掌握。下面给出对AVR熔丝位的配置操作时的一些要点和需要注意的相关事项。(1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态,“Unprogrammed”表示熔丝状态为“1”(禁止);“Programmed”表示熔丝状态为“0”(允许)。因此,配置熔丝位的过程实际上是“配置熔丝位成为未编程状态“1”或成为已编程状态“0””。(2)在使用通过选择打钩“√”方式确定熔丝位状态值的编程工具软件时,请首先仔细阅读软件的使用说明,弄清楚“√”表示设置熔丝位状态为“0”还是为“1”。(3)使用
发表于 2020-03-03
DIY智能家庭营养专家系统解决方案
简介:本家庭营养专家采用AVR32为主控制器,通过触摸屏与用户进行交互。用户通过本系统可以进行营养套餐的选择,品质生活建议。同时在用户外出用餐时,通过本系统内置的餐饮平台实现网络订餐。项目背景及介绍随着人们生活水平的不断提高,工作节奏的日益加快,工作压力的加强,生活日益“快餐化”,而由此营养不足和过剩导致的“社会文明病”、“富裕病”等日益危害人民的健康,健康和营养也开始受到越来越多家庭的重视,如何对家庭成员饮食营养给予科学指导,合理膳食、科学配餐将成为目前家庭的一项重要内容之一。本家庭营养专家采用AVR32为主控制器,通过触摸屏与用户进行交互。用户通过本系统可以进行营养套餐的选择,品质生活建议。同时在用户外出用餐时,通过本系统
发表于 2020-03-03
DIY智能家庭营养专家系统解决方案
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved