本篇博文最后修改时间:2017年03月01日,18:26。
一、简介
本文介绍CC2640芯片内部的bootloader。
二、实验平台
协议栈版本:ble_cc26xx_2_01_00_44423
编译软件:IAR Embedded Workbench for ARM Version 7.40
硬件平台:CC26xxDK开发板
仿真器:XDS100V3(香瓜)
三、版权声明
博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.NET/feilusia
联系方式:897503845@qq.com
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427
香瓜单片机之职场交流群:450154342
暂无
五、基础知识
1、什么是bootloader?
答:bootloader是一个小程序,它包含下载所需的外设驱动(如串口)及下载指令,这样即可通过bootloader的串口来下载我们编写的应用程序。
有些芯片内部的ROM中固化了芯片厂商的bootloader,例如CC2640。
有了bootloader,就可以使用串口等接口进行下载代码,当一个下载器支持多个串口时,即可大大提高生产效率。
2、CC2640的bootloader是如何的?
答:
注:请看《CC26XX技术参考手册》的第八章节Bootloader。
1)提供接口
①异步串行接口(Universal Asynchronous Receivers and Transmitters,简称UART):两线,串口。
②同步串行接口(Synchronous Serial Interface,简称SSI):四线,SPI。
2)可禁止bootloader
可通过操作寄存器来禁止对bootloader的操作,以达到高安全性。
3)有后门(backdoor)
如果后门开启了,则可通过复位时按住某个IO口(可设置)来启动bootloader。类似于重启电脑时按住F10进入BIOS。
3、什么是FCFG和CCFG?
答:
注:请看《CC26XX技术参考手册》的第九章节Device Configuration。
1)FCFG(Factory Configuration,厂家配置,不可修改)
对于用户来说,较为关心的参数为第一MAC地址(不可修改的MAC),如下图:
2)CCFG(Customer Configuration,用户配置,可修改)
如上图,CCFG配置一共有22个,特别注意上面三个红框的寄存器。
①IEEE_MAC_n Register
第二MAC地址的寄存器,也就是可修改的MAC寄存器。
②BL_CONFG Register
bootloader配置寄存器。下文详细介绍。
③IMAGE VALID CONF Regster
该寄存器数值为0x00000000时,芯片上电启动后会跳转到应用层;
该寄存器数值不为0x00000000时,芯片上电启动后会跳转到bootloader层。(当芯片下载过应用层代码之后,该数值会自动被修改为0xFFFFFFFF)
4、BL_CONFG Register(bootloader配置寄存器)的介绍
答:
该寄存器一共四个字节,每个字节功能介绍如下:
1)BOOTLOADER_ENABLE(偏移地址为 FDBh)
bootloader功能的总开关。
当该值为0xC5时,bootloader相关功能是使能的,安全等级低,下面的三个配置字节有效;
当该值不为0xC5时,bootloader相关功能是禁止的,安全等级高,下面的三个配置字节无效。
2)BL_ENABLE (偏移地址为 FD8h)
bootloader后门的开关。
当该值为0xC5时,bootloader的后门功能是使能的,下面的两个配置字节有效;
当该值不为0xC5时,bootloader的后门功能是禁止的,下面的两个配置字节无效。
3)BL_PIN_NUMBER(偏移地址为 FD9h)和BL_LEVEL(偏移地址为 FDAh的最高位)
①假设我们需要实现:芯片复位时拉低DIO15引脚,即进入bootloader状态。
则我们需要将BL_PIN_NUMBER配置为0x0F(15),BL_LEVEL配置为0(低电平触发)。
②假设我们需要实现:芯片复位时拉高DIO6引脚,即进入bootloader状态。
则我们需要将BL_PIN_NUMBER配置为0x06(6),BL_LEVEL配置为1(高电平触发)。
5、如何使用某mcu的SPI接口,与bootloader状态下的CC2640进行指令通信?
答:
1)硬件连接
将某mcu的SPI接线分别接到CC2640的如下引脚(实测不需要上拉电阻)
2)用flash programmer 2使CC2640进入bootloader模式(一次性的修改,在代码中修改方式见下文)
①修改bootloader配置
将上图中的配置,修改为“C5、0F、FE、C5”,每个字节含义依次为:后门使能、DIO15为启动后门引脚、低电平触发、bootloader功能使能。
修改后如下图:
②通过后门进入bootloader模式
先将DIO15接跳线至地(上方配置了DIO15触发、低电平触发),再按一下板子上的复位键。(不是拔插电源,是复位!)
此时即已进入bootloader模式。
③某mcu按指令格式要求发送指令
指令格式如下图:
第一个字节为数据长度,数值为:data段+2。
第二个字节为校验和,数值为:data段的数据和的低8位。
第三个字节及之后的字节为数据。
某mcu通过SPI将该指令发送给CC2640之后,不停地发送0x00去查询CC2640的应答,直到CC2640返回一个非零数值(0xCC为正确应答,0x33为错误应答)。
注意一:实测CC2640的返回应答时长需要38ms。
注意二:串口通信波特率不能超过3M,SPI通信波特率不能超过4M。
6、如果在工程中修改CCFG的bootloader的配置?
答:
1)打开Ccfg.c
①在工程中的调用路径(实际上只有一个头文件,在工程中看不到内容)
②在文件夹中的路径
C:\ti\tirtos_simplelink_2_13_00_06\products\cc26xxware_2_21_01_15600\startup_files
2)修改位置如下
依次修改为0xC5、0x0、0x0F、0xC5,即表示:bootloader功能使能、低电平触发、DIO15为启动后门引脚、后门使能。
注:该文件修改之后,将导致所有工程的CCFG配置被修改。