【原创】AVR系列Bootloader上下位机
本帖最后由 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 灌入程序的运行照片,缅怀一下那个撸啊撸的年代
{:victory:}{:victory:}{:victory:} 赞一个,力挺 謝謝,收藏備用. 给力,呵呵,支持。 过了下代码,很简洁,提个BUG,协议里提到字符'+'是进入Bootloader,但是EnterCheck里面没有进行相应的判断,而是有收到串口数据就进入Bootloader,这样容易卡死在Bootloader里面。 mark下,备用 顶一个。。。。。。。。。。 dreampet 发表于 2015-4-23 17:50
过了下代码,很简洁,提个BUG,协议里提到字符'+'是进入Bootloader,但是EnterCheck里面没有进行相应的判断 ...
这个的确是的,也是个矛盾:好调试的loader太容易误进,还就是真心不愿意在这里浪费太多空间啊,512字节手一滑就满了 感谢各位捧场啊,这个项目就是自己用着玩的,关于稳定性还是要后期再做更新的,到时再来分享 dreampet 发表于 2015-4-23 17:50
过了下代码,很简洁,提个BUG,协议里提到字符'+'是进入Bootloader,但是EnterCheck里面没有进行相应的判断 ...
这个问题在硬件上有一处设计:程序开启了rxd的上拉电阻,在单片机引脚全悬空时不会因为cmos干扰进去loader,而这种误触发是以前碰到最多的。
当然后续改进还是要判断下字符为妥。 做完了51单片机,下一步就开始做AVR了。 多谢!{:biggrin:} 赞一个! 发现个把月前的帖子不能重新编辑了,为了给坛子省省空间,暂时不新开帖,就在这里回复来进行更新吧。
-------------------------------------------------------
【软件更新-2015-05-26】
-------------------------------------------------------
今天更新了一下固件,主要包含如下几个方面:
1. 添加了一个 32.768K 主频的 m88p 系统的下位机程序,通信使用 4096bps
2. 上位机(AvrHost)适配了上述新增下位机,并且已测试对早前版本兼容
3. 上位机(AvrHost)新增了读取(Read)/校验(Verify)过程中的进度条显示
上位机读取进度过程中,双线程共用了 CArray 类,目前测试没看到明显的临界区问题。
目测是偶尔读错一次也不至于造成进度条过分跳动,更不会影响 APP 稳定性。
总之还是闲话少说,上附件:
#1:新增m88p下位机,
#2:更新了的上位机,
下位机用ICC编写的吗?我的ICC是7.22版本,怎么缺bldr_startup.o文件?这是个什么文件? 重新建立文件编译通过了 liudingding 发表于 2015-5-27 15:29
下位机用ICC编写的吗?我的ICC是7.22版本,怎么缺bldr_startup.o文件?这是个什么文件? ...
bldr_startup.o 是自己定制的启动文件(链接过程中位于RESET和MAIN之间),用于最小化程序尺寸。
项目包里已经包含了这个文件了(Startup文件夹下),在项目设置里指定一下非标准的启动文件即可。
重建项目的话,有可能使用了默认的启动文件,编译尺寸会增加,想进512B很难。
说句题外话,在定制过程中,删除了静态区的初始化代码,因而C当中全局变量初始化、局部静态的初始化都是无效的。 是否可以改成用8M 外部或内部晶振的,7.3728MHz外部晶振比较少用
ICCAVR 没用过,呵呵 楼主太强了,赞一个 本帖最后由 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区大小,这也是很矛盾的事情。 dmzy 发表于 2015-5-31 22:17
楼主太强了,赞一个
感谢各位捧场!
有东西了还得大家多多交流! t3486784401 发表于 2015-6-1 12:03
直接用8M的话,微调波特率就行:上位机支持直接指定波特率,理论上应该跑出125kbps的速度,具体是否好使 ...
谢谢楼主的回复,有时应用会因为各种限制无法装外部晶振,可以考虑用内部振荡器,然后降低波特率提高联通率,呵呵,象STM8好象也是用内部振荡器。 hzyjq 发表于 2015-6-1 21:52
谢谢楼主的回复,有时应用会因为各种限制无法装外部晶振,可以考虑用内部振荡器,然后降低波特率提高联通 ...
等有心开发 1KB 版的 Loader 时,可以考虑这个功能了,现在 512B 常规功能都快写吐血了。
为了这个精简的尺寸,真心牺牲了很多功能。 帖子不能重新编辑真心不太爽,有更新也没法直接通知各位,就在这里默默走起吧。
-------------------------------------------------------
【软件更新-2015-06-03】
-------------------------------------------------------
今天更新了 PC 端上位机程序,开放了器件列表接口、串口配置接口。
1. 上位机(AvrHost)启动时将加载同目录下的 "Devices.CSV" 完成器件加载,后续新增器件只要追加改动这个 CSV 文件即可;
2. 上位机(AvrHost)的串口配置字串将实时与同目录下 "ComParm.TXT" 同步,因而软件可以记录(或者修改)最近串口配置;
3. CSV文件加载过程有较为完善的语义检查(详见代码),填写方法在文件示例中有注释。
功能上和前一个版本(v3.0)是兼容的,接口的开放可以给以后增添器件带来便利。以下是更新了的附件:
#1:更新了的上位机:
#2:配置文件示例(与项目包中相同): 樓主確實做得很好.
以前玩過 6808 的 BOOTLOADER, 在半K容量底下做的, 還很省
找找看http://cache.freescale.com/files/microcontrollers/doc/app_note/AN2295.pdf
或許可以更上層樓
加油. xiaolaba 发表于 2015-6-4 12:30
樓主確實做得很好.
以前玩過 6808 的 BOOTLOADER, 在半K容量底下做的, 還很省
找找看http://cache.freescal ...
非常感谢分享文档!
看了文档中关于 Bootloader 的状态机描述,写的真心好,以后可以借鉴借鉴 t3486784401 发表于 2015-6-4 14:28
非常感谢分享文档!
看了文档中关于 Bootloader 的状态机描述,写的真心好,以后可以借鉴借鉴 ...
期待你的大作 好久没来更新这个帖子了,也积攒了不少新的 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): 还没试过BOOTLOADER,有空研究研究,谢谢楼主分享。 赞一个,高手! 谢谢楼主啊,刚刚开始搞远程升级AVR,一头雾水,有借鉴太好了。 gooooooood zhubamboo03 发表于 2016-6-19 11:22
谢谢楼主啊,刚刚开始搞远程升级AVR,一头雾水,有借鉴太好了。
感谢大家来捧场,请关注我本帖后续的应用提示,也是最近在做出来的BUG 最近移植了几个特定系统板专用的 Bootloader,涵盖 M8/M328/M16 型号,核心代码还是那一堆东西。
然而不经意间发现了 AVR 用 Bootloader 的一个掉电隐患,详见我的帖子:http://www.amobbs.com/thread-5659580-1-1.html
-------------------------------------------------------
【安全提示-2016-09-14】
-------------------------------------------------------
原因在帖子中已有详细分析,虽不算 Bootloader 的过错,但会影响到软件稳定性,因而为确保安全,熔丝位应确认勾选掉电检测:
要是有IAR的就好了 谢楼主分享 大师,收藏了 一往无前 发表于 2016-9-28 22:44
要是有IAR的就好了
由于启动代码都重写了,IAR 的话需要你能控制编译器产生的启动代码(初始化全局变量、堆栈啥的),
其他的 C 和内嵌汇编都差不多,目次就是换个 asm 宏就完事了 zengyi703 发表于 2016-9-29 08:19
谢楼主分享
本来都是来自论坛的经验知识,所以大家齐分享 zwhzwh_11 发表于 2016-9-29 09:58
大师,收藏了
感谢捧场啊 t3486784401 发表于 2016-9-29 22:54
由于启动代码都重写了,IAR 的话需要你能控制编译器产生的启动代码(初始化全局变量、堆栈啥的),
其他 ...
楼主有没有这方面的资料,我现在想用IAR搞搞 一往无前 发表于 2016-10-10 16:48
楼主有没有这方面的资料,我现在想用IAR搞搞
看看 IAR 安装目录下有没什么手册吧,我就是用 ICC 自带的手册看明白怎么用的 谢楼主分享 谢谢,我现在用的上 不用avr也顶一下
好东西,谢谢楼主。开始研究bootloader 帖主的確是有心人
謝謝分享 liulingang_1205 发表于 2016-10-10 23:52
谢楼主分享
前些年无心的作品,能得到大家肯定还是很欣慰的:) Ideal-007 发表于 2016-10-11 06:15
谢谢,我现在用的上
目前除了掉电的风险需要 BOD 检测来搞定,其他我自己用着还是很好的,除了在超大 FLASH (>128KB)速度待优化 yanyi103 发表于 2016-10-11 08:30
不用avr也顶一下
思路都是一样的:了解单片机能干啥,然后自己制订一套协议
现在玩 STM32 都标配 BOOTLOADER 了,微微有些不能体现工作量 foxwolf_ym 发表于 2016-10-15 14:32
好东西,谢谢楼主。开始研究bootloader
个人感觉 AVR 在 Bootloader 的支持上还是很有学习的必要的,可以锻炼下简单的上下位机系统。
STM32 就自带了,想练手也没得练习了 xiaolaba 发表于 2016-11-12 14:12
帖主的確是有心人
謝謝分享
看到这个头像,我就想起大家对我的期待了,果然还是需要加把劲。
AVR 最近自制了一批板子,类似 ARDUINO,正玩得火热 t3486784401 发表于 2016-11-12 16:21
看到这个头像,我就想起大家对我的期待了,果然还是需要加把劲。
AVR 最近自制了一批板子,类似 ARDUINO ...
如果固定偵測一只IO腳H或L, 再決定是否BOOTLOAD, 會不會更可靠, 代碼更緊縮一些呢 xiaolaba 发表于 2016-11-12 17:15
如果固定偵測一只IO腳H或L, 再決定是否BOOTLOAD, 會不會更可靠, 代碼更緊縮一些呢 ...
这个是的,硬件引导 BOOT 功能的确可以有很好的可靠性,不过代价就是,牺牲了固定的 IO 功能。
比如 STM32,自带 BOOT0/1 引脚用于处理 BOOTLOADER 功能,但代价也就是系统总没办法做到最精简。
作为一个通用的 BOOTLOADER,也就是权衡了很多才选择了这种超时退出的特性 本帖最后由 xiaolaba 于 2016-11-13 08:44 编辑
t3486784401 发表于 2016-11-12 22:46
这个是的,硬件引导 BOOT 功能的确可以有很好的可靠性,不过代价就是,牺牲了固定的 IO 功能。
比如 STM ...
UART 的IO PIN一般都是多功能.也一般都有開漏或開集 -------------------------------------------------------
【软件更新-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 想把玩一番,结果发现这玩意居然是陶振!各种不准!
待我另开个帖子慢慢吐槽...... 关注,留贴,谢谢 Thank you !!! 看到这个贴子还是很激动的,因为我正要用到BOOTLOADER 楼主太强了,赞一个 yinian 发表于 2017-5-30 18:47
关注,留贴,谢谢
感谢大家来捧场!最近更新了一批 arduino-uno 的驱动,有空来搞搞 权中正 发表于 2017-6-2 15:28
看到这个贴子还是很激动的,因为我正要用到BOOTLOADER
BOOTLOADER 其实不难,好好阅读手册自己就能写出来,手册里也有示例代码 liang16888 发表于 2017-5-31 10:34
Thank you !!!
这么久远的帖子,感谢大家来捧场! 51EDA技术 发表于 2017-6-2 15:38
楼主太强了,赞一个
感谢捧场!AVR的 BOOTLOADER 还是做得很好的,至少可以自己定制很多东西,拿来练练手正合适。
可惜了买了,要是能给老姚这样的买下来该多好,不过美帝也不傻 不错 正在研究 楼主,我想给mega64烧个,按这样设置对吧:
t3486784401 发表于 2017-6-3 22:33
感谢捧场!AVR的 BOOTLOADER 还是做得很好的,至少可以自己定制很多东西,拿来练练手正合适。
可惜了买 ...
那个bootrst是不是需要设置成0? 谢谢分享,BOOTLOADER R88 发表于 2017-8-21 17:15
那个bootrst是不是需要设置成0?
有这么几个点要注意,其他配置按照需求进行:
; M103C = 1 不使用兼容模式
; WDTON = 1 禁用看门狗
; BOOTSZ= 11 启动区1KB
; BOOTRST = 0 复位至启动区
; CKSEL = 111X选择外部7.3728M晶振
; BLB11 = 0 避免SPM自宫 t3486784401 发表于 2017-8-22 16:40
有这么几个点要注意,其他配置按照需求进行:
是这样么:我看你楼主是BLB12呢
之后装入FLASH,点编程就可以了么?自动下载到boot区了?不会下到应用部分么?不需要指定地址?我没下载过bootloader
t3486784401 发表于 2017-8-22 16:40
有这么几个点要注意,其他配置按照需求进行:
楼主我今天往avr中下载bootloader时,不知道为何下载居然用了5分钟,进度特别慢。下载完之后看PA0的波形一直是高电平,每个1S多一点出现一个低电平,是什么原因?boot没下载对么? R88 发表于 2017-8-22 17:22
是这样么:我看你楼主是BLB12呢
之后装入FLASH,点编程就可以了么?自动下载到boot区了?不会下到应用部 ...
熔丝位是这个配置, BLB11=0 在很多编程器下对应 PROG(打钩)状态。
直接把 HEX 下载到 FLASH 当中,复位单片机就应该进入 BOOTLOADER 了;
之后用 AvrHost 选择正确的端口、波特率就可以引导下载了 R88 发表于 2017-8-23 12:36
楼主我今天往avr中下载bootloader时,不知道为何下载居然用了5分钟,进度特别慢。下载完之后看PA0的波形 ...
是不是晶振没起振,或者振荡的频率不对啊。
bootloader 只是个常规的程序,自动定位在 FLASH 最后 1KB 位置。
这个现象是下载器有问题吧 t3486784401 发表于 2017-8-25 15:56
是不是晶振没起振,或者振荡的频率不对啊。
bootloader 只是个常规的程序,自动定位在 FLASH 最后 1KB...
我下载成功了,是应用程序区没程序的原因。
还有三个关于使用上的问题:
1,“在定制过程中,删除了静态区的初始化代码,因而C当中全局变量初始化、局部静态的初始化都是无效的。”这句话是什么意思?影响应用程序的运行么?
2,还有一点,“启动代码都重写了”,如果我用AVRstudio+gcc写的应用程序,这个启动代码是不是软件自己就带了,也就是我avrstudio生成的hex中是不是有启动代码了?那和你bootloader中的启动代码是不是重了?
3,关于你说的“坛子里最新的 Bootloader”,那个链接有么,因为我也用的GCC。
t3486784401 发表于 2017-8-25 15:56
是不是晶振没起振,或者振荡的频率不对啊。
bootloader 只是个常规的程序,自动定位在 FLASH 最后 1KB...
下载的就是特别慢。下载一次bootloader时间特别长。 R88 发表于 2017-8-25 16:03
我下载成功了,是应用程序区没程序的原因。
还有三个关于使用上的问题:
第一个问题是关于代码修改的,因为我重写了 startup 代码
(单片机从复位到main之间的汇编指令,用于初始化各种变量到物理的SRAM),
所以即使你在 C 里边声明了全局变量并给赋初值,实际上是没有用的。
已写好的代码当中遵循这个规则,写这个注释是用于提醒未来修改代码。
第二个问题,如果你用其他的编译器,肯定是需要重新定制 startup 代码的,
每个编译器都有一套自己的 startup 的语法、用法,GCC得再研究了。
第三个问题,我这个帖子都已经两年了,那个时候坛子里有个通用 BOOTLOADER,搜一下就有了
https://www.amobbs.com/forum.php?mod=viewthread&tid=930003&highlight=%E9%80%9A%E7%94%A8BOOTLOADER -------------------------------------------------------
【软件更新-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 的库做的还是不错的,比较适合来灵感了一顿搞 本帖最后由 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 服务方式{:victory:} xiaolaba 发表于 2017-10-2 09:45
沒想到貼主一直在驅動這個
有沒有想要把他放到 GITHUB, 方便世人景仰, 同時更有系統地完備Q&A還有使用的 ...
GitHub 一直处于 听说过 的状态,看来有必要来学一学了 支持帮顶 mask
学习一下 老哥,你这程序485系统能用不?能用就直接拿来用了 t3486784401 发表于 2015-4-23 22:00
这个的确是的,也是个矛盾:好调试的loader太容易误进,还就是真心不愿意在这里浪费太多空间啊,512字节 ...
(引用自9楼)
老哥,你这程序485系统能用不?能用就直接拿来用了 rzsab 发表于 2023-7-24 21:21
老哥,你这程序485系统能用不?能用就直接拿来用了
(引用自86楼)
理论上没问题。485 只是电平协议,实际时间协议只要还是 UART 就行。 下载学习,感谢 本帖最后由 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电阻接电源,复位脚没编程,仿真、下载应用正常。
不知什么原因,能指点一下下一步思路? rzsab 发表于 2023-8-9 12:24
老哥,现在用你的程序,芯片MEGA88PA,现在是这么回事,也不知原因:
1:BOOT程序通过DRAGON仿真器能正常 ...
(引用自89楼)
一般要锁住 BLB11 熔丝(=0),防止 Bootloader 自宫 t3486784401 发表于 2023-8-9 12:33
一般要锁住 BLB11 熔丝(=0),防止 Bootloader 自宫
(引用自90楼)
上述第二条随时正常,不像自宫过,试试看
t3486784401 发表于 2023-8-9 12:33
一般要锁住 BLB11 熔丝(=0),防止 Bootloader 自宫
(引用自90楼)
自宫了,好了 rzsab 发表于 2023-8-9 12:44
自宫了,好了
(引用自92楼)
看样子就是这里了,祝顺利! 本帖最后由 rzsab 于 2024-2-29 15:00 编辑
t3486784401 发表于 2023-8-9 14:28
看样子就是这里了,祝顺利!
(引用自92楼)
老兄,M8,flash起始空间没用上,这个问题怎么解决?是编译器的问题吗?ICC7.22
程序应该是从0x1E00开始吧? rzsab 发表于 2024-2-29 14:57
老兄,M8,flash起始空间没用上,这个问题怎么解决?是编译器的问题吗?ICC7.22
程序应该是从0x1E00开始 ...
(引用自93楼)
程序是flash的最后512字节。
对于m8,的确是要从字节地址 1e00 开始的。你这个 1e00 看起来没指令,不知是怎么搞的
页:
[1]