关于8051的bootloader实现方式
- 格式:doc
- 大小:334.00 KB
- 文档页数:8
YCL-MCU-C8051F340-I型产品简介本开发板是针对CP2200以太网控制器和C8051F340单片机(SOC)而开发的,板上可实现简单WEB服务器,可通过工具方便配置出各种网络协议,以适应各种应用。
针对C8051F340单片机片上的全部资源,我们编写了所有功能的测试程序,特别是用其SPI总线实现了SD卡模拟U盘功能,不仅单片机可以对SD卡进行文件系统相关的管理,还可以通过USB口和串口实现SD卡文件系统管理(如创建,删除等操作,都提供源代码),用扩展的CP2200以太网控制器实现了简单WEB服务器,串口转以太网、以太网转串口通信功能等。
一. 核心芯片资源1. CP2200以太网控制器CP2200/1是集成了IEEE 802.3以太网媒体访问控制器(MAC)、10Base-T物理层(PHY)和8KB非易失性FLASH存储器的单芯片以太网控制器,采用28脚QFN(5x5mm)或48脚TQFP封装。
2. C8051F340芯片资源:C8051F340是完全集成的混合信号系统级MCU芯片。
主要资源如下:·高速流水线结构的8051兼容的CIP-51内核(最大48MIPS);·全速非侵入式的系统调试接口(C2接口);·USB总线接口,全速12Mbps,1KB FIFO;·真正10位200ksps的17通道ADC,带模拟多路开关;·64K字节可在系统编程的FLASH存储器;·5376字节的片内RAM;·可寻址64K字节地址空间的外部数据存储器接口;·硬件实现的SPI,SMBus/IIC和两个UART串行接口;·4个通用的16位定时器;·具有5个捕捉/比较模块的可编程计数器/定时器阵列;·片内看门狗定时器,2个比较器,VDD监视器和温度传感器;·40个I/O端口;·-40~85度工业级温度范围;·2.7V~3.6V工作电压,48脚TQFP封装;二. 可评估的其它MCUCP2201,C8051F341/2/3/4/5/6/7;三. 开发板硬件资源:·MCU:C8051F340,片内64K FLASH,5376Byte SRAM·10M以太网:CP2200,集成以太网媒体访问控制器(MAC)和10 BASE-T PHY·内置网络变压器的RJ45网络接口·USB2.0全速接口·串行接口一个·C2调试接口·SD卡接口四. 特色1. 支持通过USB口下载应用软件(更新固件),并提供全套源代码;2. 提供ARP,IP,ICMP,TCP协议的源代码,ARP中实现了缓存的学习、更新、老化、轮转替换。
8051 ISP(U2) 编程器用户指南V5.90目 录1简介 (2)2使用ISP功能前必须的芯片配置 (3)3安装ISP(U2)编程器 (4)3.1安装驱动程序 (4)3.2安装应用程序 (4)4使用ISP(U2)编程器 (5)4.1下载编程数据到ISP(U2)编程器 (5)4.1.1步骤一:选择你要的“单片机型号” (5)4.1.2步骤二:点击“载入文件”,HEX和BIN,MPJ格式都可以。
(5)4.1.3步骤三:配置硬件选项(仅MPC89/MG82系列有效) (6)4.1.4步骤四:“设置脱机模式” (8)4.2更新目标芯片 (9)4.2.1方法一: 点击“更新目标芯片”进行联机更新 (9)4.2.1方法二: 按编程器的“开始按键”进行脱机更新 (9)4.3读取信息区的内容 (9)4.3.1步骤一:选择你要的“单片机型号” (9)4.3.2步骤二:点击“读取信息区”,来读取内容 (9)4.4笙泉项目文件(MPJ文件) (10)4.4.1保存一个MPJ文件 (10)4.4.2加载一个MPJ文件 (11)5信息区域 (12)5.1信息区域的设定 (12)5.2读取信息区域的内容 (13)6关于信息 (14)7版本历史 (15)1 简介ISP 是”I n ‐S ystem P rogramming”的缩写。
可使用户通过软件来更新用户程序,而不必从产品中取下芯片来。
”8051 ISP(U2) 编程器”工具(见下图)。
因为可以将用户程序存储到编程器里的非易失性记忆体里,所以这编程器可以进行脱机编程(不用连接到电脑), 非常适用与没有电脑的地方。
8051 ISP 编程器图片8051 U2 编程器图片绿灯 开始按键 红灯 12ISP 接口 4: 不接 3: VCC 2: DTA 1: GND 灯接口 342使用ISP功能前必须的芯片配置为了能使用ISP功能,用户应当在“Megawin 8051 Writer”或“Megawin 8051 Writer U1”里使用“插入ISP代码”来配置目标MCU,并且设置ISP 空间为1KB(对于MPC82L(E)54是1.5KB)和确认HWBS或HWBS2选项使能注意:为了用户更容易使用ISP功能,笙泉8051系列MCU在出厂时已经做下列出厂设置,即:1)ISP空间设置成1K(或1.5K),并且”HWBS”选项使能2)预编程笙泉提供的标准ISP‐code.因此,用户不必在使用ISP功能之前对芯片进行配置****更多信息请联系笙泉3安装ISP(U2)编程器3.1安装驱动程序将ISP(U2) 编程器连接到电脑的USB口,当电脑弹出提示框显示发现新硬件时,按以下步骤操作。
8051单片机指令8051单片机是一种经典的微控制器,使用广泛,特别适用于嵌入式系统开发。
在实际的编程过程中,了解并掌握8051单片机的指令集是非常重要的。
本文将介绍一些常用的8051单片机指令,帮助读者更好地理解和应用这些指令。
一、MOV指令MOV指令是8051单片机中最常用的指令之一,用于将数据从一个寄存器移动到另一个寄存器。
例如,MOV A, B表示将B寄存器的值移动到A寄存器中。
这个指令非常简单直观,容易理解和使用。
二、ADD指令ADD指令用于将两个数相加,并将结果存储到累加器。
例如,ADD A, B表示将A和B寄存器中的值相加,并将结果存储到A寄存器中。
这个指令非常有用,可以实现简单的数学运算。
三、SUB指令SUB指令用于计算两个数的差值,并将结果存储到累加器。
例如,SUB A, B表示将B寄存器的值从A寄存器的值中减去,并将结果存储到A寄存器中。
这个指令也非常常用,可以实现简单的减法运算。
四、MUL指令MUL指令用于计算两个数的乘积,并将结果存储到累加器和扩展寄存器中。
例如,MUL AB表示将A和B寄存器中的值相乘,并将低8位结果存储到累加器A中,将高8位结果存储到扩展寄存器B中。
这个指令非常有用,可以实现简单的乘法运算。
五、DIV指令DIV指令用于计算两个数的商和余数,并将结果存储到累加器和余数寄存器中。
例如,DIV AB表示将A和B寄存器中的值相除,并将商存储到累加器A中,余数存储到余数寄存器B中。
这个指令非常有用,可以实现简单的除法运算。
六、JMP指令JMP指令用于无条件跳转到指定的地址。
例如,JMP 2000H表示程序跳转到2000H地址处执行。
这个指令非常常用,可以实现程序的控制流跳转。
七、JC指令JC指令用于在进位标志位(Carry Flag)为1时跳转到指定的地址。
例如,JC 3000H表示当进位标志位为1时,程序跳转到3000H地址处执行。
这个指令非常有用,可以实现条件判断和分支跳转。
8051单片机指令系统的7种寻址方式解析寻址方式:寻址就是寻找操作数的地址。
绝大多数指令执行时都需要操作数,因此就存在如何确定操作数地址的问题。
所谓寻址方式就是通过什么途径获取操作数的方式。
根据指令操作的需要,计算机总是提供多种寻址方式。
一般来说,寻址方式越多计算机的寻址能力就越强,但指令系统也就越复杂。
8051指令系统有7种寻址方式:寄存器寻址,直接寻址,寄存器间接寻址,立即寻址,基址寄存器加变址寄存器间接寻址,相对寻址,位寻址,下面分别介绍。
寄存器寻址寄存器寻址:寄存器寻址就是操作数在寄存器中,因此指定了寄存器就得到了操作数。
采用寄存器寻址方式的指令都是一字节的指令,指令中以符号名称来表示寄存器。
例如:MOV A R1 这条指令的功能是把工作寄存器R1的内容传送到累加器A中,由于操作数在R1中,因此指令中指定了R1,也就得到了操作数。
寄存器寻址方式的寻址范围包括:工作寄存器组R0~R7,部分特殊寄存器ACC,B,DPTR 等。
直接寻址直接寻址:直接寻址就是在指令中直接给出操作数所在单元的真实地址。
这里给出的操作数直接地址为8位二进制地址。
程序中一般用十六进制数表示。
例如:指令MOV A,30H 把内部RAM单元30H中的数据传送给累加器A,指令中30H就是操作数的直接地址。
直接寻址方式的寻址范围包括:内部数据存储器低128单元,特殊功能寄存器。
特殊功能寄存器在指令的表示中除了可以以直接地址形式给出外,还可以以寄存器符号形式给出,如对累加器A,在指令中可使用其直接地址OEOH,也可使用其符号形式ACC。
立即寻址立即寻址:立即寻址方式就是实际操作数作为指令的一部分,在指令中直接给出,取指令时,可在程序存储器中直接取得操作数。
通常把出现在指令中的操作数称为立即数。
采用立即寻址方式的指令,在立即数前面加上。
笙泉8051编程器使用手册V1.10目录1.工具简介12.软件简介13.编程器的操作2 3.1联机编程范例 33.1.1选择IC型号33.1.2装载文件33.1.3插入ISP代码43.1.3.1插入笙泉提供的ISP代码43.1.3.2插入用户自编的ISP代码43.1.4设置硬件选项53.1.5执行 AUTO 操作5 3.2脱机编程范例 63.2.1选择IC型号63.2.2装载文件 63.2.3插入ISP代码73.2.3.1插入笙泉提供的ISP代码73.2.3.2插入用户自编的ISP代码73.2.4设置硬件选项83.2.5将代码和硬件设置下载到编程器83.2.6按编程器里的‘Auto’键,开始编程9 3.3多机串联编程范例103.3.1按脱机编程范例中的步骤,一一为编程器下载所需的CODE103.3.2将编程器连接起来103.3.3按编程器里的‘Auto’键,开始编程104.芯片储存空间的配置114.1MPC87L/E51/52 115.芯片的硬件选项12 5.1MPC87L/E51/52 121. 工具简介“Megawin 8051 Writer ”是专门为笙泉的8051芯片而设计的一款编程器,它使用的是USB 的接口,可使用USB 总线电源进行联机编程,也可使用外部电源进行脱机编程,并可多台连在一起进行一键编程(适用于工厂大批量编程)。
它有简单而紧凑硬件结构和友好的软件界面使得这款编程器非常容易使用。
2. 软件简介本编程器软件为免安装,免驱动的绿色软件.USB 接口 电源接口 AUTO 按钮 状态指示灯 电源开关 IC 座蜂鸣器串联接口 串联接口保存成MPJ 插入ISP 3. 编程器的操作下图是8051编程器应用程序的用户图形界面图, 在用户图形界面图的基础上,在接下来的小节中,将展示实际案例指示用户如何轻松地使用此编程器.检查ID 擦除 查空 编程 校对 自动硬件选项区编程IC 读取IC 设置IC ISP/IAP主频选项清除信息IC 选项退出3.1联机编程范例3.1.1选择IC型号选择你所有编程的IC的型号。
一、BootLoader是怎么下载应用程序的?应用程序的写入可通过S19文件。
S19文件为飞思卡尔推荐使用的标准文件传送格式,是一段直接烧写进芯片的ASCII码格式:记录类型、记录长度、存储地址、代码数据和校验码5个部分组成每一行总是以S开头,后一位跟着的数据表示改行记录的类型。
S0:说明性信息,非程序数据S1:程序数据,且地址为16位S2: 程序数据,且地址为24位S9:整个S19文件的结束行浅谈BootLoader中的Flash与RAM划分:二、为什么要划分出一块RAM区?对P-Flash擦除与写入操作的时候,不允许同时对其进行读取,故此,对Flash的擦除、写入以及CAN终端信号的处理代码,应复制到RAM中运行。
怎么做?(在飞思卡尔XET256中,这一功能可通过关键字RELOCATE_TO实现。
)因此在划分Flash的同时也应对RAM进行划分,以实现这一功能。
(定义RAM的关键字为READ_WRITE)这样做后得到什么样的结果?划分出一个与P-Flash大小相等的一块RAM区三、关于BootLoader中的地址分配问题飞思卡尔16位单片机复位后总是从优先级最高的中断向量地址0xFFFE处取第一条执行指令。
因此,BootLoader 可执行代码的首地址应安排在此处,以保证上电后BootLoader最先执行。
这可以通过在prm文件中定义VECTOT 0 实现,即将VECTOR 0 定义为Bootloader程序的入口地址。
而应用程序也同样希望对VECTOR 0 定义,以实现在单片机上电后直接执行应用程序的目的。
由于存在这一中断资源冲突,因此,BootLoader在刷写时需要对应用程序的中断向量表进行重新分配。
四、通信协议BootLoader的通信协议的目的是什么?实现BootLoader于上位机之间的命令和状态传输怎么做?在标准的CAN协议基础上,定义一套简单的通信协议。
该协议中所使用的命令和状态均以报文ID表示,即每一个ID代表一个特定的命令或状态。
KEIL----单片机实现自定义bootloader,用于程序更新
2013-04-07 15:45:05| 分类:我的自学实践|举报|字号订阅
关于8051的bootloader实现方式
一,基本硬件需求
要实现IAP功能,需要51单片机可以在程序里修改代码空间的Flash,或者至少可以修改用户程序区的Flash,新出的51大部分都能满足这个要求
二,空间划分
一般bootloader位于单片机代码空间的起始地址,用户程序在后面。
这个需要根据实际的需求来决定,bootloader功能简单,就少占用一些,bootloader功能复杂的就多占用一些。
除此之外,一般还要根据Flash的页为界线划分。
附带的工程模板
里,bootloader使用0x0000-0x0fff区间,用户程序使用0x1000以后的空间。
三,中断的处理
51单片机的中断入口一般位于0地址开始的区间,无法修改,但是根据上面的空间划分方式,这个区间位于bootloader的范围,是不能随意更改的。
所以代码里用了一个软件的方式对中断入口做了重映射处理,后面将结合具体的代码介绍实现方
式。
四,Bootloader的处理
1,建立工程的时候,选择把Startup.a51添加到工程
2,在Startup.a51里添加如下代码:
ORG 0003H
LJMP 2003H
ORG 000BH
LJMP 200BH
ORG 0013H
LJMP 2013H
ORG 001BH
LJMP 201BH
ORG 0023H
LJMP 2023H
……………………
…….
根据具体型号的中断数量和地址,添加中断跳转代码,格式为
ORG XXH LJMP 2000+XXH,这样做,是为了将中断映射到用户程序区的
0x2000开始的空间,在用户程序里,还要做一些对应的设置,后面将介绍。
3,Bootloader的处理流程。
Bootloader的主要作用一般是开机初始化,自检和升级用户程序,以及引导用户程序。
因为上面已经把中断映射到用户程序空
间,所以bootloader里最好就不要用中断了。
五,用户程序的处理。
1,用户程序的Startup.a51无特殊需求,可以根据需要选择添加到工程,然后自己做修改,也可以不添加到工程,由编译器连接一个默认的startup.a51
2,用户程序的所有普通函数和中断函数也没有特殊要求,可以按正常的方式编写
3,用户程序的工程设置。
因为用户程序不再是从0地址开始,所以需要在工程设置里做定位处理:设置用代码的范围,定位用户代码入口地址。
具体设定如下图:
因为用户代码规划到0x1000以后的空间,所以设置code range从0x1000开始为了让bootloader能准确跳到用户程序入口,所以需要将C_C51STARTUP定位到0x1000位置。
(C_STARTUP位于startup.a51里,它才是程序的真正入口,而不是main函数;另外,入口也并不是必须定位在这个位置,只要位于用户代码空间就可以)
4,中断映射。
在bootloader里,将中断入口定位在了0x2000开始的空间,在用户程序里,也必须做一个对应的设置。
方法如下:
这样处理之后,便完成了中断的映射。
当中断发生时,会先进入位于bootloader里的硬件中断入口,然后在那里跳转到0x2000开始的一个软件重定义的向量表,再跳转到中断入口函数。
和没有bootloader的方式比起来,这样做会多一次LJMP跳转,但是一般情况下影响不大。
关于bootloader存放位置:
备注:其实,最好是将bootloader程序放到最后,这样,应用程序起始地址,中断地址等不用设置,默认程序从0x0000h开始执行,然后用函数指针跳转到bootloader 程序起始地址,让其先执行。
通过bootloader内部程序选择是否升级应用程序还是直接跳转回应用程序区执行。
若升级,就读写flash的应用程序部分。
若不升级,就跳转回应用程序继续运行。
BOOTLOADER 程序举例:
#include<reg52.h>
//用户程序起始地址
#define USER_APP_ADDR 0x1000
char power_on_test(void);
char check_upgrade_request(void);
char upgrade(void);
void main(void)
{
//定义一个函数指针,用于跳转到用户程序
void (*boot)() = USER_APP_ADDR;
//bootloader里不能开启中断
EA = 0;
//添加系统初始化代码
if(power_on_test()){//开机自检
upgrade();
}
else if
(check_upgrade_request()){//检查是否有升级需求
upgrade();
}
//如果不需要升级,或者升级已经完成,执行下面的代码进入用户程序(*boot)();
//正常情况下不会运行到这里,以防万一
while(1);
}
char power_on_test(void)
{
//添加开机自检代码,如果自检错误,进入升级模式
return 0;
}
char check_upgrade_request(void)
{
//添加检查用户是否有升级要求的代码,例如输入命令或按下按键,如果有,则进入升级模式
return 0;
}
char upgrade(void)
{
//添加传输升级文件和升级用户程序区的代码
return 1;
}
用户程序:
#include<reg52.h>
//main函数无特殊要求
void main(void)
{
while(1);
}
//中断函数无特殊需求,可根据需求随意添加
void UART_ISR(void) interrupt 4
{
return;
}
工程配置如下
六,关于升级文件
升级文件的传输可以根据需要使用任何方式,例如串口,网络,USB,存储卡等。
升级文件的传输可以做在bootloader里,也可以做在用户程序里,或者两种方式都
有。
一般来说,bootloader的代码比较简单,不适合做复杂的传输方式。
如果传输方式比较复杂,可以在用户程序里传输升级文件,暂存到一个外部存储器,然后跳
转到bootloader,让bootloader从外部存储器读出并升级用户程序。
升级的时候
要注意用户代码的范围。
为了传输的可靠性,升级文件一般还会添加一个文件头,里面包含一些基本的文件
信息,例如长度,校验等,这些可以通过编写一些简单的工具来完成。
另外,推荐一些升级文件的传输方式,做bootloader的时候可以考虑
1,串口。
可以考虑使用XMODEM协议传输升级文件,因为这是一个比较标准的传输协议,很多现成的软件可以支持,例如Windows下自带的超级终端就可以实
现(XP以后的系统没有超级终端,但是也有一些别的软件可以代替,例如
SecureCRT)
2,USB主机。
可以用U盘方式升级。
升级文件取一个特定文件名,放在特定位置,主机读取到文件后自动升级
3,USB从机。
可以让从机虚拟成一个U盘,PC把文件复制到这个虚拟U盘就完成升级。
这样就不需要编写专门的升级软件
4,以太网。
a) TFTP,这是标准的文件传输命令,Windows自带,而且协议
简单
b) Web。
用网页的方式,界面有好直观,用网页浏览器就可以
实现,也不用单独开发专用的升级软件。