1.       在stepldr/main.c下面的mian函数调用Uart_Init()对串口的初始化

我们使用UART1来作为debug口。

2.       实现nboot通过串口下载并运行eboot.nb0的函数体

我们接下来分析其实现

2.1   Uart_Getch()函数

这个函数主要是在nboot启动的时候,判断是否有来之我们对键盘的操作,假如我们在等待的时间之内按下空格键,那么这时候nboot就处于等待用户通过DNW.exe下载并运行eboot.nb0的状态,假如我们在等待的时间内没有按键空格键,那么nboot会接下去运行eboot,继而由eboot来加载NK。

上图的第119行表示UART1的RX buffer register是否接受到数据,如果有数据,就接下来执行第124行,也即读取接收到的数据

#define RdURXH1()   (*(volatile unsigned char *)0x50004024)

当然,我们按下键盘的空格键,这时候DNW.exe会接受到这个信息,然后DNW.exe会通过我们WINCE设备与PC实际的串口线来发送到UART1的RX buffer register。

当我们按下键盘的空格键,nboot就处于等待我们下载eboot.nb0的状态,通过DNW.exe的“serial port -> transmit”来发送eboot.nb0,那么nboot是如何接受并运行eboot.nb0呢?接下来,我们来看看ComLoad()的函数体

2.2 ComLoad()

其中#define LOAD_ADDRESS_PHYSICAL   0x30038000

上图的第87是把串口发送过来的数据保存到SDRAM中以0x0x30037FFC为起始的内存中,而地址0x30037FFC到0x30037FFF用于记录eboot.nb0的文件大小,从0x30038000地址开始记录eboot.nb0的数据,这也是eboot在SDRAM中的起始地址。

第90行到第93行是记录下eboot.nb0文件的大小,用4个字节来记录,为什么是4个字节?而且为什么是前面4个字节呢?这应该是由微软WINCE6.0编译生成eboot.nb0时,由其编译生成工具决定的。

第99行,为什么DownloadFileSize=fileSize-6呢?因为有4个字节是用于记录eboot.nb0的大小,那么另外2个字节应该是用于记录eboot.nb0的校验码。

当DNW.exe通过UART1把eboot.nb0下载到以0x30038000为起始的内存中后,接下来做什么呢?接着看ComLoad()的函数体的后面部分

从第102行到105行可以看出来,eboot.nb0的后两个字节是用于记录本身数据的校验码的。这几行代码也就是用来计算eboot.nb0的数据的校验码。

第107和第108这两行读取了eboot.nb0中记录的校验码。

第110行用于比较现在计算出来的校验码是否和保存在eboot.nb0中的校验码一样,如果不一样,那么nboot就会退出运行,从而eboot.nb0的代码就得不到运行,这样的现象我也遇到过(但很少出现),但如果重新来下载eboot.nb0就没有了,不知是否是因为DNW.exe本身有bug?如果校验码一直,那么接下来就在SDRAM中运行eboot.nb0

第181行,就是eboot.nb0在SDRAM中开始运行了,也即从Src/Bootloader/Eboot/starup.s下面的StartUp函数开始运行,见下图

接着就从ResetHandler处开始运行。

nboot通过DNW下载并运行eboot.nb0相关推荐

  1. 【嵌入式】DNW下载的软硬件流程

    [嵌入式]DNW下载的软硬件流程 将实验箱中的拨码开关2拨到on,长按电源键直至电脑提示安装驱动 打开计算机设备管理器,右键选择更新驱动程序,手动添加驱动程序 将拨码开关2重新置为OFF状态,然后关闭 ...

  2. linux中使用串口(dnw)下载程序到jz2440开发板

    对于大多数使用韦东山jz2440开发板的用户来说,使用OpenJTAG或EasyOpenJTAG是非常方便的,并且视频教程中也是用这两种 来教学的,对于没有OpenJTAG. EasyOpenJTAG ...

  3. ABP框架—从项目下载到运行详细讲解

    ABP的学习网站我目前是使用两个,两个网站的文档内容有些是互补的,可以帮助我们更详细的学习 1.  https://www.abp.io/ 2.  https://aspnetboilerplate. ...

  4. linux战争雷霆无法运行,《战争雷霆》Mac版下载及运行问题汇总

    战争雷霆Mac版下载及运行问题汇总,苹果OSX系统怎么运行战雷?本期给大家带来Mac玩战雷的常见问题及解决方法. 大家好,看到越来越多的Mac用户正在或者即将使用OSX系统来玩WT,但是对其中的一些细 ...

  5. dnw下载文件时can not open /dev/secbulk0的解决方法

    我用的是ubuntu12  linux-3.2.0 dnw下载文件时出现can not open /dev/secbulk0 这是由于dev下没有对应设备文件secbulk0. 先说解决方法: 下载d ...

  6. Go语言环境下载与运行项目-Mac【小白教程】

    Go语言环境下载与运行项目-Mac[小白教程] 文章目录 下载代码 go语言编辑器下载 go语言环境安装 pkg安装 检查是否安装成功 查看go的安装路径 运行代码 使用的演示项目代码为github开 ...

  7. 下载并运行 Synopsys Detect

    本页介绍下载和运行 Synopsys Detect. 决定如何使用检测 在下载并运行 Detect 之前,您需要做出以下决定: 您要在哪个目录中运行 Detect? 您想在构建之前还是之后运行 Det ...

  8. Wine零知识学习3 —— Winetricks介绍及下载和运行

    本文部分内容引自:桌面应用|用 Winetricks 配置 WINE 一.介绍 Linux下最有名的Windows环境模拟器就是Wine了,本系列前边两篇文章已经对它做了充分的介绍和实际的操作.Win ...

  9. Anaconda3-2022.10下载安装运行(Win11)

    Anaconda是一个开源的数据科学平台,它将数据科学中的好工具集中在一起.它是一个数据科学栈,包含100多个基于Python.Scala和R的工具包.在它的包管理器conda的帮助下,用户能够使用数 ...

最新文章

  1. 打开,保存文件框的文本溢出排查
  2. ajax怎么设置好友,好友按ajax新消息通知
  3. java 与C++ 数据类型大小
  4. .NET Core + Ocelot:API 网关
  5. loj#10050-The XOR Largest Pair【Trie(字典树)】
  6. 没业绩怎么写好年终总结?这样写总结年终奖翻倍!
  7. SunOS与Solaris系统的对应关系
  8. 黑苹果无线网卡选择intel还是博通?及其驱动方式详解
  9. 稳定版本php源包下载,PHPWind历史版本及升级包下载(v1.0.0 - v9.0.2、Ofstar to PW)20170501更新...
  10. mfc 配合directshow
  11. 股票10档接口如何获取数据-步骤
  12. Springboot 通过Jedis-clients 操作Redis
  13. Java程序员的薪资取决于工作年限还是技术?
  14. pycharm连接MySQL数据库
  15. 如何检查java代码有误_Java代码查错题
  16. 五款轻量级的办公软件,界面简洁且无广告
  17. mysql infile ignore_mysql导入数据load data infile用法
  18. Python数据分析入门笔记10——简单案例练习(学生信息分析)
  19. 51nod 1113 矩阵快速幂
  20. 深度强化学习+启发人类的决策智能,专访一家有愿景的中国企业「启元世界」...

热门文章

  1. 037_JDK的Iterator接口
  2. 007_SpEL表达式
  3. 025_jdbc-mysql-Statement的sql注入问题
  4. 012_html如何查看源代码
  5. 交管123缴费显示代理服务器异常,交管12123服务异常怎样办 交管12123 APP服务异常处理办法...
  6. Linux c语言虚拟串口,利用socat和cutecom实现Linux虚拟串口通信
  7. eclipse连接mysql8报错_Eclipse连接MySQL8.0.13 win10 64位
  8. c json 数组转dirction_值得掌握的命令行JSON工具jq
  9. python 保留两位小数 占位_第17p,Python中格式化输出的3种方式
  10. 从零玩转HTML5前端+跨平台开发上