历史上的今天
返回首页

历史上的今天

今天是:2024年09月07日(星期六)

2020年09月07日 | 实现AVR单片机芯片程序自刷 USB_Flash_BootLoader HID制作过程

2020-09-07 来源:51hei

前期制作USBASP过程中,学习了AVR单片机芯片的BootLoader原理,查找了很多关于USB-HID和BootLoader的资料制作了可以自刷程序的atmega8(16)简易板,现将所学的分享给大家。

一、关于BootLoader
        BootLoader是芯片上电后,程序不从flash地址的0x00执行,而是跳转到boot区执行bootloader程序。
        atmega8的boot区的大小及起始位置是由其熔丝位来设置(BOOTSZ0、BOOTSZ1)的。
        其是否执行bootloader程序也是由熔丝位(BOOTRST)设置的。
        
二、关于USB-HID
        HID是人体学输入设备的英文简称,由于Windows内置了此类驱动,如常用的鼠标、键盘等不用外部驱动就可以直接使用。
        
        AVR的Flash-BootLoader-HID固件就是利用了BootLoader和USB-HID的特点,将AVR芯片的Flash刷写程序和USB-HID的程序结合,制作为BootLoader程序,实现了自刷芯片程序的功能。
        
三、制作过程:
        1、根据原理图制作电路

         


              自己的电路中加入了复位按键,需要刷程序时只按下复位键就进入Boot了。

        2、编译BootLoader的HEX固件
                后期可以根据自己的硬件情况对bootloaderconfig.h内的配置进行更改。
                makefile文件的简单配置

以上是USB数据端口的配置,原版使用了PD2->D+,PD0->D-,这个可以根据个人需要更改。
需要注意的是不论更改到哪个端口,D+始终需要与PD2连接,因为其使用了INT0中断。


在config文件最后定义了引导判断端口的设置,这个是根据个人情况更改。
        3、atmega8的熔丝位更改
                使用其他烧写器对熔丝位更改


             需要对以下几个熔丝位更改:
                 1)熔丝低位的CKSEL 0~3设置为1,即使用外部晶振。
                 2)BOOTSZ1.0,BOOTRST置0,即设置BOOT区大小为1024字节,芯片复位后从BOOT区执行程序。

        4、刷BootLoader
                使用USBASP或者其他烧写器刷HEX固件。
                若使用progisp软件调入固件文件,在“编辑”选项能看到,固件数据是从0x1800开始的,这是
                因为atmega8的boot区设置为1024大小时的boot起始位置(0xC00*2具体原理查阅atmega8芯片说明)。




                因此制作bootloader时要注意芯片熔丝位的设置和makefile的flashboot地址,两者要一致。
               
               
四、进入BootLoader,可以刷自己的程序了!
        1、将PC2接地,插入USB口,windows的设备管理器即可识别出一个HID-compliant device的设备,并安装好驱动。
        若无法识别成功,查检1~4步。



        2、将bootloaderHID.exe复制到自己的程序固件xxx.hex目录下
        3、在cmd命令下输入bootloadhid -r xxxx.hex
        如果成功,即会出现以下界面。

         

          以上可以通过简单配置文件更改,就可心应用到其他AVR芯片。

         以atmega16芯片为例:
               只要将makefile文件       DEVICE = atmega16
                                                    BOOTLOADER_ADDRESS = 3800
             其它设置相同,即可实现自刷。

五、上一下自己制作的电路


 


六、相关软件
        1、WinAVR(GCC-for-AVR)
        2、Flash-BootLoadHID固件及上位机


推荐阅读

史海拾趣

Connector City公司的发展小趣事

Connector City公司成立于XX世纪初,当时电子连接器市场正处于快速发展的阶段。作为初创企业,Connector City面临着资金短缺、技术落后和市场竞争激烈的挑战。然而,公司创始人凭借对行业的深刻理解和敏锐的市场洞察力,成功捕捉到了市场机遇。他们积极寻求投资,加强与科研机构的合作,不断提升产品性能和质量。同时,公司还注重市场营销和品牌建设,通过参加行业展会、举办产品发布会等方式,提高了品牌知名度和市场占有率。

复旦微电子(FM)公司的发展小趣事

随着国内市场的饱和,Connector City公司开始寻求海外市场的发展机遇。公司制定了详细的国际化战略,积极开拓海外市场,加强与国外客户的合作与交流。同时,公司还注重本土化运营,根据不同国家和地区的市场需求和文化差异,灵活调整产品设计和营销策略。通过不断拓展海外市场,公司的销售业绩实现了快速增长。

GE公司的发展小趣事

随着全球环保意识的不断提高,电子行业对绿色环保的要求也越来越高。Connector City公司积极响应国家环保政策,加强了对生产过程的环保管理。公司引进了先进的环保设备和技术,减少了生产过程中的废弃物排放和能源消耗。同时,公司还注重产品的环保性能设计,推出了多款符合环保标准的新型连接器产品。通过坚持绿色环保和可持续发展理念,公司赢得了社会的广泛赞誉和支持。

这五个故事仅是对Connector City公司可能发展路径的一种虚构描述,实际情况可能因市场变化、公司策略调整等多种因素而有所不同。在实际发展中,公司需要根据自身情况和市场环境做出灵活的调整和决策。

科山芯创(COSINE)公司的发展小趣事

科山芯创(COSINE)公司成立于2017年,由一群对射频及模拟集成电路芯片充满热情的工程师创立。他们看到了中国电子行业中对于高性能、高品质芯片的巨大需求,于是决定成立一家公司,专注于这一领域的研发与设计。他们的初心是通过自主创新和核心技术,为国内外客户提供有竞争力的解决方案。

Advanced Thermal Products Inc公司的发展小趣事

随着国内市场的不断饱和,ATP公司开始将目光投向国际市场。他们制定了国际化发展战略,通过设立海外分支机构、参加国际展会等方式拓展海外市场。同时,公司积极与国际知名企业合作,共同开发新产品、新技术,实现了互利共赢。这些举措为ATP公司的全球化发展奠定了坚实基础。

请注意,上述故事仅为虚构内容,不代表Advanced Thermal Products Inc公司的真实发展历程。如需了解该公司的真实情况,建议查阅相关资料或访问其官方网站。

Datapro International Inc公司的发展小趣事

随着技术的不断进步和市场的不断扩大,Datapro International Inc公司开始寻求新的市场机会。他们发现,随着企业信息化程度的提高,对数据存储和处理的需求也越来越大。于是,公司决定进军企业市场,并开发了一系列针对企业的数据存储解决方案。

在拓展企业市场的过程中,Datapro International Inc公司面临着来自竞争对手的激烈竞争。然而,他们凭借卓越的产品质量、专业的技术服务和灵活的商业模式,成功赢得了客户的信任和支持。随着企业市场的不断拓展,Datapro International Inc公司的业务规模也逐渐扩大。

问答坊 | AI 解惑

新能源新趋势

新能源几乎成了“绿色”动力的代言。去年底发布的《新能源汽车生产准入管理规则》对新能源汽车有准确的定义,指采用非常规的车用燃料作为动力来源(或使用常规的车用燃料、采用新型车载动力装置),综合车辆的动力控制和驱动方面的先进技术,形成的 ...…

查看全部问答>

关于监控用的摄像头用的LED是什么样的?

遥控器用的红外LED,因为红外LED发出的光不完全是红外光,也包含部分的可见光(红色)成分,所以肉眼能看到少许光。遥控器使用的LED,一般发射角度是30度左右,用户即使没有完全对准目标,也能有效操作。在没有外界红外线干扰的时候,遥控距离可以 ...…

查看全部问答>

wince5.0怎么设置才能实现通过路由上网

最近我刚买一块2440的开发板,跑wince5.0,按照PC机设置wince,连上网线后不能上网!不知道是什么原因。PC机可以通过网线与ARM板通信。ftp和fttp都正常。那我应该怎么样设置或还需要哪些工作才能实现我这块开发板与网络的连接呢。…

查看全部问答>

wince安全性问题

在wince 6.0中我有一个客户端程序,先后两次调用InitializeSecurityContext用于和google服务器端进行安全认证,第一次调用返回的是SEC_I_CONTINUE_NEEDED,第二次返回的是SEC_E_WRONG_PRINCIPAL,请问怎么解决啊?是不是和证书有关系?相同程序在wi ...…

查看全部问答>

各位好心人帮忙解决一个usb驱动问题

小弟现在正在做一个Linux下usb鼠标驱动的程序,但编写程序时总是提示找不到linux/usb.h,望大家帮忙指点,岂求ING………

查看全部问答>

【招聘】汇编语言入门图书兼职作者

【招聘】汇编语言入门图书兼职作者 本公司是业内知名IT图书策划出版公司,正在运作一本汇编语言入门相关图书。想征求关于汇编语言的设计高手参与编写。有意者请将个人介绍和联系方式(QQ或MSN)发到本人邮箱macuilhy@sina.cn。…

查看全部问答>

讲了那么多技术,有没有导购的?

                                 要1K STM32f103c8T6,找谁?…

查看全部问答>

u8 sd_raw_get_info(struct sd_raw_info* info)中struct怎么理解

u8 sd_raw_get_info(struct sd_raw_info* info) { …… } 这个子程序怎么用啊,像u8 mmcWrite(u32 sector, u8* buffer)这种,我在主程序中只要定义unsigned char SD_Write1[]={\"0123456789\"}; 就可以用了mmcWrite(SD_Write1); 但是这个定义 ...…

查看全部问答>

TI 电源设计小贴士 9

欢迎来到电源设计小贴士!随着现在对更高效、更低成本电源解决方案需求的强调,我们创建了该专栏,就各种电源管理课题提出一些对您有帮助的小技巧。该专栏面向各级设计工程师。无论您是从事电源业务多年还是刚刚步入电源领域,您都可以在这里找到一 ...…

查看全部问答>