搜索
bottom↓
回复: 59

分享n76e003的bootload。 官方的bootload有坑啊!大家要小心

  [复制链接]

出0入25汤圆

发表于 2019-4-1 20:24:01 | 显示全部楼层 |阅读模式
最近我花了很多时间在 新塘的bootload上面。。可谓是跳了无数的坑。下面我会分享一下,我的调试过程,让开发人员尽量少走弯路。。。人生苦短,希望大家开发的顺利一点。。。。


首先,新塘的数据手册,很多是遮遮掩掩的。 尤其是 96bit的 uid数据段。  这个数据段 其实 包含了很多官方自己定义的信息。 但是数据手册什么都没说,但是 仔细分析新塘的BSP包, 就能发现里面大有乾坤!!


新塘的BSP -   boot strip program --》 我和你说 bootload ,大家都明白是意思。   打开最新下载的bootload ,里面用了115200波特率。所以需要把 RC参数从16M  调到 16.6M 。 官方的源码是这样写的:




void MODIFY_HIRC_16588(void)
{
//if ((PCON|CLR_BIT4)==0xFF)  
               
        if(1)
  {
    set_IAPEN;
    IAPAL = 0x30;
    IAPAH = 0x00;
    IAPCN = READ_UID;
    set_IAPGO;
    hircmap0 = IAPFD;
    IAPAL = 0x31;
    IAPAH = 0x00;
    set_IAPGO;
    hircmap1 = IAPFD;
    clr_IAPEN;
    hircmap1 = hircmap1&0x01;
    trimvalue16bit = ((hircmap0<<1)+(hircmap1&0x01));
    trimvalue16bit = trimvalue16bit - 15;
    hircmap1 = trimvalue16bit&0x01;
    hircmap0 = trimvalue16bit>>1;
    set_SFRPAGE;
    TA=0XAA;
    TA=0X55;
    RCTRIM0 = hircmap0;
    TA=0XAA;
    TA=0X55;
    RCTRIM1 = hircmap1;
    PCON&=CLR_BIT4;       // cold boot flag , need clear to 0 by SW
  }
}

这段代码,实际上可谓半对半错。。。  因为数据手册没有交代 30 31 这个地址是什么。  通过源代码猜测是 rc 矫正参数。   但是rc 矫正参数 估计在 76e003 的早期版本(或者是新塘其他1T 51 里面是存在这个位置),但是 仔细分析76003的ds ,  在 sfr 里面已经有了 rc 的矫正参数。。所以正确的代码 如下:


void MODIFY_HIRC_166(void)                                // Modify HIRC to 16.6MHz, more detail please see datasheet V1.02
{
                UINT8 hircmap0,hircmap1;
                UINT16 trimvalue16bit;
/* Check if power on reset, modify HIRC */
                //if ((PCON&SET_BIT4)==SET_BIT4)               
               
                if(1)
                {
                                hircmap0 = RCTRIM0;
                                hircmap1 = RCTRIM1;
                       
                                //rct0 = hircmap0;
                                //rct1 = hircmap1;
                                trimvalue16bit = ((hircmap0<<1)+(hircmap1&0x01));
                                //all = trimvalue16bit;
                       
                                trimvalue16bit = trimvalue16bit - 15;
                                hircmap1 = trimvalue16bit&0x01;
                                hircmap0 = trimvalue16bit>>1;
                                TA=0XAA;
                                TA=0X55;
                                RCTRIM0 = hircmap0;
                                TA=0XAA;
                                TA=0X55;
                                RCTRIM1 = hircmap1;
/* Clear power on flag */
                                PCON &= CLR_BIT4;
                }
}


// 以上是 第一个坑。   如果你直接就用 官方的bsp 包来做booload 。 你肯定会发现通讯异常的问题!!  通过修正 函数,  问题得到解决

出0入25汤圆

 楼主| 发表于 2019-4-1 20:26:08 | 显示全部楼层
第二个 坑是 :

g_timer0Over=0;
    g_timer0Counter=500;  //3s update time!
    g_progarmflag=0;

g_timer0Counter  // 这个参数控制这 bootload 的 time overflow的时间。  官方默认是30sec 。  晕菜。 一般应用3s 足够了!! 这个大家还是要沉下心来分析一下 源代码!!

出0入25汤圆

 楼主| 发表于 2019-4-1 20:27:42 | 显示全部楼层
第三个坑是 :

bootload  到处是 goto 语句。 增加了 程序的分析复杂度。。     有没有哪位小伙伴能改一个好用的程序开源出来。。

最后我放上来 ,自己通过修改、验证后的程序。



直接覆盖 官方 bsp 相同路径即可。  

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2019-4-1 20:34:57 来自手机 | 显示全部楼层
收下了,多谢楼主!

出0入0汤圆

发表于 2019-4-1 21:44:03 | 显示全部楼层
rei1984 发表于 2019-4-1 20:27
第三个坑是 :

bootload  到处是 goto 语句。 增加了 程序的分析复杂度。。     有没有哪位小伙伴能改一 ...


这种神经病芯片,需要这样大力气来搞,要搁我,早换了它。。还要用户来解决问题,要它何用。。建议楼主,扔了它,换另一颗,至少能多少几年。。




出0入0汤圆

发表于 2019-4-1 21:50:03 | 显示全部楼层
多谢提醒。

出0入25汤圆

 楼主| 发表于 2019-4-1 22:51:48 | 显示全部楼层
kinsno 发表于 2019-4-1 21:44
这种神经病芯片,需要这样大力气来搞,要搁我,早换了它。。还要用户来解决问题,要它何用。。建议楼主, ...

兄弟。你疯了。

芯片是好芯片。

可惜写ds的人。马马虎虎。台湾佬也不过如此。。

avr时代的ds 从来都不是遮遮掩掩的。。。

出0入25汤圆

 楼主| 发表于 2019-4-1 22:56:23 | 显示全部楼层
人生苦短,我用python

人生苦短,我用arduino

在mcu 速度越来越快的今天,我感觉将来一定是 st cubix的开发思路

开发要从面向过程 到面向对象的方向转变。。。这个只能意会了

出0入0汤圆

发表于 2019-4-2 06:16:44 | 显示全部楼层
avr的ds 从来都不是遮遮掩掩的。。。
可是,AVR的破解难度最低。

出0入0汤圆

发表于 2019-4-2 08:11:08 | 显示全部楼层
rei1984 发表于 2019-4-1 22:56
人生苦短,我用python

人生苦短,我用arduino

mark..................

出0入0汤圆

发表于 2019-4-2 08:25:17 | 显示全部楼层
bootloader
打正确比较容易搜索到

出0入25汤圆

 楼主| 发表于 2019-4-2 09:46:49 | 显示全部楼层
Earthman 发表于 2019-4-2 08:25
bootloader
打正确比较容易搜索到

貌似  bootloader 是全名。

一般时候 bootload 的认可度更高一些。  通过 百度 或者 google 关键词 数量 可以对比一下。。

另外avr 价格没优势。   早已经被消费电子抛弃了很久了。  工控行业 还一直在用avr 。 皮实 耐用。 数据手册齐全。

st 提供了 很长的产品线。 但是性价比高。 但是会一直被 国产 台系 mcu 替代。。  目前gd 就挺流行的!!

出0入0汤圆

发表于 2019-4-2 09:59:24 | 显示全部楼层
rei1984 发表于 2019-4-2 09:46
貌似  bootloader 是全名。

一般时候 bootload 的认可度更高一些。  通过 百度 或者 google 关键词 数 ...

115200通信那个,除了波特率修改函数外,还需在编译器哪里定义一下,定义为26M

出0入25汤圆

 楼主| 发表于 2019-4-2 10:50:29 | 显示全部楼层
eaglelpx 发表于 2019-4-2 09:59
115200通信那个,除了波特率修改函数外,还需在编译器哪里定义一下,定义为26M ...

不用定义的。  我已经通读 76e003  bootload 。    程序内部 并没用到 ¥ifdef 26M的 内容。。。

兄弟 如果你说的是 别的型号 51 , 可能就对了。。。  

76e003 这个bootload ,新塘的开发人员比较偷懒, 是用 885的 51 ,进行移植改写的。  程序内部可以看到很多 885的寄存器定义。 这些定义和 76003 有一点差异。  所以 等我全部调通之后, 才要去吐槽一下!!   

出0入0汤圆

发表于 2019-4-2 11:11:24 | 显示全部楼层
rei1984 发表于 2019-4-2 10:50
不用定义的。  我已经通读 76e003  bootload 。    程序内部 并没用到 ¥ifdef 26M的 内容。。。

兄弟  ...

是同一棵003.开始用的时候115200波特率就没发对过。后面找他们FAE,说是编译器里面设置了26M,然后还要在程序里面加入修改晶振频率函数。加上去后,通信正常了。发了半个小时,没误码,就出样给客户了,没深入研究。。。。这玩意好像只有一个口可以到115200

出0入25汤圆

 楼主| 发表于 2019-4-2 11:22:21 | 显示全部楼层
eaglelpx 发表于 2019-4-2 11:11
是同一棵003.开始用的时候115200波特率就没发对过。后面找他们FAE,说是编译器里面设置了26M,然后还要在 ...

uart 0  和 uart 1 都可以 跑到 115200的, 并且也是稳定的。。

芯片没什么问题。  主要是 ds 写的不咋地。  但是也能看,只是需要花很多时间。。

这颗芯片,要用起来,不困难,  要用的6 , 还是需要很多时间的。。。

比如 我现在 是   icp 和 isp 做到一起。  都用uart1 .。  另外 需要考虑 后续升级

出0入55汤圆

发表于 2019-4-19 23:42:13 | 显示全部楼层
rei1984 发表于 2019-4-2 11:22
uart 0  和 uart 1 都可以 跑到 115200的, 并且也是稳定的。。

芯片没什么问题。  主要是 ds 写的不咋 ...

115200终于可以了,网上转了好几圈都没找到可以的。谢谢楼主

出0入0汤圆

发表于 2019-4-23 23:22:21 | 显示全部楼层
楼主能否提供一个测试好的二进制文件呢?现在用官网下载的那个二进制文件,bootloader连不上,不懂怎么回事

出0入25汤圆

 楼主| 发表于 2019-4-23 23:24:08 | 显示全部楼层
mangolu 发表于 2019-4-23 23:22
楼主能否提供一个测试好的二进制文件呢?现在用官网下载的那个二进制文件,bootloader连不上,不懂怎么回事 ...

可以的,明天发上来!

出0入0汤圆

发表于 2019-4-23 23:42:50 | 显示全部楼层
rei1984 发表于 2019-4-23 23:24
可以的,明天发上来!


这个是用你的代码替换官方代码编译的提示。另外你的代码波特率是115200吗?

这个ISP软件,看不到哪里有波特率设置呢?

本帖子中包含更多资源

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

x

出0入25汤圆

 楼主| 发表于 2019-4-24 06:59:55 来自手机 | 显示全部楼层
115200定死的。。。  可以改上位机源代码 改波特率。。。。  一般不要改,write时间问题

出0入25汤圆

 楼主| 发表于 2019-4-24 07:02:07 来自手机 | 显示全部楼层
另外原厂的hex 我没直接用。感觉有坑。不知道为啥原厂这么设计。。。。再次说明ic木有问题  sample code 问题

出0入25汤圆

 楼主| 发表于 2019-4-24 07:03:28 来自手机 | 显示全部楼层
v1.06 比v1.03 sample code 可以用beyond compare 对照着看。   官方改了很多

出0入0汤圆

发表于 2019-4-24 08:51:32 | 显示全部楼层
台湾大多数MCU的ds都有坑,sample code更是垃圾的不敢直视
不过ds和sample code不代表芯片本身

出0入25汤圆

 楼主| 发表于 2019-4-24 11:36:50 | 显示全部楼层
mangolu 发表于 2019-4-23 23:42
这个是用你的代码替换官方代码编译的提示。另外你的代码波特率是115200吗?

这个ISP软件,看不到哪里有 ...



已经上传验证过的 bootload 。 直接可以连 官方的 isp 。。


注意这个booload 用的是 uart1 (不是官方的uart0)  .  目的是  icp 口和  isp 口可以重叠在一起。。

注意看76e003的ds 。  icp是用 clk and  data。  然后相同的 pin 的第二功能是 uart1 .  这样做就完美了。  想isp 就isp  想icp 就icp 。 不再占多余的pin

本帖子中包含更多资源

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

x

出0入25汤圆

 楼主| 发表于 2019-4-24 11:38:19 | 显示全部楼层
提示。

ld size = 4k 。  boot from ld flash 。  需要wirte config and wirte ld flash 。   其他 default 就可以了!!

config 别忘记就可以了。  类似于 avr 的fuse

出0入0汤圆

发表于 2019-4-24 12:18:16 | 显示全部楼层
rei1984 发表于 2019-4-24 11:36
已经上传验证过的 bootload 。 直接可以连 官方的 isp 。。

谢谢,晚上我回去试试

出0入0汤圆

发表于 2019-4-24 12:33:29 来自手机 | 显示全部楼层
新唐官方的boot程序能把人看晕

出0入0汤圆

发表于 2019-4-24 16:27:09 | 显示全部楼层
感谢楼主!正在入炕中

出0入0汤圆

发表于 2019-4-25 01:10:01 | 显示全部楼层
rei1984 发表于 2019-4-24 11:36
已经上传验证过的 bootload 。 直接可以连 官方的 isp 。。

LZ用你这个程序刷上后已经可以连接了,但是刷上程序却运行不了呢?我这个就一个点灯的程序,用nulink刷上是正常运行的,是不是还要做什么设置?


另外下面编程复选框中的Data Flash是什么?这个要选上吗?还有Erase All是指擦除所有的APROM吗?还是指APROM+LDROM?

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2019-4-25 09:08:37 | 显示全部楼层
归根结底原厂的Firmware工程师水平太差。

出0入25汤圆

 楼主| 发表于 2019-4-25 11:50:59 | 显示全部楼层
mangolu 发表于 2019-4-25 01:10
LZ用你这个程序刷上后已经可以连接了,但是刷上程序却运行不了呢?我这个就一个点灯的程序,用nulink刷上 ...

没碰到过。

按道理 ld flash 只是把程序写道 app flash 。 其他什么都不会管。

既然你已经成功写入了(他默认是会 校验 你写进去的flash数据是否正确)。  

剩余的是等待 3s ,  bootload 跑结束, 就自动跑 app

建议你 彻底断电测试下。  插着nulink 会一直 reset

出0入0汤圆

发表于 2019-4-25 12:14:44 | 显示全部楼层
rei1984 发表于 2019-4-25 11:50
没碰到过。

按道理 ld flash 只是把程序写道 app flash 。 其他什么都不会管。

我上面已经用nulink刷好了,然后拨出来,只接串口线连ISP的。上面ISP也提示程序已经写入,会不会是ISP后不进入APROM运行阿?

出0入0汤圆

发表于 2019-4-25 14:42:36 | 显示全部楼层
mark N76E003 bootloader

出0入25汤圆

 楼主| 发表于 2019-4-26 13:35:15 | 显示全部楼层
mangolu 发表于 2019-4-25 12:14
我上面已经用nulink刷好了,然后拨出来,只接串口线连ISP的。上面ISP也提示程序已经写入,会不会是ISP后 ...

不会的。 自动运行的。

具体,你可以自己编译一下 bootload。   我的板子一切正常

出0入0汤圆

发表于 2019-4-26 13:45:04 | 显示全部楼层
rei1984 发表于 2019-4-26 13:35
不会的。 自动运行的。

具体,你可以自己编译一下 bootload。   我的板子一切正常 ...

谢谢!还在学习中,有空试试。

出0入0汤圆

发表于 2019-4-26 14:07:01 来自手机 | 显示全部楼层
还没有用这个片子,先mark一下

出0入0汤圆

发表于 2019-5-4 01:15:09 | 显示全部楼层
本帖最后由 mangolu 于 2019-5-4 01:16 编辑
rei1984 发表于 2019-4-26 13:35
不会的。 自动运行的。

具体,你可以自己编译一下 bootload。   我的板子一切正常 ...


LZ近段没时间,晚上玩了一下你给编译好的,发现程序不能运行的原因是新唐的ISP工具只直持bin格式的程序文件,就是把文件类型选为所有文件载入hex文件,下载进去也是运行不了的。

还有一个问题,ISP下载完程序后要重启单片机才会运行APROM的程序,有没有改到程序下载完直接运行APROM程序或自动重启运行的阿?

出0入25汤圆

 楼主| 发表于 2019-5-4 10:59:18 | 显示全部楼层
mangolu 发表于 2019-5-4 01:15
LZ近段没时间,晚上玩了一下你给编译好的,发现程序不能运行的原因是新唐的ISP工具只直持bin格式的程序文 ...

你的问题, 新塘都帮你想好了。  并且 hex2bin  这个sdk里面也是有的。    建议你仔细看下软件配置(不涉及源代码更改),就能发现你要的东西。

出0入0汤圆

发表于 2019-5-4 13:48:00 | 显示全部楼层
rei1984 发表于 2019-5-4 10:59
你的问题, 新塘都帮你想好了。  并且 hex2bin  这个sdk里面也是有的。    建议你仔细看下软件配置(不涉 ...

生成BIN文件这个我已经知道。现在的问题是ISP后要重启单片机才能运行APROM的内容,这个怎么解决?

出0入25汤圆

 楼主| 发表于 2019-5-4 14:34:55 | 显示全部楼层
mangolu 发表于 2019-5-4 13:48
生成BIN文件这个我已经知道。现在的问题是ISP后要重启单片机才能运行APROM的内容,这个怎么解决? ...

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2019-5-4 14:55:59 | 显示全部楼层

晕倒,我那个版本是2.0的,没有这个功能,请看上面20楼。一下去官网下个新版本看看,谢谢了!

出0入0汤圆

发表于 2019-6-29 01:20:23 | 显示全部楼层
新唐官方的isp基本没法用,上位机只支持115200和19200,真不知道改完哪里能降下来波特率,还有如果远程升级的话地址都不知道怎么加进去,,后来自己写了个iap下位和上位,波特率从2400到115200全支持,也能通过地址485升级。其实就用bsp包里的读写片上flash改改就成iap了。

出0入25汤圆

 楼主| 发表于 2019-6-30 15:09:10 | 显示全部楼层
o0pingu0o1 发表于 2019-6-29 01:20
新唐官方的isp基本没法用,上位机只支持115200和19200,真不知道改完哪里能降下来波特率,还有如果远程升级 ...

兄弟开源吗

出0入42汤圆

发表于 2019-6-30 15:22:34 | 显示全部楼层
这芯片用起来各种小坑很多。adc说前三次采集数据要丢,关了adc再开也是这样,但我试下来,切换通道,前三个数据也要丢,有遇到的麻?

出0入25汤圆

 楼主| 发表于 2019-6-30 15:41:11 | 显示全部楼层
他的ad 确实有不少小毛病。  切通道丢弃5次。采样 10次。求平均值

出0入0汤圆

发表于 2019-7-5 09:39:43 | 显示全部楼层

可以开源,不知道有没有需求。

出0入0汤圆

发表于 2019-7-5 09:42:32 | 显示全部楼层
rei1984 发表于 2019-6-30 15:41
他的ad 确实有不少小毛病。  切通道丢弃5次。采样 10次。求平均值

16MHZ内部晶振可以支持到2400至115200,感觉还挺好用。现在电子产品竞争太激烈,1元的片子都给当成高级MCU去伺候。放在野地里,IAP功能纯是逼出做出来的。

出0入0汤圆

发表于 2019-7-5 18:04:35 | 显示全部楼层
canback 发表于 2019-6-30 15:22
这芯片用起来各种小坑很多。adc说前三次采集数据要丢,关了adc再开也是这样,但我试下来,切换通道,前三个 ...

把时钟改到4M以下

出0入0汤圆

发表于 2019-8-2 03:18:56 | 显示全部楼层
rei1984 发表于 2019-6-30 15:41
他的ad 确实有不少小毛病。  切通道丢弃5次。采样 10次。求平均值

改用UART1这样合并ICP/ISP实在好用,用了你的UART1_OK.HEX配官方ISPV2.06实测成功,但ISP完后,为何目标板重启时,P12,P13,P00,P01上接的LED都会闪几下后才正常工作,貌似是LDROM令其闪烁的,若用官方的V2.06HEX就不会,用的最小系统,只接P12LED当例程的GPIO1,其他几根脚是用示波器量测的,看了MAIN.C有使用P13,但是找不到是哪里叫用到P12,P00,P01,有请指点,谢谢.

出0入25汤圆

 楼主| 发表于 2019-12-21 10:26:19 | 显示全部楼层
wmm20031015 发表于 2019-7-5 18:04
把时钟改到4M以下

是这个意思!!

出0入0汤圆

发表于 2019-12-21 14:12:25 | 显示全部楼层
mark..

出0入0汤圆

发表于 2019-12-21 17:49:34 | 显示全部楼层
不错,学习了!~

出4375入62汤圆

发表于 2020-1-17 11:12:23 | 显示全部楼层
谢谢提醒  

出0入0汤圆

发表于 2020-1-19 21:43:44 | 显示全部楼层
Thank you!!!

出0入0汤圆

发表于 2020-11-19 16:02:33 | 显示全部楼层
这个bootloader的官方源代码在哪啊?在新塘的官网怎么找不到?

出125入16汤圆

发表于 2020-11-19 16:27:57 | 显示全部楼层
谢谢,备用

出0入0汤圆

发表于 2020-11-22 12:55:14 | 显示全部楼层
兄弟你好,我用了你这个帖子里面的源码  现在想用u0做isp升级口,但是在编译你源码的时候出现CMD_ERASE_ALL:这个未定义的错误,请问这个定义的数值是多少呢?你源代码里面没有...

出0入0汤圆

发表于 2020-11-22 14:57:36 | 显示全部楼层
台系芯片都是这个样子
甚至已经不如国产
有些还喜欢装逼只写英文ds
关键还到处都是错漏...
官方固件库就仿佛是写手刚刚开始练C一样..菜无可菜

出0入0汤圆

发表于 2020-11-26 16:28:53 | 显示全部楼层
我用了这个bootlaoder之后,片内Flash无法当eeprom来使用了,写入后重启CPU读出来的都是00
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 00:03

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

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