总结
**结论:**宏晶科技的串口ISP(In-System-Programming)程序就是使用IAP功能来对用户的程序进行在线升级的,ISP原理是由厂商在单片机内部固化一段ISP代码,STC单片机是在上电时检测是否有连续的‘d’字符,如果检测到,则认为进入ISP准备阶段。如果超时没有收到’d’,则执行用户代码区。若进入ISP准备阶段,根据STC定义的协议接收数据帧,最后完成程序的擦除、写入。在ISP准备阶段若未收到数据帧,则超时退出ISP,执行用户代码区。但是出于对用户代码的安全着想,底层代码和上层应用程序都没有开源,为此宏晶科技推出了IAP系列单片机,即整颗MCU的Flash空间,用户均可在自己的程序中进行改写,从而使得有用户需要开发字节的ISP程序的想法得以实现。除IAP12C5A62S2AP12LE5A62S2等芯片可在应用程序区修改应用程序区外。程序在用户应用程序区时,仅可以对数据 Flash区( EEPROM进行字节读/字节编程/扇区擦除)。综上的出结论,STC12C5A60S2不支持远程升级。 **关于结论:**淘宝店家:(访问数量8家)2家没回我,5家不知道,1家询问之后和我说不可以百度知道:STC都支持isp现场升级功能,STC单片机中IAP开头的还支持远程升级 在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程。而IAP技术是从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。芯片手册:程序在用户应用程序区时,仅可以对数据 Flash区( EEPROM进行字节读/字节编程/扇区擦除,IAP12C5A62S2AP12LE5A62S2等除外,这几个型号可在应用程序区修改应用程序区。 相同资源可替换芯片:IAP12C5A62S2为什么STC8A8K64S4A12可以实现远程升级?方式是什么?和IAP有何区别? **网上的办法:**1、bootloader加载片外flash在线升级程序。自己写一个引导程序bootloader来实现程序的烧录,比如用bootloader接收串口数据、读取外挂flash的数据或者SD卡数据,然后一边读数据、一边烧录应用程序。STC8A8K64S4A12一上电就执行ISP区代码,超时后,会执行bootloader程序,bootloader会检查是否要更新程序,如果没有,就直接跳去执行应用程序。这种方法和好处是可以不用串口去更新程序,因为串口要再加一颗MCU,或者要用专用的上位机,多了成本。通过STC8A8K64S4A12主动拷贝数据来更新程序可以说是一种省成本的方式。根据是否外挂flash,分为片上型(onchip)和片外型(offchip)。片上型,单片机没有外挂flash,程序升级全部依靠单片机内部存储。比较典型的是CC2541的OTA(空中升级),CC2541将内部存储分成BIM、Image A和Image B。其中BIM是引导程序,Image A和Image B是用户应用程序。当执行在Image A时,可以升级Image B程序,完成后重启,让BIM选择切换运行Image B程序,反之亦然。这种方式有优点,亦有缺点,优点就是OTA过程中如果失败,不怕程序奔溃,顶多不切换就行,缺点就是两个功能类似的用户程序占用更多存储空间。片外型,单片机有外挂flash,程序升级时单片机的用户程序先将升级数据写入到外部flash中,完成后重启,重启后bootloader会将外部flash的升级数据读出,然后写入到内部flash,完成后,切换到升级后的用户程序。比较典型的是CC2640R2F的OTA-Offchip。这种方式的优点是将外部flash作为升级程序数据缓存,无需占用内部flash,用户程序存储空间利用率高,缺点就是需要增加一片flash的成本。接下来,我介绍一下本次STC8A8K64S4A12单片机采用片外型来在线升级程序功能实现。首先是空间分配问题,STC8A8K64S4A12单片机的程序存储空间ROM有64K,ROM的擦除是按照512字节/扇区,所以存储空间分配要按照512字节的整数倍。我将前面3K存储空间(0x0000-0x0BFF)分配给BIM程序区来作为bootloader,剩下61K存储空间(0x0C00-0xFFFF)分配给IMAGE程序区。开发板的外部flash型号是W25X16CL,存储空间为2M。由于flash的擦除是按照4K/扇区,所以存储空间分配要按照4K的整数倍。我将前面的4K存储空间作为IMAGE文件信息区,将接下来的64K存储空间作为IMAGE文件数据区。2、原理就是整个代码空间都设置为flash空间,用户程序可以在运行时修改flash内容。具体办法:收到的升级代码放在外部flash,用户程序擦除内部flash(即旧代码),将外部flash的升级代码写入内部falsh,最后重启。用户程序分成两部分,正常的应用部分和升级部分。两部分分开存放,升级部分只擦除、写入应用部分的flash空间 与STC12C5A60S2区别:没查到不确定是什么导致的,有可能只用STC8A8K64S4A12试过,奇怪STC芯片没有类似做远程升级的文章。猜测可能是STC8A8K64S4A12可以分配EEPROM,而stc12c5a60s2只有1KEEPROM。
|