例如以单片机的ROM是有10万次擦写的FLASH,现在该如何能像电脑软件一样能自动升级里面的程序而不用拆下来重新烧
1.假设需要更新的程序是放在一个外接的E2PROM里,
2.怎样让单片机执行RAM里的指令,以便更新ROM区
3.通过执行RAM里的指令读出E2PROM的数据,怎样写入ROM区,一般都是用烧写器从外面烧写,还不知道该怎么从里面写
这个不是很难,前提是片内Flash/ROM支持自编程,也就是说支持软件指令对Flash/ROM的读、擦除和编程。
自己实现一个BOOTLOADER
以前一些神人说不难
不过我还是没能太好地搞清楚
可以的啊。只要芯片支持。做一个简单的类型bootloader的程序就可以了。
51的似乎不支持,需要AVR系列的。
思路可以这样:在bootloader区里是一段单独的程序,专门用来升级用。
升级时,应用程序跳转到bootloader的程序,升级后,再跳转到新的应用程序。
当然,这种方法需要各程序在FLASH中绝对定位。
另外,对于自升级的功能,新程序放在E2PROM里没什么意义,因为往里面写还是需要消耗资源,不如直接借助COM,用USART进行升级。
只要你的芯片支持串口,支持Flash多次重写,就可以实现自己的BootLoader
引用: 引用 5 楼 soyokaze 的回复:
51的似乎不支持,需要AVR系列的。
思路可以这样:在bootloader区里是一段单独的程序,专门用来升级用。
升级时,应用程序跳转到bootloader的程序,升级后,再跳转到新的应用程序。
当然,这种方法需要各程序在FLASH中绝对定位。
另外,对于自升级的功能,新程序放在E2PROM里没什么意义,因为往里面写还是需要消耗资源,不如直接借助COM,用USART进行升级。
对于支持自编程的,可以按上述来做。
对于不支持自编程的,可以自己找一块区域,作为bootloader的引导区,每次系统驱动都来执行(当然这部分代码要尽量的简洁,也要包含应有的驱动,比如必须的输入,或是显示等),而bootloader可以通过版本号来识别是否升级.........
你可以去参考lpc2414系列的cpu,里面会有介绍,然后把其bootloader精简,可以实现的。
关注中。。。
我刚发了一个关于ARM下自动升级的问题,也正期待解决。这个可以借鉴下
ISP在线编程啊
好象winbond 的w78e516b有这样功能
如果你MCU有ISP功能是很容易实现的。我在SM5964,MSP430FXXX等一些MCU上实现过。
但是如果是ROM类型,程序又要在RAM运行,那估计就没戏了。
引用: 引用 1 楼 zyzhang365 的回复:
这个不是很难,前提是片内Flash/ROM支持自编程,也就是说支持软件指令对Flash/ROM的读、擦除和编程。?
有些51单片机还是支持的,像国内的STC系列。。。。。
回复 6楼juhao0122 的帖子
哥们能不能帮个忙,我有个问题,程序能够对单片机升级,怎么把程序里的升级部分提取出来??