https://blog.csdn.net/ncaptain_/article/details/106235578

新唐N76E003ISP串口下载轻体验

  • ISP原理
  • N76E003通过ISP烧录程序
  • 针对ISP的改进方向
  • 总结

ISP原理

ISP全称In System Programming,即在应用中编程。既然是在应用中编程,那么第一步就是你的单片机要有应用,这里的应用可以理解为单片机程序,这是一段独立的程序,在嵌入式单片机中我们一般叫它引导程序,即bootloader,bootloader在各类单片机中的定位基本一致,这是单片机上电首先进入执行的一段程序,可以是对单片机的一些配置,也可以是为ISP做准备。

STC单片机的bootloader是厂家出厂前就已经烧录进单片机,所以我们拿到手后用他们官方提供的ISP软件即通过串口把hex文件烧录进单片机,十分的方便易用,就是无法对程序进行在线调试。

相对而言,STM32单片机对于ISP的设计就比较灵活一点,它可以通过用户对单片机引脚的配置来决定单片机上电启动的位置,如下图。并且厂家也已经在出厂前就把bootloader程序烧录到系统存储区,方便ISP升级,ISP升级的协议是一些标准的文件传输协议,通过串口即可实现程序的升级。

新唐N76E003的ISP设计与上诉两款单片机基本一致,它在单片机内放了两片flash,如下图,LDROM专门用于存放bootloader,APROM专门用于存放用户代码,单片机启动运行哪一片的代码,以及LDROM大小的分配都是在config里面进行配置。但是与上诉单片机不同的是厂家出厂前并没有把bootloader程序烧录到LDOROM中,这迫使你要使用它的ISP功能就要先通过ICP下载器把bootloader烧录到LDROM中去,并配置一下启动项,这个槽点经常被大家吐槽,我都买了ICP下载器了还用ISP干嘛,虽然是有些鸡肋,但是在一些特殊应用情况下不得不使用ISP,那也只能来研究一下了。

N76E003通过ISP烧录程序

虽然N76E003出厂没有烧录ISP的代码,但是官网有源码提供,将源码下载下来,(相关文件会在下文丢链接)编译一下生成hex文件,然后通过官方的ICP软件把hex烧录到LDROM里面,同时要分配好LDROM的大小和启动项,如下图。


下载完成后便可以用官方的ISP软件通过串口把程序下载到单片机的APROM里面了,如下图。


ISP软件貌似只能下载bin格式的二进制文件,所以需要在keil里面编译时加载一条命令,通过第三方软件把hex转换成bin文件,使用的软件如下图,该软件也是官方自带的,我会在文末放链接。


转换bin文件的方法,首先将上诉软件hex2bin放到输出文件夹内,然后打开keil的魔术棒,点击User,如下图,第三步添加一条命令 .\Objects\hex2bin.exe .\Objects\temp.hex
.\Objects\hex2bin.exe 这个是hex2bin软件的位置,Objects是我的工程文件输出文件夹,这个根据自己工程的目录结构修改。
.\Objects\temp.hex 这个是指需要转换的hex位置,temp.hex是工程输出的hex文件,根据自己的文件名修改。
最后别忘了✔


操作完以上步骤后编译,keil输出以下内容即代表转换成功,就可以去输出文件夹下找到bin文件了。

针对ISP的改进方向

上诉ISP已经实现了基本的功能,即串口下载,但是看网上的评价对官方的ISP代码质量表示不屑。例如代码量过大,明明1K就能解决的事情,它非搞了2K多。每次ISP都会擦除整个APROM等等,我看了官方的代码,确实有改进的空间,我的目标改进方向主要是自定义协议,精简代码量。这样将bootloader代码精简到几百个字节,能省则省,为用户代码省下空间。协议自定义,自写上位机,脱胎换骨。想怎么来就怎么来。奈何本人懒得动,并且实际项目中还没有写到rom不够用的情况,所以暂时不要重复造轮子,先用官方的ISP程序,日后有时间可以重0到1写一套完美的ISP程序。

目前使用官方的ISP程序,启动项配置的是从LOROM启动,整个单片机启动流程如下图

上诉流程在调试代码时就有点不方便,因为调试代码的时候要时不时的烧录程序,但是程序现在运行在APROM,你得让单片机运行到LDROM才能升级程序,这就要手动复位一下,作为强迫症着实受不了,并且在实际应用的电路中并不会单独有复位按键,只能选择重新上电。能不能搞得智能一点能,就是在代码执行APROM时也能响应上位机进行升级,那要做的就是在上位机等待连接时代码自动跳转到LDROM执行,这样就不用复位或者重新上电去升级了,所以我们现在看一下上位机在连接单片机时发出了什么内容。

通过虚拟串口,看到上位机在连接单片机时不停的在发送一帧64字节的数据,开头为0xAE,如下图

这样我们可以在APROM的代码中监听串口数据,如果收到0xAE这帧数据则跳转到LDROM执行,并且程序可配置成直接上电直接从APROM中执行。关于LDROM和APROM互相跳转可以通过阅读芯片手册对CHPCON寄存器进行配置。如下图

写成子函数如下
跳转到LDROM

void Jump_toLDROM(void)
{TA = 0xAA;TA = 0x55;CHPCON |= 02;                  // BS = 1             TA = 0xAA;TA = 0x55;CHPCON |= 0x80;                 //  restart
}

跳转到APROM

void Jump_toAPROM(void)
{TA = 0xAA;TA = 0x55;CHPCON &= 0xFD;               // BS = 0        TA = 0xAA;TA = 0x55;CHPCON |= 0x80;               //  restart
}

为防止串口监听错误可以多监听几个字节对其进行判断,如下图

现在的单片机执行步骤如下图

以上对APROM代码进行操作一下,就可以使用官方的ISP程序实现热升级,即不用重启或者复位就可以使用ISP升级了。

总结

ISP作为升级代码的一种方式,十分的方便快捷,只需一个TTL模块便可以对代码进行升级,后续还可以通过无线模块实现OTA升级,那样就更加的方便了。

以上内容为本人原创,个人经验有限,有错误的地方或建议还请大家多多提。

以下为打包的文件,包含如下图

下载链接 https://download.csdn.net/download/ncaptain_/12440575

新唐N76E003ISP串口下载轻体验相关推荐

  1. 新唐M480系列单片机写入dataflash数据

    因为项目第一次接触新唐的单片机,其大部分功能和开发环境和STM32是相似或者一样的,所以很多操作可以借鉴STM32的开发方式.也有很多操作细节不太一样,这篇博客主要是记录我在开发过程中所遇到的问题. ...

  2. 新唐单片机keil驱动问题

    1:新唐单片机keil编译工具,资料都可以在新唐官网下载.keil驱动软件要安装在keil安装的目录下,今天安装了很久,一直提示不成功,就是因为驱动Nu-link driver 没有安装到keil安装 ...

  3. 新唐nuc972更换uboot调试串口

    最近开新项目用到新唐的nuc972平台,由于硬件工程师为了方便布线,所以将原本用于调试口的uart0改成了485,需要将uart1更改为调试串口.最初从nuc972开发文档开始看,看uboot配置和修 ...

  4. 新塘单片机烧写器_ICP Programming Tool下载|新唐单片机烧录工具ICP Programming Tool v3.00.6909 官方版 下载 - 巴士下载站...

    ICP Programming Tool(新唐单片机烧录工具),程序自带Nu-Link USB Driver 1.6驱动程序,支持8051/M031/M051/M0518/M0519/M0564/M5 ...

  5. 新唐单片机使用Keil下载出现*** Error: Flash Verify Failed at 0x00xx(错误码不固定)已解决(但未完全解决)

    这个问题未根本解决,只是找到关闭报错的方法 文章目录 错误现象: 解决办法 错误现象: 首先是弹出提示框:[Flash下载失败] 编辑框也有对应错误详细信息,每次烧录错误信息不固定: 或者 再或者 可 ...

  6. n76e885_新唐N76E003,N76E616烧录,调试各种问题集【坑集】

    新唐N76E003,N76E616烧录,调试各种问题集[坑集] 芒果 • 2018 年 10 月 24 日 这篇博文用来记录学习新唐单片机时遇到的问题以及解决的过程和方法.当然也有各种坑. 希望这篇文 ...

  7. 新唐M251 CORTEX-M23内核移植TencentOS tiny教程

    Cortex M23 移植TencentOS tiny 准备源码和工具 准备硬件.软件 移植开始 准备源码和工具 TencentOS tiny的源码地址在这: TencentOS tiny. MDK软 ...

  8. idata 单片机 新唐_【nuvoton新唐8051单片机】NuTiny-SDK-N76E003开发板

    型号:NuTiny-SDK-N76E003 内核架构:8-bit 产品简介: N76E003为新唐高速1T 8051 单片机系列产品,提供18 KB Flash ROM.可配置Data Flash与高 ...

  9. 【Linux】新唐NUC977系统编译及烧写流程

    新唐NUC977系统编译及下载流程 前言 一.UBoot的编译 二.Kernel的编译 三.文件系统的制作 四.系统的烧录 烧录u-boot-spl.bin 烧写u-boot.bin 烧写env.tx ...

  10. 新唐NUC980使用记录:开发环境准备与编译配置基础说明

    文章目录 目的 开发环境准备 调试烧录环境 开发编译环境 编译工具链 uboot 和 linux buildroot 应用程序示例 NUC980 NuWriter Linux command line ...

最新文章

  1. 字典排序 python3_一步一步学Python3(小学生也适用) 第十二篇: 元组tuple类型
  2. Kafka2.0生产者客户端使用
  3. jq分页 不刷新页面_jQuery无刷新分页完整实例代码
  4. 运用大数据助力大发展
  5. 洛谷P1313 计算系数【快速幂+dp】
  6. PHP合并2个数字键数组的值
  7. wp7检测网络是否可用以及网络开启简单代码段
  8. java多线程的常见例子
  9. 三菱GXWorks2 变换梯形图
  10. PreaparedStatement中execut的使用
  11. 弘辽科技:关于老店盘活的基础思路。
  12. python3 判断素数
  13. ffmpeg截取视频片段命令优化
  14. Mavlink协议概要
  15. Matlab中的poly2trellis函数使用简介
  16. 高数知识点整理——有理分式的不定积分(多项式的除法)
  17. 对称加密之流密码RC4
  18. SQL Server备份、完整备份,差异备份、日志备份
  19. c语言typedef怎么自定义函数,c语言中typedef的用法
  20. window环境下部署hbase(仅测试环境)

热门文章

  1. HTML排版一首古诗,古诗句排版正确方式
  2. 手算KMP算法next数组
  3. 向量空间相关概念总结-基
  4. html向下三角箭头,CSS制作三角箭头(兼容IE6)
  5. 偷偷盘点一下各大公司的实习薪资
  6. Python实现cosx函数(泰勒公式)
  7. 完整方法:摄像头打不开,驱动无法安装成功,设备状态显示由于其配置信息(注册表中的)不完整或已损坏,windows无法启动这个硬件设备。(代码19)
  8. linux安装iscsi设备,linux系统下安装配置iSCSI教程
  9. Python 文本生僻字判定和拼音标注脚本
  10. 张小龙分享微信——从产品经理的角度解读微信