jk36125 发表于 2013-11-29 17:11:39

开源小项目LGT8F08A的USB引导程序: USeeBoot

USeeBoot: 又一个LGT的USB引导程序


[*]可在特定条件下,例如上电时PB2为低电平进入升级状态,升级条件可配置。
[*]应用程序代码无需更改,不需要将引导和应用程序链接到一起使用。
[*]自动重建中断向量,升级烧写时断电也不会变砖。
[*]Win32 GUI烧写程序
[*]FLASH第0页预留为中断向量使用,第1页至第5页为引导程序。
[*]应用程序的基地址为0x600(FLASH第六页起始)



默认的硬件配置为:
USB_DP --- PA0
USB_DN --- PA1
晶振 --- 16Mhz
引导模式 --- 上电时如果PB3=LOW或者应用程序区前4个字节都为0xFF则进入升级模式



如何使用:
1. 首先,你需要有一个现成的LGT编程器可以使用。
2. 如果你的USB硬件配置和上面的默认配置不同,你需要修改firmware\atmel_studio\board.h中的配置代码,并且重新编译程序。
3. 如果使用的晶振是12Mhz,将工程中的usbdrvasm16.inc文件替换为usbdrvasm12.inc。
4. 将编译得到的USBoot.hex文件使用编程器烧写到芯片中。
5. 此时芯片中的应用程序区全部为0xFF,USBoot会自动进入USB升级模式。
4. 连接LGT主板到PC上,使用software\libusb-win32\bin\inf-wizard.exe为其安装驱动程序。
5. 打开USBoot烧写程序software\bin\USBootPROG.exe,此时程序左下角应该显示“设备已连接”。
6. 点击“Hex文件”按钮选择应用程序的hex文件,点击写入按钮开始烧写。
7. 烧写完成以后,复位LGT芯片即可。
8. 需要再一次进入升级模式时,将PB3短接到地,重新上电即可。

USBoot源代码及工程(Atmel Studio 6.1):
硬件配置原理图:
Win32 GUI烧写程序:
烧写程序源代码及工程(VS2008):

注意:
应用程序的源代码无需做任何更改就可以使用USBoot烧写到芯片中。但是必须在编译时设置应用程序的基地址为0x600。在atmel studio中的配置如下图所示:



================作者罗嗦分割线 ===================

这个Boot使用了中断向量平移的方法,将除了复位向量以外的所有中断转移到应用程序区。当进入升级模式的时候,引导在INT0中断向量的位置上默默的写入自己的INT0中断处理函数地址。
当重新进入应用程序以前,引导会将自己的中断函数地址从中断向量中拿掉,写入转跳到应用程序区的代码。
这样做的原因是,LGT没有中断向量重映射的功能。因为必须重写中断向量区,所以FLASH的第0个页只能保留给中断向量(512字节)。
引导程序包含完整的V-USB代码以及FLASH编程驱动。编译完成以后大约为2.4KB左右(占用2560字节空间)。
所以,引导实际占用的空间为6个页=3KB。留给应用程序的空间为5KB。
对于8KB的FLASH来说,引导占用的空间很大。如果板子可以方便的使用ISP下载,使用ISP下载是更好的选择。
如果不能使用ISP下载,应用程序本身又小于5KB的话,USBoot还是具有一定的使用价值。

LGT 发表于 2013-11-29 20:10:36

完成度很高的项目,非常不错! 多谢支持!!

Yawgmoth 发表于 2013-11-30 00:34:42

之前有个linux的bootloader 这回win终于也有了 不知道3k能否继续精简

naiqiqnus 发表于 2013-11-30 12:39:39

{:smile:}{:smile:}{:smile:}{:smile:}

xwkm 发表于 2013-11-30 21:59:55

上次我也做过个HID模式的bootloader……

xwkm 发表于 2013-11-30 22:05:02

我的做法是引导程序在高2560B字节上驻留,无需改用户程序。在INT0上加个判断语句。把应用程序的INT0转写到另外的向量上。

xwkm 发表于 2013-11-30 22:07:53

不过我比较奇怪的问题就是说,上位机来USB包的时候写入会导致CPU停掉失去响应使上位机踢掉设备。你怎么解决的……

GunGun 发表于 2013-12-2 19:26:28

顶, 好贴!

fuyufu 发表于 2013-12-7 17:33:36

{:smile:}好帖,挺

GunGun 发表于 2014-10-6 15:34:35

今天闲得没事,下载编译了一遍,有下面的错误:
Error        1        'EEDHR' undeclared (first use in this function)        F:\AVRStudio\LGTBoot\flash.c        37        3        USBoot

GunGun 发表于 2014-10-6 15:37:14

头文件里只见有个:
#define EEDRH        (*(volatile unsigned char *)0x49)

应该是楼主笔误吧?!

leo_advance 发表于 2014-10-6 15:50:50

好帖,挺

qxc16b 发表于 2014-10-20 14:20:32

谢谢分享................
页: [1]
查看完整版本: 开源小项目LGT8F08A的USB引导程序: USeeBoot