由于之前把JN5169的开发环境挪到了VSCode上并实现了编译的全过程后,想通过命令行方式将烧录过程一并完成的时候,发现原版的设计上使用了FT232RL的两个GPIO引脚来拉低MISO和NRST引脚完成芯片的重启和片内Bootloader,而我换用了更便宜的国产CH3xx芯片并使用了串口中的DTR和RTS来完成的时候,发现Programmer在烧录过程中把这两个引脚持续拉低,因此无法完成烧录过程。因此,根据NXP的JN-AN-1003关于JN51XX片内Bootloader的操作手册,结合逻辑分析仪抓取的数据,完成了此文以留备用。
由于最近使用QT比较多,脑子里关于它的内容还热乎着,因此DIY的烧录器准备使用QT来完成,创建一个QT命令行的程序,首先第一步是通过操作DRT和RTS引脚,让JN5169完成重启和Bootloader的进入,项目到这里位置没有难度,而且通过手册里约定的38k4 8N1方式,成功的实现了和JN5169的连接,向它发送GET_CHIP_ID请求的,收到了来自芯片的答复,一个0x0B字节的回文,根据说明,这个回文包括3个内容,即status,chip_id和bl_version。到此进展正常,原本我考虑这个烧录过程,应该是进入BL,GET_CHIP_ID后,Change_Baud_Rate为1Mbps就开始将程序烧录进去的,但是发现这个请求收不到回复,因此就拿出逻辑分析仪勾线后,使用BS里的烧录工具,重新对抓包器(NXP的图纸,抓包器使用了FT232RL和JN5169实现)的烧录过程进行捕捉,获得了对JN5169进行编程全过程的数据包,通过分析,发现该工具的运行流程是这样的:
1、首先也是GetChipId的数据包请求,并获得了回文,这一点和我之前所执行的是一致的;
2、烧录工具却是向芯片发起了一个RAM read request,地址是0x01001500,长度是0x0010。这就让我觉得很奇怪了哎。。。为什么?经查,这个地址是指向JN5169的OTP区第一个字的地址,0x10即读取了4个字,是Internal Use根据字面的解释,Internal Use应该是不用我们操心的,这里返回的数据是一连串的0xff,先mark下来不管它,继续往下分析
3、接下来的操作,就是SelectFlashType了,通过这份bootloader我才发现JN5169貌似是可以通过外置存储来启动的,因此这一步,可能就是在遍历是否存在外置flash,这个遍历的过程是:选择0x04(ST MP25P05-A) 返回OK,ReadFlashID 返回ManuID=0x0B,DevID=0x12。
选择0x00(ST MP25P10-A)返回OK,ReadFlashID 返回ManuID=0x0B,DevId=0x12。
选择0x05(ST MP25P20-A)返回OK,ReadFlashID 返回ManuID=0x0B,DevID=0x12。
选择0x03(ST M25P40)返回OK,ReadFlashID 返回ManuID=0x0B,DevID=0x12。
选择0x01(SST 25VF010A)返回OK,ReadFlashID 返回ManuID=0x0B,DevID=0x12。
选择0x02(Atmel 25F512)返回OK,ReadFlashID 返回ManuID=0x0B,DevID=0x12。至此所有支持的外置存储型号遍历完成了,因为没有外置存储,因此返回值都是0x0B12。这个返回值和所有外置芯片的ManuID都不吻合,可能就是以此标识报告给芯片吧。(后来本着细致认真的态度,剥掉了抓包器的外皮,发现板子上确实有一颗SPI Flash,放大以后看是芯天下的XT25F04B,然后就查阅了这款芯片的数据手册,后发现该芯片的ID Number
(XTX Manufacturer ID)为0BH且DevID为12)。
4、之后烧录工具继续向5169发出了RAM read request,地址是0x01001570,长度是2个字,这里的目的就比较明确了是为了获取芯片的MAC地址(芯片有两个MAC一个是设备固化的MAC地址,还有一个是Customer自定义的MAC地址),这里是自定义的MAC地址,返回的值依旧是全0xff,
5、还是一条RAM read request,地址0x01001580获取设备的固化MAC地址
6、还是RAM read request,地址是0x01001400,长度0x10这条数据没有查到信息,MARK下来,因为不知道这个地址的内容,所以也不知道返回的数据是什么。
7、RAM read request 地址01001510,这里获取到的是芯片的自定义参数
8、Select Flash Type:0x08,这里就是重点了选择内部存储为目标,紧接着才是我期盼已久的ChangeBaudRate,将芯片的通信速率设置为115200bps,并返回Success;
9、从这一步开始,芯片才是正式的开始烧录,烧录的第一步当然毫无疑问的,0x07将所有扇区清除,100毫秒左右之后,芯片返回Success,然后从0x00开始,读取0x40个字节的数据,可能是用于判断扇区是否完成清除,如果是被清除的区域,存储的数据应该是0xff。之后就向该扇区写入数据每个数据包传输128字节的固件内容,在完成所有字节的传输之后,向0x00001400,写入一串短数据作用未知。烧录工具还会读取Flash的数据,应该是进行校验。
10、依然是看不懂的,RAM write request 地址指向0x04000400.不管。MARK之,写进去以后又把它读取出来。再又是RAM write request 地址0x040004F8。写完还是会读取出来。然后接着是0x040005f0,0x040006e8,0x040007E0,0x040008D8,0x040009d0,0x04000ac8,0x04000bc0,0x04000cb8,0x04000db0,0x04000ea8,0x04000efc,
11、完成了这部分的RAM写入,就要求程序从0x04000be9开始执行,返回执行成功后。又发送了一个0x36的数据包目前也未知作用,然后过了较长一段时间后,返回了一个0x37的数据包,往返的数据内容都是0x00,再之后要求程序从0x00000066启动并返回成功至此BootLoader应该完成了它的全部运行;
这里有几点比较有疑问的就是,Bootloader手册我也没有完全阅读,因此很多知识可能并未get到,因此回头我会重新阅读一遍尽量将MARK起来的疑问弄清楚,还有一方面就是不知道是不是由于文件版本的差异,我实际获得的手册和Bootloader的内容有少许出入。但是这确实是我最近才从NXP官网获得的数据,好在差别不大,等回头再看看是怎么回事吧。

JN5169 Bootload 烧录过程和DIY烧录程序(一)相关推荐

  1. c语言烧录芯片,入门扫盲!芯片程序的烧录过程,没想象那么难跟着走就行!...

    大家好!之前就说过从上个月起,创客e工坊在原本讲解电路知识的基础上会逐渐加入单片机的教程. 并且也如约出了三期的单片机视频:什么是单片机:C语言如何控制单片机:单片机小制作自动加湿器: 那么,今天我们 ...

  2. 用iDesigner对HR7P275开发板进行程序的仿真和代码烧录过程详解

    仿真: 1. 选择芯片型号,选择HR7P275. 2.配置芯片配置字 ICDEB项必须选择 Enable,才可以进行仿真调试. ICD_SEL 选择PA4/PA5,这是由于开发板调试器的物理连接选择的 ...

  3. stm32烧录软件_stm32怎么烧录程序

    STM32烧录程序目前笔者知道的有三种:JLink ,Ulink和串口烧录,使用工具分别为:JLink,ULink以及USB转TTL线. ULink 烧录程序 在安装MDK过程中,会有提示是否安装驱动 ...

  4. STM32 ISP烧录过程

     STM32在芯片生产过程中内嵌了一段引导程序,其作用就是通过串口将程序下载到Flash中,为以后的软件更新提供了极大的便利,用户不需要利用仿真口进行下载程序,从而极大的提高了工作效率. STM3 ...

  5. 高通QFIL版本烧录过程

    QFIL 版本烧录: (1) 下载并安装QPST工具,安装成功后,安装列表内就可以看到 QFIL工具了: (2) 启动QFIL工具,界面如下: 烧录过程: (a)SelectPort 进行端口选择,一 ...

  6. linux应用程序固件升级,一种多设备同步烧录Linux固件及应用程序的方法与流程...

    本发明涉及Linux系统技术领域,具体的说全自动化烧写Linux系统及其应用程序,主要是一种多设备同步烧录Linux固件及应用程序的方法. 背景技术: 随着计算机技术.互联网技术和单片机技术的深入发展 ...

  7. STM32的烧录和Hex/bin烧录文件解析、烧录文件是被如何存储到MCU中的?

    什么是hex文件 以*.hex为后缀的文件我们称之为HEX文件.hex是intel规定的标准,hex的全称是Intel HEX,此类文件通常用于传输将被存于ROM或EEPROM中的程序和数据.是由一行 ...

  8. Lofree洛斐小翘键盘DIY小程序,和朋友们FUN起来!

    在5月10日的"以趣之名"Lofree洛斐2021春季新品发布会上,洛斐推出了重磅新产品小翘蓝牙机械键盘.这款新品从人体工程学出发,采用了整体弯曲的设计,使用复古键帽,并对键帽进行 ...

  9. Oracle编程入门经典 第11章 过程、函数和程序包

    目录 11.1          优势和利益... 1 11.2          过程... 1 11.2.1       语法... 2 11.2.2       建立或者替换... 2 11.2 ...

  10. 计算机毕业设计ssm毕业设计过程管理系统049a8系统+程序+源码+lw+远程部署

    计算机毕业设计ssm毕业设计过程管理系统049a8系统+程序+源码+lw+远程部署 计算机毕业设计ssm毕业设计过程管理系统049a8系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S ...

最新文章

  1. 派生类的继承方式【C++继承】
  2. A good security site
  3. 热泵精馏_精馏干货16 || 分子蒸馏
  4. Spring在3.1版本后的bean获取方法的改变
  5. jq select操作全集
  6. 3.8女神节:我又送福利 书和化妆品 男女通吃
  7. rfid在高速公路管理中的应用_RFID亮灯电子标签在仓储管理中的应用
  8. Barrett reduction算法
  9. 关于一维数组(小朋友都能明白的一维数组超详细介绍)
  10. BZOJ4516 [Sdoi2016]生成魔咒 后缀自动机/后缀数组
  11. java 登录界面加验证码_java 做登陆窗口,带有用户名和密码输入框和验证码。求修改...
  12. 程序人生:我,颓废3年,怒加薪26K:成年人最顶级的自律,是逆着人性做事
  13. SWIFT之殇——针对越南先锋银行的黑客攻击技术初探
  14. 中午不知道吃啥子?今天来写一个随机菜谱
  15. 更改HTML提交按钮的名字
  16. Richardson成熟度模型(Richardson Maturity Model) - 通往真正REST的步骤
  17. python web py入门-4-请求处理(上)
  18. 广联达需要的计算机系统配置,广联达bim安装算量软件对电脑要求配置高吗?
  19. C# 三层架构搭建详解(BLL DAL Model)
  20. [轻笔记]ubuntu shell脚本切换conda环境

热门文章

  1. 软件工程课程设计-ch小说网站
  2. 智能电销机器人语音自动外呼效果好吗
  3. 【解决】 io.lettuce.core.RedisCommandExecutionException: ERR wrong number of arguments for 'set' command
  4. RK3399平台开发系列讲解(内核驱动外设篇)6.8、视频解码芯片GM7150驱动的添加
  5. 半监督学习方法:协同训练
  6. 数据归一化和标准化的区别
  7. 人均GDP将破1万美元对中国意味着什么?
  8. 通过PHP访问MYSQL外文书籍,通过PHP访问MySQL外文翻译(模版2)
  9. Phototshop三种蒙版(图层蒙版、剪贴蒙版、快速蒙版)的基础使用。
  10. ngrok服务的编译与环境搭建