打印
[技术问答]

N76E003的最新ISP例程

[复制链接]
2936|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
buzhichi|  楼主 | 2019-5-11 16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 buzhichi 于 2019-5-14 22:52 编辑

谁有最新的ISP单片机源码和上位机,我在网上找到的是16年份的,谁知道最新的是什么年份的,在哪里有的下载呢。
关键问题点是  最新的是什么年份的。感觉16年那个源代码有点差。
我把我这里的分享出来

最新版本已经找到,大家不要下载那两个旧的16年的了。下载19年3月那个。我对官方的底层isp程序做了优化,代码量改到了1K以内,并且支持加密功能,具体是怎么个加密功能,下载  “n76e003 boot引导程序,配合官方的ISP上位机”  就知道啦


n76e003-isp官方 20190313.zip

1.84 MB

n76e003 boot引导程序,配合官方的ISP上位机.zip

4.78 MB

使用特权

评论回复
沙发
buzhichi|  楼主 | 2019-5-11 23:03 | 只看该作者
我已经把isp的代码优化到了1K以内,排除了一个bug。bug如下:
用ICP烧写完官方的ISP文件之后,用串口更新芯片,如果这时候打开串口助手,随便发几个字节下去,然后关闭串口助手,再用官方的isp上位机就连不到下面了。


使用特权

评论回复
板凳
buzhichi|  楼主 | 2019-5-12 09:37 | 只看该作者
本帖最后由 buzhichi 于 2019-5-12 19:37 编辑

更改为不设定固定的程序大小,例如你的程序是2K的,那就擦除这2K,烧写。你的程序是15K的,那就擦除这15K烧写。这样可以不破坏用户数据区,还有就是官方的是限制死的,你的APROM是多大要在程序里定义,然后它不管你实际的程序是多大,上去先把你程序中定义的APROM那块全部擦除。
官方那个真的很差,谁有最新的版本。我指出官方16年那个版本的问题如下
1. 串口随便收到一个干扰数据就和PC通讯不上。
2.APROM的大小要在程序中定义死,这样很不方便,不同的项目AProm大小会不同,这样每个都要改一次。
3.不是根据实际的程序量去擦除flash,而是上来把整个aprom擦除,这样可能会破坏用户数据区,因为我们有时候更新是不希望破坏以前的参数的。
4.程序量偏大,可以限制在1K以内
5.单独的擦除命令 A3,实际操作没有响应。
6.烧写完APP、没有自动跳转到APP运行

使用特权

评论回复
地板
buzhichi|  楼主 | 2019-5-12 20:18 | 只看该作者
本帖最后由 buzhichi 于 2019-5-12 20:26 编辑

我修改的程序hex文件分享给大家,现在优化到了788字节的程序量,等更改到少于512字节或者更少,我就把源码发出来。
更改了官方的几个不好的地方,一个是串口收到任意数据会与pc失去连接,
一个是烧写完app没有自动会跳转到APP、
一个是根据实际的app程序量去擦除flash,例如app是10K那么就擦除10K,是2K就擦除2K,单位是128字节的。不要求必须是1K的倍数。官方的是固定死的。前面也有说明
其他的与官方2016版本的功能一样。没有减少任何功能。

这个单片机的boot结构,做的很简单,具体跟STM8,STM32,等相比,区别在于
不用考虑中断向量搬移,应用程序地址偏移。  这里用过stm或者avr的都知道,编写boot引导程序,要考虑app在flash中的实际偏移地址,并且要做中断向量搬移,因为他们的结构是一片flash,程序分为boot和app的话,那么一般是boot在flash的前面,app在后,而内核一般都是固定从一个位置开始执行,所以要考虑中断向量搬移和app的偏移地址。这个芯片是可以认为 aprom和ldrom是完全独立的两片flash,地址都是从0开始的,无论从哪个开始执行,都完全不用考虑中断向量搬移和aap的地址偏移,中断随便用,在boot程序中也随便用中断。

首先要说明的是程序从哪片flash执行这个是由config配置字决定的,可以用nulike设置。
如何从ldrom跳转到aprom?
这个就是说默认程序从ldrom执行,然后看是否需要更新aprom,如果需要就执行ldrom内的程序,不需要就跳转到aprom执行用户程序。
从ldrom跳转到aprom的程序如下
                TA = 0xAA;
                TA = 0x55;
                CHPCON &= 0xFD;                  //设置从aprom开始执行
                TA = 0xAA;
                TA = 0x55;
                CHPCON |= 0x80;                   //软件重启。
如何从arom跳转到ldrom?
这个就是说默认程序从aprom执行,然后收到更新程序命令后跳转到ldrom,去更新aprom。
从aprom跳转到ldrom的程序如下
                TA = 0xAA;
                TA = 0x55;
                CHPCON |= 02;                  //设置从ldrom开始执行
                TA = 0xAA;
                TA = 0x55;
                CHPCON |= 0x80;                   //软件重启。

这里需要注意的一点是,只有软件重启才能自由选择是从ldrom还是aprom执行程序,如果是其他的任何重启,例如硬件重启,看门狗,外部复位,欠压复位,错误复位等都是由config来决定是从哪里启动。意思就是你设计的程序是从ldrom跳转到aprom,并且你的config也做了相应的配置,那么每次上电都会执行ldrom。你设计的程序是从aprom执行,收到更新命令或者满足更新条件后才执行ldrom,那么进入到ldrom执行,无论执行成什么样,断电重启还是从aprom开始执行。当然这里说的是你不在程序中去修改config的设置从哪里启动的情况下。

  


N76E003-BOOT.zip

1.07 KB

使用特权

评论回复
5
buzhichi|  楼主 | 2019-5-14 11:25 | 只看该作者
终于找到了官方的最新版本,就在官方网站上,哈哈,买开发板带的资料真实害人,自己也是太懒惰了,我把单独的n76e003的整理出来,下面分享给大家

新版本程序量没有减少,官方默认1级优化,程序编译后大于2K,用keil的8级别优化后,是1799字节。不要用9级别优化,用9可以减少到1401但是程序无法正确运行,可能是因为例如    TA=0xAA;   TA=0x55;//triggerIAP这种操作会被编译器优化掉,我也一直用的是8级别优化。
下面把官方16版本的和这个19的做一个对比:
1.pc软件部分增加了跳转到app的命令,以前是没有的,底层两个版本都是支持的。
2.底层加入了Erase All命令,16版本的底层没有
3.加入了定时器,有了超时机制,底层偶尔收到错误数据没事。

用这个新版本和我更改的对比一下:
1。程序量偏大,完全可以在1K以内完成所有功能。
2.没有根据实际的程序量擦除aprom,是无论aprom程序实际是多大,上来先给你完全擦除掉。并且不同的应用要更改boot程序中关于aprom大小的定义,而我的是根据实际的aprom大小擦aprom区域,这样不同的项目可以用同一个boot程序,完全不用更改。
3.我改成了,更新完aprom就自动跳转到aprom执行,这个应该不算优点。

我现在的做法是,在ldrom程序里,加入了加密算法,例如用keil生成了hex文件,然后用另一个软件把hex文件转换成乱码,编写一个这样的软件难度很低。这样可以放心的给客户发过去更新,他拿到的是乱码,直接烧写到芯片是无法工作的。当然可以用uid在应用程序中做加密算法,这步不可少,但是直接发hex文件给客户也不大好,直接发个乱码给客户升级更放心。

我上面发的hex文件,没有加入任何加密算法,可以直接烧写hex文件,经测试用官方的最新PC软件 完全没问题。但是不支持Erase All指令。我那个比官方的好用,不信你试试。 用官方的19版本老出问题,例如用nulink烧写的时候,官方编译出来的命名是1799,我必须把ldrom设置到4K,才行,3K也不行,不设置4K,老提示ldrom校验失败。 用pc软件ISP连接的时候,用官方的总是连接不上,检测串口发现不知道为什么,总收到数据0字节。这可能是我这里的环境造成的。我用我写的那个就什么问题都没有,都没有。还是我的号。



555.png (42.05 KB )

555.png

666.png (458.01 KB )

666.png

n76e003-isp官方 20190313.zip

1.84 MB

使用特权

评论回复
6
kkstun| | 2019-5-14 19:16 | 只看该作者
用大神做的ch552的编程器 很方便。

使用特权

评论回复
7
xinpian101| | 2019-5-14 22:08 | 只看该作者
官方提供了丰富的示例。

使用特权

评论回复
8
xuanhuanzi| | 2019-5-14 22:50 | 只看该作者
还有IAP例子。

使用特权

评论回复
9
sanitIT| | 2019-8-6 20:59 | 只看该作者
这个设计成上电默认从LDROM启动,超时判断是否连接。如果0.5S内不连接,自动跳转APROM。如果连接了就一直在LDROM,哪怕断开连接也不要自动跳转APROM。直到下次启动。我觉得这样的逻辑比较好吧。

使用特权

评论回复
10
sanitIT| | 2019-8-6 21:03 | 只看该作者
buzhichi 发表于 2019-5-12 20:18
我修改的程序hex文件分享给大家,现在优化到了788字节的程序量,等更改到少于512字节或者更少,我就把源码 ...

大佬能把源码分享出来吗?现在ADROM与APROM跳转,能否加入超时机制。

使用特权

评论回复
11
sanitIT| | 2019-8-7 16:52 | 只看该作者
此BOOT应该没有考虑看门狗吧?应该加入喂狗函数,不然跳转之后会看门狗重启。不过还好这款单片机可以强制关闭看门狗,在跳转之前关闭看门狗即可,稍微麻烦点

使用特权

评论回复
12
21mengnan| | 2019-8-7 23:44 | 只看该作者
这是经验分享吗

使用特权

评论回复
13
yr_xie| | 2019-8-29 17:11 | 只看该作者
断电后第二次就ISP就连接不上了

使用特权

评论回复
14
yr_xie| | 2019-12-17 11:23 | 只看该作者
yr_xie 发表于 2019-8-29 17:11
断电后第二次就ISP就连接不上了

二次上电是从APROM启动,需软件复位切换到LDROM

使用特权

评论回复
15
stuperfect| | 2020-5-18 22:10 | 只看该作者
楼主,能否把你改的ISP程序分享下,非常感谢!
邮箱 stuperfect@163.com

使用特权

评论回复
16
imdx| | 2020-8-28 12:48 | 只看该作者
给你点个赞,官方的bootloader确实太烂了,芯片都做出来了,就不能花钱找个靠谱的软件工程师。
就这代码质量,怪不得不敢把代码固化到ROM中。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

65

帖子

1

粉丝