技术标签: 文档 ZigBee zstack BootLoad
一直想同归串口给CC2530下程序,就看了一下官方的文档。里面讲的不是太详细,加上自己英语也不好。理解不了,胡乱瞎搞了两天,就成功了。今天做下总结.
1 首先打开$INSTALL_DIR$\Projects\zstack\Utilities\BootLoad\CC253x\Boot.eww。就是boot文件。
打开
编译看有没有错误,有可能出现
Error[e72]: Segment PDATA_Z must be defined in a segment definition option (-Z, -b or -P)
我在网上找到了解决方法;http://feibit.com/forum.php?mod=viewthread&tid=9459
没有错误就可以下载进去了CC2530
第二部分,生成bin文件,
TI给的文档很详细,照着做就行了。有三点要注意
1 TI给的3条命令要修改成自己的名字(第一条不改) 命令之间加空格。
"$PROJ_DIR$\..\..\..\Tools\CC2530DB\oad.exe"
"$PROJ_DIR$\RouterEB\Exe\GenericApp.sim"
"$PROJ_DIR$\RouterEB\Exe\GenericApp.bin"
2定义关键字MAKE_CRC_SHDW
3. CRC Shadow 把他改成一样
最后连好串口,打开官方下载软件就下载成功了
下载进去就会发现第一次可以跳转。重启之后就不行了。这是因为有两个按键控制的跳转。
/**************************************************************************************************
* @fn main
*
* @brief C-code main functionality.
*
* input parameters
*
* None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
void main(void)
{
vddWait(VDD_MIN_RUN);//检查电压
HAL_BOARD_INIT();//初始化时钟,按键 P0_1 p2-0
if (sbImgValid()) //代码是否有效 CRC Shadow 匹配
{
if ((SB_UART_DELAY == 0) || ResetWasWatchDog)//看门狗复位就会直接跳转到代码区(上电只执行一次串口下载)
{
sblJump();//接跳转到代码区
}
sblInit();//初始化串口
sblWait();//跳转等待
}
else
{
sblInit();//初始化串口
}
vddWait(VDD_MIN_NV);//检查写flsh电压
sblExec();//写入代码
HAL_SYSTEM_RESET();
}
/**************************************************************************************************
* @fn sblExec
*
* @brief Infinite SBL execute loop that jumps upon receiving a code enable.
*
* input parameters
*
* None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
static void sblExec(void)
{
uint32 dlyCnt = 0;
while (1)
{
HalUARTPollISR();
if (sbExec() && sbImgValid())
{
SB_TURN_ON_LED1();
SB_TURN_ON_LED2();
// Delay to allow the SB_ENABLE_CMD response to be flushed.
for (dlyCnt = 0; dlyCnt < 0x40000; dlyCnt++)
{
HalUARTPollISR();//串口写代码
}
sblJump();//跳转
}
else if (dlyCnt++ & 0x4000)
{
SB_TOGGLE_LED1();
}
}
}
/**************************************************************************************************
* @fn sblInit
*
* @brief SBL initialization.
*
* input parameters
*
* None.
*
* output parameters
*
* None.
*
* @return None.
*/
static void sblInit(void)
{
halUARTCfg_t uartConfig;
/* This is in place of calling HalDmaInit() which would require init of the other 4 DMA
* descriptors in addition to just Channel 0.
*/
HAL_DMA_SET_ADDR_DESC0(&dmaCh0);
HalUARTInitISR();
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 0; // CC2530 by #define - see hal_board_cfg.h
uartConfig.rx.maxBufSize = 0; // CC2530 by #define - see hal_board_cfg.h
uartConfig.tx.maxBufSize = 0; // CC2530 by #define - see hal_board_cfg.h
uartConfig.idleTimeout = 0; // CC2530 by #define - see hal_board_cfg.h
uartConfig.intEnable = TRUE;
uartConfig.callBackFunc = NULL;
HalUARTOpenISR(&uartConfig);
SB_INIT_LEDS();
}
/**************************************************************************************************
* @fn sblJump
*
* @brief Execute a simple long jump from non-banked SBL code to non-banked RC code space.
*
* input parameters
*
* None.
*
* output parameters
*
* None.
*
* @return None.
*/
static void sblJump(void)
{
SB_TURN_ON_LED1();
SB_TURN_ON_LED2();
// while (SB1_PRESS || SB2_PRESS);判断按键
SB_TURN_OFF_LED1();
SB_TURN_OFF_LED2();
asm("LJMP 0x2000\n"); // Immediate jump to run-code.
HAL_SYSTEM_RESET();//复位
}
/**************************************************************************************************
* @fn sblWait
*
* @brief A timed-out wait loop that exits early upon receiving a force code/sbl byte.
*
* input parameters
*
* None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
static void sblWait(void)
{
uint32 dlyCnt = SB_UART_DELAY;
while (1)
{
uint8 ch;
HalUARTPollISR();//读串口数据,等待命令。
if (HalUARTReadISR(&ch, 1))
{
if (ch == SB_FORCE_BOOT)
{
break;
}
else if (ch == SB_FORCE_RUN)
{
dlyCnt = 0;
}
}
if (SB1_PRESS)//如果P0_1为高就跳出(进入下载模式)
{
break;
}
if(SB2_PRESS || (dlyCnt-- == 0)) //( (dlyCnt-- == 0)) P2_0位高或者等待1分到就跳转
{
sblJump();
}
// RR-xing LED display while waiting.
if (dlyCnt & 0x2000)
{
SB_TURN_OFF_LED2();
SB_TURN_ON_LED1();
}
else
{
SB_TURN_OFF_LED1();
SB_TURN_ON_LED2();
}
}
SB_TURN_OFF_LED1();
SB_TURN_OFF_LED2();
}
/**************************************************************************************************
* @fn vddWait
*
* @brief Loop waiting for 16 reads of the Vdd over the requested limit.
*
* input parameters
*
* @param vdd - Vdd level to wait for.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
static void vddWait(uint8 vdd)
{
uint8 cnt = 16;
do {
do {
ADCCON3 = 0x0F;
while (!(ADCCON1 & 0x80));
} while (ADCH < vdd);
} while (--cnt);
}
/**************************************************************************************************
*/
文章浏览阅读5.6k次,点赞2次,收藏15次。[海思]–Hi3516a–GPIO(用户层)控制篇海思Hi3516aGPIO用户层控制篇gpio 玩过单片机的人都应该很熟悉了,然而在linux中,gpio操作属于内核层的范畴,用户想要直接配置gpio的模式和读取gpio的状态是比较困难的一件事情。那么本文主要讲述如何利用海思sdk已有的资源来实现用户层的gpio操作_海思sdk用户层控制gpio
文章浏览阅读185次。Jdk+Tomcat6+SQLSERVER数据库。开发家庭收支管理系统(大作业/毕业设计)开发环境: Windows操作系统。
文章浏览阅读658次。说明:很长时间了,一直用XShell,但是总是用鼠标操作,后来想用其他方式代替鼠标,一想肯定有快捷方式等,这里就先记下一遍有用的博文,转自:http://sundful.iteye.com/blog/704079XShell是一款Windows下非常优秀的远程连接Linux主机的工具,是我平常使用不可缺少的工具。今天没事看了下XShell的帮助,找到了一些很实用的技巧,分享给大家。复制和粘贴由于..._xshell查看json文件怎么跳转底部
文章浏览阅读3.8k次,点赞2次,收藏17次。深度优先搜索概念深度优先搜索和广度优先搜索一样,都是对图进行搜索的算法,目的也都是从起点开始搜索直到到达指定顶点(终点)。深度优先搜索会沿着一条路径不断往下搜索直到不能再继续为止,然后再折返,开始搜索下一条候补路径。具体而言步骤1A为起点,G为终点。一开始我们在起点A上。步骤2将可以从A直达的三个顶点B、C、D设为下一步的候补顶点。步骤3从候补顶点中选出一个顶点。优先选择最新成为候补的点,如果几个顶点同时成为候补,那么可以从中随意选择一个。步骤4此处B、C、D同时成为候补,所以_python深度优先搜索算法
文章浏览阅读2.1k次,点赞11次,收藏11次。winver。_crtdbg.h
文章浏览阅读1.1w次,点赞21次,收藏19次。报错如图,我刚开始也很莫名其妙,为什么变成了gcc-c+呢,另一个+呢?最后才发现ubuntu比较特殊。。。需要变成2条指令才能安装以下2条指令就相当于sudo apt-get install gcc-c++,分别执行完成就好啦,安装成功!sudo apt-get install gccsudo apt-get install g++..._unable to locate package gcc-c+
文章浏览阅读2k次。# 计算经过仿射变换新的boxes # boxes表示原始坐标点,target_point表示经过仿射变换后新的坐标点 pts = np.float32(boxes).reshape([-1, 2]) # 要映射的点 pts = np.hstack([pts, np.ones([len(pts), 1])]).T target_point = np.dot(RotateMatrix, pts) # 映射后的坐标 //src_point表示原图的坐标点,resu..._怎么通过变化矩阵求坐标
文章浏览阅读588次。麻雀算法优化BP神经网络SSA-BP温度预测完整的代码,方可运行;可提供运行操作视频!适合小白!_麻雀算法优化bp神经网络
文章浏览阅读453次。如题专区:PostgreSQL 与 MySQL 相比,优势何在?以下文章列举了更为直观的对比图:作者:动力节点在线链接:https://www.zhihu.com/question/20010554/answer/743955463来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。本文是转载文章。MySQL相对于PostgreSQL的劣势:PostgreSQL主要优势: 1. PostgreSQL完全免费,而且是.._pl/pgsql与sql语言相比,优势有哪些?
文章浏览阅读796次,点赞4次,收藏25次。在IDEA中搭建SSM框架:Maven项目搭建开发环境:JDK1.8、MySQL、Maven3.6开发工具:IDEA 2018.3.1一、搭建基于Maven的web项目1.创建新项目2.选择Maven,JDK,项目原型3.填写项目组织标识符、项目标识符4.配置Maven5.填写项目信息6.点击finish后,如果项目本地路径不存在,IDEA会提..._idea使用maven搭建ssm框架
文章浏览阅读591次。SQLSRV驱动程序允许您创建一个结果集,其中包含可以根据游标类型以任何顺序访问的行。本主题将讨论客户端(缓冲)和服务器端(非缓冲)游标及其用法。_sqlsrv_connect
文章浏览阅读1.3w次。SpringBoot整合RestHighLevelClient实现索引操作以及文档操作_resthighlevelclient 查询索引docs