技术标签: 文档 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);
}
/**************************************************************************************************
*/
文章浏览阅读3.8k次。首先,在安装scrapy之前,需要用apt-get以及pip安装以下依赖包:apt-get install build-essential python3-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev在Linux系统下python3.4版本下成功安装scrapy:pip install_linux安装scrapy的问题
文章浏览阅读6.1k次,点赞8次,收藏29次。PFM是一种用浮点数存储图片的文件格式,包含文件信息header和二进制数据raster。在一些数据集中经常可以看到以pfm格式存储的视差图。pfm格式的文件不利于浏览,可以转成png格式文件已方便浏览。PFM的头文件共有3行:二进制数据区:图像的读取顺序按照从下到上,从左到右进行的顺序进行读取。当pfm文件只有一张图片的矩阵时,代码如下:# -*- coding: UT..._将深度图像(.pfm格式)转换为深度图像数据(.png格式)
文章浏览阅读2.2k次,点赞2次,收藏22次。win10使用roLabelimg保存带有汉字的label(含文件)简介roLabelimg可以标注旋转矩形,虽不太好用,但比不能标注强太多太多,转载请注明出处。文件地址源文件修改&编译将roLabelImg.py中的#!/usr/bin/env python# -*- coding: utf8 -*-更改为#!/usr/bin/env python# -*- coding: utf-8 -*-编译pyrcc5 -o resources.py resources.qrc_rolabellmg下载
文章浏览阅读2.5w次,点赞52次,收藏360次。知识图谱可视化 D3库的使用引言Neo4j导出数据引言好久没用D3库作可视化了,现在主要是用百度的echarts库,在项目中做简单的图表太方便了。但像是做关系图其实用echarts也很方便,这次用D3实现主要是复习一下以前做的东西,顺便记录一下。以下是我参考到的实例代码:D3官方图实例参考echarts做关系图实例参考Neo4j导出数据我们先通过Cypher查询将数据从Neo4j中查询出来,Neo4j构建和查询可以参考我上篇博客基于Neo4j的外贸企业关系图谱做企业相似度查询查询后的结果如下_neo4jd3
文章浏览阅读7.5k次。拓扑空间是最基本的,是集合+开集构成,这个空间里没有距离。就像人群+关系=社会一样。距离空间=拓扑空间+距离。这个距离的来源主要是定义出来的。距离空间是拓扑空间的一个子集,也可以理解为是一个子概念。同理向量空间又是距离空间的一个子集,子概念。对拓扑向量空间来说,它是一个度量空间当且仅当其有可数局部拓扑基(见Rudin的泛函分析,对一般拓扑空间来说的充要条件还要多一个,这就是NS度量化定理,见Munk_拓扑和距离的关系
文章浏览阅读923次,点赞21次,收藏15次。Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
文章浏览阅读426次。2019独角兽企业重金招聘Python工程师标准>>> ..._bbclass
文章浏览阅读3.2k次,点赞2次,收藏17次。文章目录国际化原理操作步骤注意:项目提交:参考:简 述: 准备将我写的悬浮网速窗口上面支持国际化(多语言);记录一下通过 CMake + Qt 来对项目设置国际化。本文初发于 “偕臧的小站” ifmet.cn,同步转载于此。编程环境: ???? uos20 amd64 ???? Qt 5.11.3 ???? cmake 3.13.4 ???? gdb8.0国际化原理 Qt 实现多语言的关键原理如图,先扫描所有的源码文件 .cpp、.ui 文件,找到被 tr() 包裹的字符_qt5 cmake 多语言
文章浏览阅读156次。https://blog.csdn.net/lhcmt1/article/details/80601414 //原文https://gpp.tkchu.me/behavioral-patterns.html //博客一:序列模式:1. 双缓冲模式工作原理: 例如计算机的渲染系统。一帧代表显卡读取的帧,一帧代表显卡写入的帧。何时使用: 可能有可见的错误(撕裂之类..._数独套路女朋友
文章浏览阅读154次。安森美深力科 10Gbps USB3.1超高速开关FUSB340TMX是 10Gbps USB3.1 超高速开关,典型带宽达 10 GHz,具有 1.5 V 至 5 V 的宽 VDD 范围,提供 2KV HBM ESD 保护,符合 Jedec 标准,有源功耗低于 12 uA,关断功耗低于1 uA,在2.5GHz时的插入损耗仅-1 dB,采用18引脚的 TMLP 小型封装(2.0mm x 2.8mm x 0.4mm),是适用于手机、平板电脑、笔记本电脑、超便携应用所需的可正反逆插的 Type-C USB 3_fusb340tmx
文章浏览阅读310次。这篇文章只讲NFC读写非接卡、读写标签的方式,且这里只讲符合TypeA和IsoDep技术标准的Tag,其他类型的Tag框架类似,只是有些许差别添加权限AndroidManifests.xml中添加:添加intent filterAndroidManifests.xml中添加:android:name=".MainActivity"android:label="@string/app_name"an..._android 卡片类型框架
文章浏览阅读352次,点赞10次,收藏7次。[5,1,6] 的异或总和为 5 XOR 1 XOR 6 = 2。- [1,3] 的异或总和为 1 XOR 3 = 2。- [5,1] 的异或总和为 5 XOR 1 = 4。- [5,6] 的异或总和为 5 XOR 6 = 3。- [1,6] 的异或总和为 1 XOR 6 = 7。每个子集的全部异或总和值之和为 480。- [1] 的异或总和为 1。- [3] 的异或总和为 3。- [5] 的异或总和为 5。- [1] 的异或总和为 1。- [6] 的异或总和为 6。