技术标签: 文档 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);
}
/**************************************************************************************************
*/
文章浏览阅读4.6k次。从网上搜到的方法都解决不了我的问题,分享一点我自己的实在的解决经验:养成保存快照的习惯,比什么方法都靠谱。 即打开VMWare->虚拟机->快照->拍摄快照,简单填写一下你现在做到的程度,然后点击拍摄快照,存一下,养成习惯,每做出些什么东西了,就存一个快照,哪天莫名其妙又死机了,开机又黑屏进不去了,直接用快照恢复到最近的进度继续做就好。..._ubuntu卡死之后重启,打不开了
文章浏览阅读51次。随着type-c接口越来越普及,手机逐渐取消了3.5mm耳机接口,只留一个多功能type-c接口,这使得3.5mm有线耳机的用户多少有些不习惯,那为什么他们不选择使用无线耳机,笔者分析认为有以下几种原因:价格,有线耳机相比于无线耳机便宜,当然有线耳机也有昂贵品牌,这也是原来用户一直不舍得换的原因。音质,有线耳机确实比不少无线耳机音质要更好(估计是有线耳机不用考虑供电问题,耳机喇叭能做更高的功率,无线耳机因为要考虑电池续航,耳机喇叭要控制电量损耗,没法做更高的规格)。
文章浏览阅读147次。1.Netty是什么面试官:介绍一下自己对netty的认识吧!小伙砸~我:好的!我就用简单的几点来概括下netty吧Netty 是一个基于NIO 的 client-server(客户端服务端框架),使用它可以快速简单第开发网络应用程序。它极大地简化并优化了TCP和UDP套接字服务器等网络编程,并且性能以及安全性等很多方面甚至都要更好。支持多种协议 如FTP,SMTP,HTTP以及各种二进制和基于文本的传统协议。用官方的总结就是:Netty 成功地找到了一种在不妥协可维护和性能的情况下实现易于_netty专题
文章浏览阅读4.4k次。今天给大家分享六个免费学习的精品教程,包括了word,ppt,excel常用的办公三剑客,学会这三个让你办公无忧,也能让你靠这些技术找到一份好工作,这些office自学教程让你从小白到高手。一.PPT零基础入门教程PPT教程PPT零基础,PPT入门小白脱白系列,让你从做PPT的小白到高手,职场无敌。学习地址为:https://www.bilibili.com/video/av1205327...
文章浏览阅读963次,点赞3次,收藏7次。Day 1 使用OpenGL创建三角形程序运行效果VAO vertex array object 顶点数组对象VBO vertex buffer object 顶点缓冲对象EBO element(index) buffer object 索引缓冲对象VBO and VAOData Flow from CPU to GPUVertex Buffer Object (VBO)VBO..._opengl bao
文章浏览阅读1.1k次,点赞28次,收藏24次。当然,可能针对缓存穿透的情况,也有可能是其他的原因引起,可以针对具体情况,采用对应的措施。缓存击穿,就是说某个 key 非常热点,缓存击穿和缓存雪崩很类似,只不过是缓存击穿是一个热点key失效,而缓存雪崩是大量热点key失效。undefined 缓存失效:缓存中的某些数据过期或者被淘汰,在数据重新加载到缓存之前,大量请求会直接穿透到存储系统中查询,导致存储系统负载剧增。2缓存失效:缓存中的某些数据过期或者被淘汰,在数据重新加载到缓存之前,大量请求会直接穿透到存储系统中查询,导致存储系统负载剧增。
文章浏览阅读1k次。1、测试目的为了验证UE发射OFF功率低于测试要求中指定的值。过大的发射OFF功率可能会增加反向干扰(RoT),因此会减少其他UE的小区覆盖范围。2、测试适用性此测试适用于所有类型的NR UE版本15及更高版本。 注意:当前,此测试用例只能支持Band n257和PC3。3、测试说明1、初始条件初始条件是需要测试UE的一组测试配置,以及SS与UE一起采取的步骤以达到正确的测量状态。初始测试配置包括环境条件,测试频率,测试信道带宽和基于表5.3.5-1中指定的NR工作频带的子._transmit on/off power
文章浏览阅读7.3k次,点赞2次,收藏7次。效果图安装yaourt deepin-screenshot自定义快捷键截图配置设置--->设备 keyboard--------> 新建快捷键-->点击+号 使用:直接点一下键盘上的截屏键即可:PrtSc(是个缩写) ..._manjaro dwm窗口下好用的截图软件
文章浏览阅读537次,点赞9次,收藏11次。/获取歌单的详情api 下的index.js//获取轮播图API/*0: pc1: android2: iphone3: ipad*///获取推荐歌单默认十条数据//获取歌单的详情router 下的index.jspath: ‘/’,},},routes})views下的listview.vue。
文章浏览阅读3.1k次。本文介绍Idea如何生成UML类图。_intellij idea生成java uml
文章浏览阅读963次。Maven初级问题_idea maven有jar包却不能识别
文章浏览阅读7.2k次,点赞18次,收藏65次。珞珈一号的噪声噪点什么的都非常多,想要去噪声个人总结出了很多方法:1.arcgis滤波器(空间分析工具——邻域分析——滤波器:低通滤波)2.envi低通滤波(同上面的工具,特点是可以平滑图像减少噪声同时会减少细节)3.利用自然间断点分级法来进行灯光分级(级别越多越好,分的越细,阈值也就更加精确),分级后从中选择适合的灯光值作为阈值以去除噪声4.老方法(不变目标区域法):选择同年同月份的npp影像,默认npp影像上DN值为0的地方在珞珈一号DN值也为0,以此作为掩膜去剔除噪声…(方法很多,仅供参考)_arcgis滤波器在哪里