原创
pic18f66j60 官方的BOOTLOARD的程序分析
官网上的MLA 中 有 Internet Bootloader 66j60 的程序。可以免费下载。
官网的 Bootloader 更好,我做的 Bootloader 只是下载其中的应用程序。 官方的可以下载全部的程序。
这是 Bootloader. LKR中的配置。
CODEPAGE NAME=config START=0xFFF8 END=0xFFFD PROTECTED
CODEPAGE NAME=bootjmprom START=0xDBC0 END=0xDBFF PROTECTED
CODEPAGE NAME=bootldrrom START=0xDC00 END=0xFBFF
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED
从中 我们可以知道 其主要设定了2个区域。bootjmprom 和bootldrrom 。
bootldrrom 顾名思意 就是bootldr的程序。
bootjmprom 这个区域就放了一个JMP 指令。
#pragma romdata BOOTJUMPROM
static far rom DWORD dwJumpInstructions[3] = {0xFFFFFFFF, 0xFFFFFFFF}; // 0xF000EF02 is a goto 0x000004 instruction
#pragma romdata
程序指针 运行到这个地方,跳转到0004 去。
主要是保护bootldrrom 。
bootldrrom是一开机就运行的一个程序。 主要的左右是等4秒时间,看看是否有网络数据发来。
如果有数据,那没有什么可说的,把数据写入 指定的地址中。指定的地址 就是数据中自带的地址,因为用的是HEX。
以上的程序 需要下载器 先下载到芯片中。 我用的是PICKIT3 和ICD2.
然后用网络 下载到 APP程序到芯片中。
APP的程序安放定义如下:
CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED
CODEPAGE NAME=page START=0x2A END=0XDBBF //用户存储空间
从而看出,2个程序的放置位置 是精心的错开的。
bootldr的程序安放在芯片的最后部分ROM, APP程序安放在芯片的最前面。
但是开机运行时,运行BOOT 程序,等等4秒(默认),这个时间可以改。 注意的是 需要在上电等待的时间内有个提示,否则客户老是以为出了什么问题,上电一直没有反映。
数据的传输协议是 :TFTP
TFTP是简单文件传输协议,好像平时接触不到,网上搜到的说明大都是说用在LNIX系统的无盘工作站,还有就是用在路由器升级上什么的。
我要用它来给我的网络控制板进行BOOTLOARD, 以我的理解,我的控制板应该是设为客户端,PC机器设为服务器端。
但是分析ETHERNET BOOTLOARD的程序,发现控制板什么都可以相应,也就是说5个TFTP支持五种类型的包,这五种类型的包都有。
opcode operation
1.Read request (RRQ)
2.Write request (WRQ)
3.Data (DATA)
4.Acknowledgment (ACK)
5.Error (ERROR)
控制板应答客户端的也应答服务器的。
因此下载的时候用到一个小工具TFTPD32 ,TFTPD64 。根据PC机系统选择。
文章评论(0条评论)
登录后参与讨论