搜索
bottom↓
回复: 93
打印 上一主题 下一主题

【原创】AVR系列Bootloader上下位机

  [复制链接]

出200入2554汤圆

跳转到指定楼层
1
发表于 2015-4-23 16:15:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 t3486784401 于 2015-4-23 16:15 编辑

【背景】
----------
前几年玩AVR的时候接触了 Bootloader,发现可以实现类似 STC 的在线串口下载,省去了每次连接下载器的步骤,确实很方便。
论坛里也有一些项目发起了通用 Bootloader 的编写,我接触的几个都是 GCC-ASM 汇编实现的,充实了我前几年玩 AVR 的时光。

然而近几年用这些 Bootloader 的过程,也积攒了一堆堆不方便的感受,写写大概有这么几点:

1. 毕竟是汇编写的,每次新增器件改起来不是那么方便,尤其现在我换了 win8 系统,连 GCC 都装不上去,更别说改了;
2. 上位机是 Avr Studio 的 AVRPROG.EXE,在 XP 下表现还算稳定,win7/8 下动不动死掉神马的神烦;
3. AVRPROG.EXE 即使点了退出按钮,只要界面不关掉,还是占用着串口句柄的,我要串口通信助手就打不开,神烦;
4. 坛子里最新的 Bootloader 已经是 600+字节 大小了,尺寸非常尴尬,必须要用 512Words 的启动区,
    放在 M8/M48 这样的单片机了占用 FLASH 相当可观,眼看着好大一块被占用,而且是浪费,有点不爽。

鉴于此,早就有想法自己写 Bootloader 了,全套上下位机包办,哪里不爽改哪里。

【下位机】
-------------
下位机的话,我手头有 ICCAVR v7.14,在 win8 下表现不错,准备就用这个来搞。要求只有一个:尺寸≤512B

实际编程过程中用 C-ASM 混编的方式,主框架用 C 来搞,细节寄存器操作(SPM指令必需使用 R0/R1/Z 寄存器)用汇编。

为进一步减小尺寸,做了这几部代码优化:
1. 整个FLASH / EEPROM 区循环的控制不再用 16位数比较 了,太浪费指令,改用与运算;
2. 重写了 startup 库文件,删除了 main 函数之前大量的内容,仅保留简单堆栈初始化;
3. 除了 boot_reset 向量外,不适用额外的中断向量;
4. 功能限定在 FLASH 读写、 EEPROM 读写,其他暂时不考虑;
5. 程序应该有足够的能力防止自宫(确保 Bootloader 操作不至于锁片子)。

现在已经写出来了 m8、m328 版的bootloader,烧录时需要使用 BLB 熔丝位限定自宫,特性如下:
fosc= 7.3728 MHz
size= 512 B
led = PB0, PB1(指示用,非必要)

【上位机】
-------------
上位机的话,我用的是经典的 VS2005,用 MFC 开发。要求不多:XP/win7/win8 全兼容

实际编程过程中为了进一步提升稳定性,连 ActiveX 都没用(MSComm拜拜了),用的是 API+多线程实现的串口通信。
这样做的好处是哪天闲来想用 WinCE 搞了,直接 ebd 编译一下就通过了,代码兼容。

为了精简界面,做了这几部分设计:
1. 将FLASH区、EEPROM区单独对待,即同一片单片机,FLASH、EEPROM的操作认为是两个芯片的;
2. 添加了精简的串口控制代码,使用字串实现串口参数设定,简单高效;
3. 计划做一个器件列表方便后期追加的,现在看来还等闲下来再去实现吧。

现在的上位机具备 m8、m328p 的编写功能,支持 hex、bin 格式文件,支持串口重复连接。

实测性能如下:
m328p 全 FLASH 编写时间:<15s
m328p 全 FALSH 读取时间:<3s
m328p 全 EEPROM 编写时间:<3s
m328p 全 EEPROM 读取时间:<1s
m8的还没测,正比于容量的,自行补脑吧

【用法】
----------
用任意一种下载器(我用的是自制AVRISP)把HEX文件烧录入 FLASH,时钟调整为 7.3728M 外部晶振
熔丝设定成从 256WORD 启动区加载,并且编写保护位 BLB12(防止自宫)。
剩下的就是每次复位时有 1s 左右的 BOOT 判决时间,若上位机不连接则跳转 $0000 主程序

【附件】
----------
废话不多说,直接发源码,其他片子的支持等后期闲下来再往里添加吧:

m8下位机(7.3728MHz):

m328p下位机(7.3728MHz):

PC上位机(WinXP/7/8):


附上一张用 m328p-bldr 灌入程序的运行照片,缅怀一下那个撸啊撸的年代


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

2
发表于 2015-4-23 16:20:56 | 只看该作者

出0入0汤圆

3
发表于 2015-4-23 16:32:20 | 只看该作者
赞一个,力挺

出0入0汤圆

4
发表于 2015-4-23 16:57:30 | 只看该作者
謝謝,收藏備用.

出0入0汤圆

5
发表于 2015-4-23 17:32:05 | 只看该作者
给力,呵呵,支持。

出0入147汤圆

6
发表于 2015-4-23 17:50:01 | 只看该作者
过了下代码,很简洁,提个BUG,协议里提到字符'+'是进入Bootloader,但是EnterCheck里面没有进行相应的判断,而是有收到串口数据就进入Bootloader,这样容易卡死在Bootloader里面。

出0入0汤圆

7
发表于 2015-4-23 18:33:06 | 只看该作者
mark下,备用

出0入0汤圆

8
发表于 2015-4-23 20:12:29 | 只看该作者
顶一个。。。。。。。。。。

出200入2554汤圆

9
 楼主| 发表于 2015-4-23 22:00:00 来自手机 | 只看该作者
dreampet 发表于 2015-4-23 17:50
过了下代码,很简洁,提个BUG,协议里提到字符'+'是进入Bootloader,但是EnterCheck里面没有进行相应的判断 ...

这个的确是的,也是个矛盾:好调试的loader太容易误进,还就是真心不愿意在这里浪费太多空间啊,512字节手一滑就满了

出200入2554汤圆

10
 楼主| 发表于 2015-4-23 22:03:20 来自手机 | 只看该作者
感谢各位捧场啊,这个项目就是自己用着玩的,关于稳定性还是要后期再做更新的,到时再来分享

出200入2554汤圆

11
 楼主| 发表于 2015-4-23 22:07:26 来自手机 | 只看该作者
dreampet 发表于 2015-4-23 17:50
过了下代码,很简洁,提个BUG,协议里提到字符'+'是进入Bootloader,但是EnterCheck里面没有进行相应的判断 ...

这个问题在硬件上有一处设计:程序开启了rxd的上拉电阻,在单片机引脚全悬空时不会因为cmos干扰进去loader,而这种误触发是以前碰到最多的。
当然后续改进还是要判断下字符为妥。

出0入0汤圆

12
发表于 2015-4-24 06:37:20 来自手机 | 只看该作者
做完了51单片机,下一步就开始做AVR了。

出0入0汤圆

13
发表于 2015-4-24 06:58:08 | 只看该作者
多谢!

出0入0汤圆

14
发表于 2015-4-24 08:01:00 | 只看该作者
赞一个!

出200入2554汤圆

15
 楼主| 发表于 2015-5-26 20:26:27 | 只看该作者
发现个把月前的帖子不能重新编辑了,为了给坛子省省空间,暂时不新开帖,就在这里回复来进行更新吧。

-------------------------------------------------------
【软件更新-2015-05-26】
-------------------------------------------------------

今天更新了一下固件,主要包含如下几个方面:

1. 添加了一个 32.768K 主频的 m88p 系统的下位机程序,通信使用 4096bps
2. 上位机(AvrHost)适配了上述新增下位机,并且已测试对早前版本兼容
3. 上位机(AvrHost)新增了读取(Read)/校验(Verify)过程中的进度条显示

上位机读取进度过程中,双线程共用了 CArray 类,目前测试没看到明显的临界区问题。
目测是偶尔读错一次也不至于造成进度条过分跳动,更不会影响 APP 稳定性。

总之还是闲话少说,上附件:

#1:新增m88p下位机,
#2:更新了的上位机,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出390入22汤圆

16
发表于 2015-5-27 15:29:16 | 只看该作者
下位机用ICC编写的吗?我的ICC是7.22版本,怎么缺bldr_startup.o文件?这是个什么文件?

出390入22汤圆

17
发表于 2015-5-27 15:30:41 | 只看该作者
重新建立文件编译通过了

出200入2554汤圆

18
 楼主| 发表于 2015-5-31 12:59:48 | 只看该作者
liudingding 发表于 2015-5-27 15:29
下位机用ICC编写的吗?我的ICC是7.22版本,怎么缺bldr_startup.o文件?这是个什么文件? ...

bldr_startup.o 是自己定制的启动文件(链接过程中位于RESET和MAIN之间),用于最小化程序尺寸。

项目包里已经包含了这个文件了(Startup文件夹下),在项目设置里指定一下非标准的启动文件即可。
重建项目的话,有可能使用了默认的启动文件,编译尺寸会增加,想进512B很难。

说句题外话,在定制过程中,删除了静态区的初始化代码,因而C当中全局变量初始化、局部静态的初始化都是无效的。

出0入0汤圆

19
发表于 2015-5-31 22:04:26 | 只看该作者
是否可以改成用8M 外部或内部晶振的,7.3728MHz外部晶振比较少用
ICCAVR 没用过,呵呵

出0入0汤圆

20
发表于 2015-5-31 22:17:00 | 只看该作者
楼主太强了,赞一个

出200入2554汤圆

21
 楼主| 发表于 2015-6-1 12:03:14 | 只看该作者
本帖最后由 t3486784401 于 2015-6-1 12:13 编辑
hzyjq 发表于 2015-5-31 22:04
是否可以改成用8M 外部或内部晶振的,7.3728MHz外部晶振比较少用
ICCAVR 没用过,呵呵 ...


直接用8M的话,微调波特率就行:上位机支持直接指定波特率,理论上应该跑出125kbps的速度,具体是否好使我改天验证下。

当时从 7.3728M 移植 32K 时,下位机就只是调整了几个等待延时(字节间超时神马的),上位机指定4096bps 波特率,功能上直接兼容的。
所以 7.3728M 直接移植 8M 环境,应该只是改下上位机波特率就行,理论波特率= 115.2kbps *8 /7.3728 = 125kbps.

当然这跟 COM 端口芯片有很大关系,125kbps属于非整数的波特率(会使芯片内部分频器理论分频值非整数)实际会有舍入误差,造成通信不稳。

至于内部晶振,这个稳定度实在不敢恭维:以前用 TINY13 写过基于内部晶振的模拟UART,接收过程中使用定时器CTC模式进行RXD采样,结果
少数几个字节还行,字节数多起来以后很容易采样跑偏(波特率不准了)。虽然说可以用串口进行AVR内部频率校准,但是这个校准程序真心会
消耗掉太多的BOOTLOADER区大小,这也是很矛盾的事情。

出200入2554汤圆

22
 楼主| 发表于 2015-6-1 12:14:12 | 只看该作者
dmzy 发表于 2015-5-31 22:17
楼主太强了,赞一个

感谢各位捧场!
有东西了还得大家多多交流!

出0入0汤圆

23
发表于 2015-6-1 21:52:19 | 只看该作者
t3486784401 发表于 2015-6-1 12:03
直接用8M的话,微调波特率就行:上位机支持直接指定波特率,理论上应该跑出125kbps的速度,具体是否好使 ...

谢谢楼主的回复,有时应用会因为各种限制无法装外部晶振,可以考虑用内部振荡器,然后降低波特率提高联通率,呵呵,象STM8好象也是用内部振荡器。

出200入2554汤圆

24
 楼主| 发表于 2015-6-2 10:04:34 | 只看该作者
hzyjq 发表于 2015-6-1 21:52
谢谢楼主的回复,有时应用会因为各种限制无法装外部晶振,可以考虑用内部振荡器,然后降低波特率提高联通 ...

等有心开发 1KB 版的 Loader 时,可以考虑这个功能了,现在 512B 常规功能都快写吐血了。

为了这个精简的尺寸,真心牺牲了很多功能。

出200入2554汤圆

25
 楼主| 发表于 2015-6-3 18:39:31 | 只看该作者
帖子不能重新编辑真心不太爽,有更新也没法直接通知各位,就在这里默默走起吧。

-------------------------------------------------------
【软件更新-2015-06-03】
-------------------------------------------------------

今天更新了 PC 端上位机程序,开放了器件列表接口、串口配置接口。

1. 上位机(AvrHost)启动时将加载同目录下的 "Devices.CSV" 完成器件加载,后续新增器件只要追加改动这个 CSV 文件即可;
2. 上位机(AvrHost)的串口配置字串将实时与同目录下 "ComParm.TXT" 同步,因而软件可以记录(或者修改)最近串口配置;
3. CSV文件加载过程有较为完善的语义检查(详见代码),填写方法在文件示例中有注释。

功能上和前一个版本(v3.0)是兼容的,接口的开放可以给以后增添器件带来便利。以下是更新了的附件:

#1:更新了的上位机:

#2:配置文件示例(与项目包中相同):

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

26
发表于 2015-6-4 12:30:14 | 只看该作者
樓主確實做得很好.
以前玩過 6808 的 BOOTLOADER, 在半K容量底下做的, 還很省
找找看http://cache.freescale.com/files ... app_note/AN2295.pdf
或許可以更上層樓
加油.

出200入2554汤圆

27
 楼主| 发表于 2015-6-4 14:28:03 | 只看该作者
xiaolaba 发表于 2015-6-4 12:30
樓主確實做得很好.
以前玩過 6808 的 BOOTLOADER, 在半K容量底下做的, 還很省
找找看http://cache.freescal ...

非常感谢分享文档!
看了文档中关于 Bootloader 的状态机描述,写的真心好,以后可以借鉴借鉴

出0入0汤圆

28
发表于 2015-6-15 14:59:35 | 只看该作者
t3486784401 发表于 2015-6-4 14:28
非常感谢分享文档!
看了文档中关于 Bootloader 的状态机描述,写的真心好,以后可以借鉴借鉴 ...

期待你的大作

出200入2554汤圆

29
 楼主| 发表于 2016-1-13 13:26:10 | 只看该作者
好久没来更新这个帖子了,也积攒了不少新的 Bootloader 代码。话说原创开源这么多不知能不能申请个精品啥的....

-------------------------------------------------------
【软件更新-2016-01-13】
-------------------------------------------------------

此次更新主要引入了 EX 系列的下位机(通信协议扩展,使支持 >64KB 单片机),上位机兼容现有的两种通信协议。

目前大容量单片机写入速度的确有待优化,实测 M2560 全片写入约 2分半(大量时间是浪费在串口包 ACK 上),
M2560 全片读取 半分钟,其它容量读写时间和这个成比例,以后再慢慢改吧(主要是上位机超时需要能自适应下)。

#1:双协议版上位机:

#2:MEGA64 下位机(115.2kbps @7.3M):

#3:MEGA128 下位机(115.2kbps @7.3M):

#4:MEGA2560 下位机(Arduino,125kbps @16M):

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

30
发表于 2016-1-13 14:40:02 | 只看该作者
还没试过BOOTLOADER,有空研究研究,谢谢楼主分享。

出0入0汤圆

31
发表于 2016-1-13 14:45:58 来自手机 | 只看该作者
赞一个,高手!

出0入0汤圆

32
发表于 2016-6-19 11:22:29 | 只看该作者
谢谢楼主啊,刚刚开始搞远程升级AVR,一头雾水,有借鉴太好了。

出0入25汤圆

33
发表于 2016-9-11 06:26:46 | 只看该作者
gooooooood

出200入2554汤圆

34
 楼主| 发表于 2016-9-14 01:29:35 | 只看该作者
zhubamboo03 发表于 2016-6-19 11:22
谢谢楼主啊,刚刚开始搞远程升级AVR,一头雾水,有借鉴太好了。

感谢大家来捧场,请关注我本帖后续的应用提示,也是最近在做出来的BUG

出200入2554汤圆

35
 楼主| 发表于 2016-9-14 01:35:24 | 只看该作者
最近移植了几个特定系统板专用的 Bootloader,涵盖 M8/M328/M16 型号,核心代码还是那一堆东西。

然而不经意间发现了 AVR 用 Bootloader 的一个掉电隐患,详见我的帖子:http://www.amobbs.com/thread-5659580-1-1.html

-------------------------------------------------------
【安全提示-2016-09-14】
-------------------------------------------------------

原因在帖子中已有详细分析,虽不算 Bootloader 的过错,但会影响到软件稳定性,因而为确保安全,熔丝位应确认勾选掉电检测:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

36
发表于 2016-9-28 22:44:32 | 只看该作者
要是有IAR的就好了

出0入0汤圆

37
发表于 2016-9-29 08:19:54 | 只看该作者
谢楼主分享

出85入85汤圆

38
发表于 2016-9-29 09:58:00 | 只看该作者
大师,收藏了

出200入2554汤圆

39
 楼主| 发表于 2016-9-29 22:54:15 | 只看该作者

由于启动代码都重写了,IAR 的话需要你能控制编译器产生的启动代码(初始化全局变量、堆栈啥的),

其他的 C 和内嵌汇编都差不多,目次就是换个 asm 宏就完事了

出200入2554汤圆

40
 楼主| 发表于 2016-9-29 22:54:52 | 只看该作者

本来都是来自论坛的经验知识,所以大家齐分享

出200入2554汤圆

41
 楼主| 发表于 2016-9-29 22:55:12 | 只看该作者

感谢捧场啊

出0入0汤圆

42
发表于 2016-10-10 16:48:17 | 只看该作者
t3486784401 发表于 2016-9-29 22:54
由于启动代码都重写了,IAR 的话需要你能控制编译器产生的启动代码(初始化全局变量、堆栈啥的),

其他 ...

楼主有没有这方面的资料,我现在想用IAR搞搞

出200入2554汤圆

43
 楼主| 发表于 2016-10-10 21:26:14 | 只看该作者
一往无前 发表于 2016-10-10 16:48
楼主有没有这方面的资料,我现在想用IAR搞搞

看看 IAR 安装目录下有没什么手册吧,我就是用 ICC 自带的手册看明白怎么用的

出0入0汤圆

44
发表于 2016-10-10 23:52:17 | 只看该作者
谢楼主分享                     

出0入0汤圆

45
发表于 2016-10-11 06:15:09 来自手机 | 只看该作者
谢谢,我现在用的上

出0入0汤圆

46
发表于 2016-10-11 08:30:00 | 只看该作者
不用avr也顶一下

出0入0汤圆

47
发表于 2016-10-15 14:32:05 | 只看该作者
好东西,谢谢楼主。开始研究bootloader

出0入0汤圆

48
发表于 2016-11-12 14:12:35 | 只看该作者
帖主的確是有心人
謝謝分享

出200入2554汤圆

49
 楼主| 发表于 2016-11-12 16:17:23 | 只看该作者

前些年无心的作品,能得到大家肯定还是很欣慰的:)

出200入2554汤圆

50
 楼主| 发表于 2016-11-12 16:18:25 | 只看该作者
Ideal-007 发表于 2016-10-11 06:15
谢谢,我现在用的上

目前除了掉电的风险需要 BOD 检测来搞定,其他我自己用着还是很好的,除了在超大 FLASH (>128KB)速度待优化

出200入2554汤圆

51
 楼主| 发表于 2016-11-12 16:19:36 | 只看该作者

思路都是一样的:了解单片机能干啥,然后自己制订一套协议

现在玩 STM32 都标配 BOOTLOADER 了,微微有些不能体现工作量

出200入2554汤圆

52
 楼主| 发表于 2016-11-12 16:20:39 | 只看该作者
foxwolf_ym 发表于 2016-10-15 14:32
好东西,谢谢楼主。开始研究bootloader

个人感觉 AVR 在 Bootloader 的支持上还是很有学习的必要的,可以锻炼下简单的上下位机系统。

STM32 就自带了,想练手也没得练习了

出200入2554汤圆

53
 楼主| 发表于 2016-11-12 16:21:59 | 只看该作者
xiaolaba 发表于 2016-11-12 14:12
帖主的確是有心人
謝謝分享

看到这个头像,我就想起大家对我的期待了,果然还是需要加把劲。

AVR 最近自制了一批板子,类似 ARDUINO,正玩得火热

出0入0汤圆

54
发表于 2016-11-12 17:15:49 | 只看该作者
t3486784401 发表于 2016-11-12 16:21
看到这个头像,我就想起大家对我的期待了,果然还是需要加把劲。

AVR 最近自制了一批板子,类似 ARDUINO ...

如果固定偵測一只IO腳H或L, 再決定是否BOOTLOAD, 會不會更可靠, 代碼更緊縮一些呢

出200入2554汤圆

55
 楼主| 发表于 2016-11-12 22:46:04 | 只看该作者
xiaolaba 发表于 2016-11-12 17:15
如果固定偵測一只IO腳H或L, 再決定是否BOOTLOAD, 會不會更可靠, 代碼更緊縮一些呢 ...

这个是的,硬件引导 BOOT 功能的确可以有很好的可靠性,不过代价就是,牺牲了固定的 IO 功能。

比如 STM32,自带 BOOT0/1 引脚用于处理 BOOTLOADER 功能,但代价也就是系统总没办法做到最精简。

作为一个通用的 BOOTLOADER,也就是权衡了很多才选择了这种超时退出的特性

出0入0汤圆

56
发表于 2016-11-13 08:42:46 | 只看该作者
本帖最后由 xiaolaba 于 2016-11-13 08:44 编辑
t3486784401 发表于 2016-11-12 22:46
这个是的,硬件引导 BOOT 功能的确可以有很好的可靠性,不过代价就是,牺牲了固定的 IO 功能。

比如 STM ...


UART 的IO PIN一般都是多功能.也一般都有開漏或開集

出200入2554汤圆

57
 楼主| 发表于 2016-11-15 22:27:00 | 只看该作者
-------------------------------------------------------
【软件更新-2016-11-15】
-------------------------------------------------------

按着最原先的设想,定期来更新帖子。此次更新内容包括上位机PROG性能、M2560下位机。

上位机主要针对大 FLASH 单片机,优化了 PROG 指令的数据包超时,大幅度降低了下载时间。
实测 M2560 全片 256KB 下载时间由 150s 下降至 45s,读取仍然半分钟(受限于波特率)。

下位机做了一个尝试,用 M2560 加入了签名、熔丝位读取,I 指令即可完成读取,详见代码。


#1:优化 PROG 版上位机(下位机全兼容):

#2:MEGA2560下位机(Arduino,125kbps @16M):

--------------------------------------------------------

P.S. 本来最近拿出吃灰的 Arduino_m2560_r3 想把玩一番,结果发现这玩意居然是陶振!各种不准!
待我另开个帖子慢慢吐槽......

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

58
发表于 2017-5-30 18:47:43 | 只看该作者
关注,留贴,谢谢                     

出0入0汤圆

59
发表于 2017-5-31 10:34:00 | 只看该作者
Thank you !!!

出0入0汤圆

60
发表于 2017-6-2 15:28:45 | 只看该作者
看到这个贴子还是很激动的,因为我正要用到BOOTLOADER

出0入0汤圆

61
发表于 2017-6-2 15:38:23 | 只看该作者
楼主太强了,赞一个

出200入2554汤圆

62
 楼主| 发表于 2017-6-3 22:31:15 | 只看该作者
yinian 发表于 2017-5-30 18:47
关注,留贴,谢谢

感谢大家来捧场!最近更新了一批 arduino-uno 的驱动,有空来搞搞

出200入2554汤圆

63
 楼主| 发表于 2017-6-3 22:31:46 | 只看该作者
权中正 发表于 2017-6-2 15:28
看到这个贴子还是很激动的,因为我正要用到BOOTLOADER

BOOTLOADER 其实不难,好好阅读手册自己就能写出来,手册里也有示例代码

出200入2554汤圆

64
 楼主| 发表于 2017-6-3 22:32:13 | 只看该作者

这么久远的帖子,感谢大家来捧场!

出200入2554汤圆

65
 楼主| 发表于 2017-6-3 22:33:52 | 只看该作者
51EDA技术 发表于 2017-6-2 15:38
楼主太强了,赞一个

感谢捧场!AVR的 BOOTLOADER 还是做得很好的,至少可以自己定制很多东西,拿来练练手正合适。

可惜了买了,要是能给老姚这样的买下来该多好,不过美帝也不傻

出0入0汤圆

66
发表于 2017-6-3 22:44:01 | 只看该作者
不错 正在研究

出0入399汤圆

67
发表于 2017-8-21 16:39:15 | 只看该作者
楼主,我想给mega64烧个,按这样设置对吧:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入399汤圆

68
发表于 2017-8-21 17:15:50 | 只看该作者
t3486784401 发表于 2017-6-3 22:33
感谢捧场!AVR的 BOOTLOADER 还是做得很好的,至少可以自己定制很多东西,拿来练练手正合适。

可惜了买 ...

那个bootrst是不是需要设置成0?

出0入0汤圆

69
发表于 2017-8-22 13:34:36 | 只看该作者
谢谢分享,BOOTLOADER

出200入2554汤圆

70
 楼主| 发表于 2017-8-22 16:40:59 | 只看该作者
R88 发表于 2017-8-21 17:15
那个bootrst是不是需要设置成0?

有这么几个点要注意,其他配置按照需求进行:

  1. ; M103C      = 1     不使用兼容模式
  2. ; WDTON      = 1     禁用看门狗
  3. ; BOOTSZ[1:0]= 11    启动区1KB
  4. ; BOOTRST    = 0     复位至启动区
  5. ; CKSEL[3:0] = 111X  选择外部7.3728M晶振

  6. ; BLB11      = 0     避免SPM自宫
复制代码

出0入399汤圆

71
发表于 2017-8-22 17:22:33 | 只看该作者
t3486784401 发表于 2017-8-22 16:40
有这么几个点要注意,其他配置按照需求进行:

是这样么:我看你楼主是BLB12呢

之后装入FLASH,点编程就可以了么?自动下载到boot区了?不会下到应用部分么?不需要指定地址?我没下载过bootloader

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入399汤圆

72
发表于 2017-8-23 12:36:53 | 只看该作者
t3486784401 发表于 2017-8-22 16:40
有这么几个点要注意,其他配置按照需求进行:

楼主我今天往avr中下载bootloader时,不知道为何下载居然用了5分钟,进度特别慢。下载完之后看PA0的波形一直是高电平,每个1S多一点出现一个低电平,是什么原因?boot没下载对么?

出200入2554汤圆

73
 楼主| 发表于 2017-8-25 15:53:56 | 只看该作者
R88 发表于 2017-8-22 17:22
是这样么:我看你楼主是BLB12呢

之后装入FLASH,点编程就可以了么?自动下载到boot区了?不会下到应用部 ...

熔丝位是这个配置, BLB11=0 在很多编程器下对应 PROG(打钩)状态。

直接把 HEX 下载到 FLASH 当中,复位单片机就应该进入 BOOTLOADER 了;
之后用 AvrHost 选择正确的端口、波特率就可以引导下载了

出200入2554汤圆

74
 楼主| 发表于 2017-8-25 15:56:22 | 只看该作者
R88 发表于 2017-8-23 12:36
楼主我今天往avr中下载bootloader时,不知道为何下载居然用了5分钟,进度特别慢。下载完之后看PA0的波形 ...

是不是晶振没起振,或者振荡的频率不对啊。

bootloader 只是个常规的程序,自动定位在 FLASH 最后 1KB 位置。
这个现象是下载器有问题吧

出0入399汤圆

75
发表于 2017-8-25 16:03:12 | 只看该作者
t3486784401 发表于 2017-8-25 15:56
是不是晶振没起振,或者振荡的频率不对啊。

bootloader 只是个常规的程序,自动定位在 FLASH 最后 1KB  ...

我下载成功了,是应用程序区没程序的原因。

还有三个关于使用上的问题:

1,“在定制过程中,删除了静态区的初始化代码,因而C当中全局变量初始化、局部静态的初始化都是无效的。”这句话是什么意思?影响应用程序的运行么?

2,还有一点,“启动代码都重写了”,如果我用AVRstudio+gcc写的应用程序,这个启动代码是不是软件自己就带了,也就是我avrstudio生成的hex中是不是有启动代码了?那和你bootloader中的启动代码是不是重了?

3,关于你说的“坛子里最新的 Bootloader”,那个链接有么,因为我也用的GCC。

出0入399汤圆

76
发表于 2017-8-25 16:04:24 | 只看该作者
t3486784401 发表于 2017-8-25 15:56
是不是晶振没起振,或者振荡的频率不对啊。

bootloader 只是个常规的程序,自动定位在 FLASH 最后 1KB  ...

下载的就是特别慢。下载一次bootloader时间特别长。

出200入2554汤圆

77
 楼主| 发表于 2017-8-31 18:17:09 | 只看该作者
R88 发表于 2017-8-25 16:03
我下载成功了,是应用程序区没程序的原因。

还有三个关于使用上的问题:

第一个问题是关于代码修改的,因为我重写了 startup 代码
(单片机从复位到main之间的汇编指令,用于初始化各种变量到物理的SRAM),
所以即使你在 C 里边声明了全局变量并给赋初值,实际上是没有用的。
已写好的代码当中遵循这个规则,写这个注释是用于提醒未来修改代码。

第二个问题,如果你用其他的编译器,肯定是需要重新定制 startup 代码的,
每个编译器都有一套自己的 startup 的语法、用法,GCC得再研究了。

第三个问题,我这个帖子都已经两年了,那个时候坛子里有个通用 BOOTLOADER,搜一下就有了
https://www.amobbs.com/forum.php ... %E7%94%A8BOOTLOADER

出200入2554汤圆

78
 楼主| 发表于 2017-9-30 14:30:33 | 只看该作者
-------------------------------------------------------
【软件更新-2017-09-30】
-------------------------------------------------------

这次更新带来两个 Arduino  主板用的 Bootloader:UNO(M328 @16M) 和 MEGA(M2560 @16M)

UNO 版本就是在之前 M328 基础上改动了波特率的,使用 125kbps, 8n1 通信格式。

MEGA 版本是一个修正版,原 v1.1/s 版本存在 RET 堆栈问题,导致某些 $0000H 处指令不能正确执行。
另外这个版本将波特率提升至 200kbps,15s 就可以全片读一遍。

UNO 版本:

MEGA 修正版本:

-------------------------------------------------------

Arduino 的库做的还是不错的,比较适合来灵感了一顿搞

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

79
发表于 2017-10-2 09:45:17 | 只看该作者
本帖最后由 xiaolaba 于 2017-10-2 09:48 编辑
t3486784401 发表于 2017-9-30 14:30
-------------------------------------------------------
【软件更新-2017-09-30】
-------------------- ...


沒想到貼主一直在驅動這個
有沒有想要把他放到 GITHUB, 方便世人景仰, 同時更有系統地完備Q&A還有使用的範疇呢.

最近也有再看這個, 類似的作法不過好像都是BAUD RATE 自適應的
http://jtxp.org/tech/tinysafeboot_en.htm

出0入0汤圆

80
发表于 2017-10-2 10:29:23 | 只看该作者
服务方式

出200入2554汤圆

81
 楼主| 发表于 2017-10-2 12:12:45 | 只看该作者
xiaolaba 发表于 2017-10-2 09:45
沒想到貼主一直在驅動這個
有沒有想要把他放到 GITHUB, 方便世人景仰, 同時更有系統地完備Q&A還有使用的 ...

GitHub 一直处于 听说过 的状态,看来有必要来学一学了

出0入0汤圆

82
发表于 2018-5-9 16:07:42 | 只看该作者
支持帮顶

出0入0汤圆

83
发表于 2018-7-1 15:37:04 | 只看该作者
mask
学习一下

出100入9汤圆

84
发表于 2023-7-24 21:20:18 | 只看该作者
老哥,你这程序485系统能用不?能用就直接拿来用了

出100入9汤圆

85
发表于 2023-7-24 21:21:07 | 只看该作者
t3486784401 发表于 2015-4-23 22:00
这个的确是的,也是个矛盾:好调试的loader太容易误进,还就是真心不愿意在这里浪费太多空间啊,512字节 ...
(引用自9楼)


老哥,你这程序485系统能用不?能用就直接拿来用了

出200入2554汤圆

86
 楼主| 发表于 2023-7-24 21:30:40 | 只看该作者
rzsab 发表于 2023-7-24 21:21
老哥,你这程序485系统能用不?能用就直接拿来用了
(引用自86楼)

理论上没问题。485 只是电平协议,实际时间协议只要还是 UART 就行。

出1000入0汤圆

87
发表于 2023-7-25 09:43:08 | 只看该作者
下载学习,感谢

出100入9汤圆

88
发表于 2023-8-9 12:24:06 | 只看该作者
本帖最后由 rzsab 于 2023-8-9 12:35 编辑
t3486784401 发表于 2015-6-3 18:39
帖子不能重新编辑真心不太爽,有更新也没法直接通知各位,就在这里默默走起吧。

------------------------ ...
(引用自25楼)


老哥,现在用你的程序,芯片MEGA88PA,现在是这么回事,也不知原因:
1:BOOT程序通过DRAGON仿真器能正常运行,下载,下载的应用程序正常运行,每次通过仿真器仿真都正常。
2:下载程序后,单片机重新上电,能从BOOT程序运行到应用程序,BOOT程序和应用程序各有指示灯。
3:第二条基础上,重新上电,不能联机,写了个测试M88接收到数据的程序,该程序没反应。
4:单片机复位脚复位后,松开复位键,复位脚电压正常了,既不运行运行BOOT程序,也不运行应用程序,复位脚通过10K电阻接电源,复位脚没编程,仿真、下载应用正常。

不知什么原因,能指点一下下一步思路?

出200入2554汤圆

89
 楼主| 发表于 2023-8-9 12:33:16 | 只看该作者
rzsab 发表于 2023-8-9 12:24
老哥,现在用你的程序,芯片MEGA88PA,现在是这么回事,也不知原因:
1:BOOT程序通过DRAGON仿真器能正常 ...
(引用自89楼)

一般要锁住 BLB11 熔丝(=0),防止 Bootloader 自宫

出100入9汤圆

90
发表于 2023-8-9 12:35:59 | 只看该作者
t3486784401 发表于 2023-8-9 12:33
一般要锁住 BLB11 熔丝(=0),防止 Bootloader 自宫
(引用自90楼)


上述第二条随时正常,不像自宫过,试试看

出100入9汤圆

91
发表于 2023-8-9 12:44:32 | 只看该作者
t3486784401 发表于 2023-8-9 12:33
一般要锁住 BLB11 熔丝(=0),防止 Bootloader 自宫
(引用自90楼)

自宫了,好了

出200入2554汤圆

92
 楼主| 发表于 2023-8-9 14:28:27 | 只看该作者
rzsab 发表于 2023-8-9 12:44
自宫了,好了
(引用自92楼)

看样子就是这里了,祝顺利!

出100入9汤圆

93
发表于 2024-2-29 14:57:07 | 只看该作者
本帖最后由 rzsab 于 2024-2-29 15:00 编辑
t3486784401 发表于 2023-8-9 14:28
看样子就是这里了,祝顺利!
(引用自92楼)


老兄,M8,flash起始空间没用上,这个问题怎么解决?是编译器的问题吗?ICC7.22
程序应该是从0x1E00开始吧?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出200入2554汤圆

94
 楼主| 发表于 2024-2-29 15:06:43 来自手机 | 只看该作者
rzsab 发表于 2024-2-29 14:57
老兄,M8,flash起始空间没用上,这个问题怎么解决?是编译器的问题吗?ICC7.22
程序应该是从0x1E00开始 ...

(引用自93楼)

程序是flash的最后512字节。

对于m8,的确是要从字节地址 1e00 开始的。你这个 1e00 看起来没指令,不知是怎么搞的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 17:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表