原创 pic18f66j60 官方的BOOTLOARD的程序分析

2018-7-16 15:00 1979 14 14 分类: MCU/ 嵌入式 文集: 网络
官网上的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条评论)

登录后参与讨论
我要评论
0
14
关闭 站长推荐上一条 /2 下一条