打印

CC2530启梦之旅

[复制链接]
2245|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 文旺C擦、 于 2016-12-24 19:09 编辑

CC2530简介
1-1 的方框图显示了 CC253x 设备系列不同的构造模块。并没有列出 CC253x 所有设备的所有模块和外设的全部功能和函数,因此关于具体设备的方框图参见各个设备的数据手册。
模块大致可以分为三种类型:CPU 和内存相关的模块;外设、时钟和电源管理相关的模块;无线电相关的模块。
1.1.1 CPU 和内存
CC253x 设备系列使用的 8051 CPU 内核是一个单周期的 8051 兼容内核。它有三个不同的存储器访问总线(SFR、DATA 和 CODE/XDATA),以单周期访问 SFR、DATA 和主 SRAM。它还包括一个调试接口和一个 18输入的扩展中断单元。中断控制器提供了 18 个中断源,分为六个中断组,每组与四个中断优先级相关。当设备从空闲模式回到活动模式,也会发出一个中断服务请求。一些中断还可以从睡眠模式唤醒设备(供电模式 1-3)内存仲裁器位于系统中心,因为它通过 SFR 总线,把 CPU 和 DMA 控制器和物理存储器和所有外设连接在一起。内存仲裁器有四个存取访问点,访问每一个可以映射到三个物理存储器之一:一个 8-KB SRAM、一个闪存存储器和一个 XREG/SFR 寄存器。它负责执行仲裁,并确定同时到同一个物理存储器的内存访问的顺序 。8-KB SRAM 映射到 DATA存储空间和 XDATA 存储空间的一部分。 8-KB SRAM 是一个超低功耗的 SRAM,当数字部分掉电时(供电模式 2 和 3)能够保留自己的内容。这对于低功耗应用是一个很重要的功能。32/64/128/256 KB 闪存块为设备提供了内电路可编程的非易失性程序存储器,映射到 CODE 和 XDATA 存储空间。除了保存程序代码和常量,非易失性程序存储器允许应用程序保存必须保留的数据,这样在设备重新启动之后可以使用这些数据。使用这个功能,例如可以利用已经保存的网络具体数据,就不需要经过完整的启动、网络寻找和加入过程。
1.1.2 时钟和电源管理
数字内核和外设由一个 1.8-V 低差稳压器供电。另外 CC253x 包括一个电源管理功能,可以实现使用不同供电模式的长电池寿命的低功耗应用运行。有五种不同的复位源来复位设备。
1.1.3 外设
CC2530 包括许多不同的外设,允许应用程序设计者开发先进的应用。
    ​调试接口执行一个专有的两线串行接口,用于内电路调试。通过这个调试接口,可以执行整个闪存存储器的擦除、控制使能哪个振荡器、停止和开始执行用户程序、执行 8051 内核提供的指令、设置代码断点,以及内核中全部指令的单步调试。使用这些技术,可以很好地执行内电路的调试和外部闪存的编程。设备含有闪存存储器以存储程序代码。闪存存储器可通过用户软件和调试接口编(如上所述)。闪存控制器处理写入和擦除嵌入式闪存存储器。闪存控制器允许页面擦除和 4 字节编程。
    ​I/O 控制器负责所有通用 I/O 引脚。CPU 可以配置外设模块是否控制某个引脚或它们是否受软件控制,如果是的话,每个引脚配置为一个输入还是输出,是否连接衬垫里的一个上拉或下拉电阻。CPU 中断可以分别在每个引脚上使能。每个连接到 I/O 引脚的外设可以在两个不同的 I/O 引脚位置之间选择,以确保在不同应用程序中的灵活性。
    ​系统可以使用一个多功能的五通道 DMA 控制器,使用 XDATA 存储空间访问存储器,因此能够访问所有物理存储器。每个通道(触发器、优先级、传输模式、寻址模式、源和目标指针和传输计数)用 DMA描述符在存储器任何地方配置。许多硬件外设(AES 内核、闪存控制器、USART、定时器、ADC 接口)通过使用 DMA 控制器在 SFR 或 XREG 地址和闪存/SRAM 之间进行数据传输,获得高效率操作。
    ​定时器1是一个 16 位定时器,具有定时器/计数器/PWM 功能。它有一个可编程的分频器,一个16 位周期值,和五个各自可编程的计数器/捕获通道,每个都有一个 16 位比较值。每个计数器/捕获通道可以用作一个 PWM 输出或捕获输入信号边沿的时序。它还可以配置在 IR 产生模式,计算定时器 3 周期,输出和定时器 3 的输出相与,用最小的 CPU 互动产生调制的消费型 IR 信号。
    ​定时器 2(MAC 定时器)是专门为支持 IEEE 802.15.4 MAC 或软件中其他时槽的协议设计。定时器有一个可配置的定时器周期和一个 8 位溢出计数器,可以用于保持跟踪已经经过的周期数。一个 16 位捕获寄存器也用于记录收到/发送一个帧开始界定符的精确时间,或传输结束的精确时间,还有一个 16 位输出比较寄存器可以在具体时间产生不同的选通命令(开始 RX,开始 TX,等等)到无线模块。
    ​定时器 3 和定时器 4是 8 位定时器,具有定时器/计数器/PWM 功能。它们有一个可编程的分频器,一个 8 位的周期值,一个可编程的计数器通道,具有一个 8 位的比较值。每个计数器通道可以用作一个 PWM输出。
    ​睡眠定时器(第 11 章)是一个超低功耗的定时器,计算 32-kHz 晶振或 32-kHz RC 振荡器的周期。睡眠定时器在除了供电模式 3 的所有工作模式下不断运行。这一定时器的典型应用是作为实时计数器,或作为一个唤
醒定时器跳出供电模式 1 或 2。
    ​ADC支持 7 到 12 位的分辨率,分别在 30 kHz 或 4 kHz 的带宽。DC 和音频转换可以使用高达八个输入通道(端口 0)。输入可以选择作为单端或差分。参考电压可以是内部电压、AVDD 或是一个单端或差分外部信号。ADC 还有一个温度传感输入通道。ADC 可以自动执行定期抽样或转换通道序列的程序。
    ​随机数发生器 使用一个 16 位 LFSR 来产生伪随机数,这可以被 CPU 读取或由选通命令处理器直接使用。例如随机数可以用作产生随机密钥,用于安全。
    ​AES 协处理器允许用户使用带有 128 位密钥的 AES 算法加密和解密数据。这一内核能够支持IEEE 802.15.4 MAC 安全、ZigBee 网络层和应用层要求的 AES 操作。
    ​一个内置的看门狗定时器、允许设备在固件挂起的情况下复位自身。当看门狗定时器由软件使能,它必须定期清除;否则,当它超时它就复位设备。或者它可以配置用作一个通用 32-kHz 定时器。
    ​USART 0 和 USART 1每个被配置为一个 SPI 主/从或一个 UART。它们为 RX 和 TX 提供了双缓冲,以及硬件流控制,因此非常适合于高吞吐量的全双工应用。每个都有自己的高精度波特率发生器,因此可以使普通定时器空闲出来用作其他用途。
    ​USB 2.0 全速控制器 (仅 CC2531 可用)有 5 个端点, 1KB FIFO RAM 的双缓冲。

1.1.4 无线电
    ​CC253x 设备系列提供了一个 IEEE 802.15.4 兼容无线收发器。RF 内核控制模拟无线模块。另外,它提供了 MCU 和无线设备之间的一个接口,这使得可以发出命令、读取状态、自动操作和确定无线设备事件的顺序。无线设备还包括一个数据包过滤和地址识别模块。
1.2 应用
    ​如概述(1.1 节)所示,这一用户指南的重点是使用可用的不同模块,来建立基于 CC253x 设备系列的不同类型的应用程序。如果查看完整的应用程序开发过程,另外的一些信息很有用。但是,因为这样的信息和帮助不是设备特定的(即不是 CC253x 设备系列唯一有的),读者可以参考以下段落的另外的信息源。
    ​第一步是通过购买一个开发套件(见设备具体的产品网站,找到相关开发套件的链接),设置开发环境(HW 工具等)。开发套件带有一个现成的演示和关于如何设置开发环境的信息;安装所需的驱动(通过安装SmartRF 软件可以轻松完成),设置编译器工具链,等等。只要已经安装了开发环境,就可以准备开始应用程序的开发了。
    ​写应用程序软件的最简单的方法是把应用程序建立在可用的标准协议之一(RemoTI 网络协议,21.2 节;TIMAC 软件,21.4 节;或用于 ZigBee 兼容解决方案的 Z-Stack 软件,21.5 节)上面;或者专门的 SimpliciTI网络协议上面。它们都带有一些实例应用程序。
    ​对于用户具体 HW 的硬件布局设计,设计人员可以在不同的产品页面(B.1 节)上找到参考设计。通过复制这些设计,设计人员能够获得最佳性能。已开发的 HW 可以使SmartRF Studio 软件很容易地进行测试。
    ​如果最终的系统没有达到预期的性能,建议在开发套件的硬件上尝试开发的软件,看看在这里工作地如何。要检查用户具体的 HW,使用 SmartRF Studio 软件,在相同的设置下来比较开发套件性能和用户具体的 HW,这是一个良好的开端。
    ​用户还可以通过加入低功耗 RF 网络社区(和订阅低功耗 RF 电子简讯,找到另外的信息和帮助。
本文由作者整合资料所得,请勿用于商业用途。

图片1.PNG.png (262.36 KB )

图片1.PNG.png

图片2.png (154.01 KB )

图片2.png

图片3.png (34.51 KB )

图片3.png

图片4.png (172.25 KB )

图片4.png

图片5.png (253.22 KB )

图片5.png

图片6.png (279.32 KB )

图片6.png

CC2530中文数据手册完全版.rar

3.25 MB

cc2530-datasheet.pdf

2.29 MB

相关帖子

沙发
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
CC2530其实可以理解成一款单片机+无线模块
学习之前希望大家先去了解51单片机和加深一下C语言,这对学习这款芯片是很有帮助的,本教程是基于有一点模拟电路基础和C语言基础的玩家,不时也会推出一些基础的干货,大神登门请多多指教,当然大家如果有什么疑问的话可以私下联系虎牙小哥。
下面我们先复习一下单片机吧;

第一个学习教程:I/O端口
·学习之前我们先看看芯片手册,打开我们的芯片手册(中英文资料在我的论坛帖子里面可以下载,我用的是中文版的,毕竟英语水平一般般),大家可以先浏览一下,有个认知;

A.png (98.18 KB )

A.png

CC2530数据手册(中文).pdf

2.18 MB

使用特权

评论回复
板凳
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
·玩转IO一般只用到三个常用的寄存器就好(看我们的芯片手册IO栏目里面有详细介绍)
*P0SEL/P1SEL(0:普通 IO 口  1:第二功能)
*P0DIR/P1DIR(0:输入  1:输出  )
*P0INP/P1INP(0:上拉/下拉  1:三态  )
一般初始化流程:普通IO--->设置输入输出--->配置上拉/下拉/三态
例如:
P1SEL &= 0X01;    //功能选择---通用IO
P1DIR |= 0X01;    //方向设定---输出
P1INP &= ~0X01;   //输入模式选择---打开上拉/下拉
P0SEL &= 0X30;    //功能选择---通用IO
P0DIR &= ~0X30;    //方向设定---输入
P0INP &= ~0X30;   //输入模式选择---打开上拉/下拉
由于 CC2530 寄存器初始化时默认是:
P1SEL =0x00;
P1DIR =0x00;
P1INP =0X00;
所以我们可以简化我们的初始化指令:
P1DIR |= 0X01;    //方向设定---输出
P0DIR &= ~0X30;     //方向设定---输入
大家都有点意思了吧,下面我们来实战一下;学习之前先配置好开发环境,第一步安装IAR此处省略---(回复IAR获取安装过程)
大家可以看到IAR的初始界面(下图),点击project--->Create New Project

B.png (373.65 KB )

B.png

使用特权

评论回复
地板
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
弹出如下的界面,我们选择默认的配置就可以了,点击OK。然后选择储存路径。

C.png (54.55 KB )

C.png

使用特权

评论回复
5
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
下面配置我们的开发环境,点击project--->Options(快捷键alt+F7),看到如下界面:

D.png (40.22 KB )

D.png

使用特权

评论回复
6
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
第一步:Greneral Options---Target
Device;选择我们的芯片型号---点击右边的超链接
打开文件夹Texas Instruments选择CC2530F256.i51,图A所示;

第二步:Linker---Config---Linker configuration file---Override default
打开文件夹Texas Instruments选择lnk51ew_CC2530F256.xcl,图B所示;

第三步:Debugger---SETUP---Driver,选择Texas Instruments,图C所示。

E.png (51.92 KB )

图A

图A

F.png (38.2 KB )

图B

图B

G.png (37.1 KB )

图C

图C

使用特权

评论回复
7
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
配置完成,点击OK;
学过51单片机的同学是不是觉得很熟悉,步骤还是差不多,先新建一个文件,保存为.c文件,在右击Files下的工程(就是IO-Debug---Add---Add “IO.c”

H.png (43.61 KB )

H.png

使用特权

评论回复
8
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
下面开始码程序吧,先回想一下前面看的芯片手册,看下面代码:
#include<ioCC2530.h>                                //添加我们芯片的头文件
#define led P1_0                                        //先宏定义下我们的IO,方便下面写代码
#define key_1 P0_4                                        //*宏定义#define        A        常量B               
#define key_2 P0_5                                        //*字面意思就是用A标识常量B
/***函数声明,main函数在前面,我们必须在主函数前加入函数声明,不然调用会编译出错***/
void Led_init(void);                                //LED初始化函数
void Key_init(void);                                //按键初始化函数       
void Delayms(unsigned int xms);        //毫秒延时函数
void main(void)                        //main函数
{
  Led_init();                                //初始化LED
  Key_init();                          //初始化按键
  while(1)                                //while1)循环(在没有跳出语句的情况下,无限循环)
  {
    if(!key_1)                                //判断key_1有没有按下
    {
      Delayms(20);                //消抖
      if(!key_1)                        //确定key_1有没有按下
      led = 0;                         //led点亮,P1_00
    }
    if(!key_2)                                //判断key_2有没有按下
    {       
      Delayms(20);                //消抖
      if(!key_2)                        //确定key_2有没有按下
      led = 1;                         //led灭,P1_01
    }
  }
  
}
/***********
        LED初始化函数:初始化LED
        无返回值
*/
void Led_init(void)
{
  P1SEL &= 0X01;    //功能选择---通用IO
  P1DIR |= 0X01;    //方向设定---输出
  P1INP &= ~0X01;   //输入模式选择---打开上拉/下拉
}
/***********
        按键初始化函数:初始化按键
        无返回值
*/
void Key_init(void)
{
  P0SEL &= 0X30;    //功能选择---通用IO
  P0DIR &= ~0X30;    //方向设定---输入
  P0INP &= ~0X30;   //输入模式选择---打开上拉/下拉
}
/***********
        延时函数:延时xms
        xunsigned int类型
        无返回值
*/
void Delayms(unsigned int x)   
{
unsigned int i,j;
for(i=x;i>0;i--)
   for(j=587;j>0;j--);
}
这段代码还是挺容易啃的,大家肯得下吗?有疑问的可以联系虎牙小哥哦;
下面我们编译看看代码有没有错吧,第一次Compile的时候需要保存工作空间:

I.png (57.59 KB )

I.png

使用特权

评论回复
9
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
再点一次,没有错误也没有警告;

J.png (53.48 KB )

J.png

使用特权

评论回复
10
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
下面进入我们的仿真吧,我用的是网蜂科技的zigbee开发板,看图;
连接我们的仿真器,马上开始实战吧。

K.png (235.08 KB )

K.png

L.png (295.5 KB )

L.png

使用特权

评论回复
11
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
本帖最后由 文旺C擦、 于 2016-12-24 18:23 编辑

点击Download and Debug,下载程序并仿真
进入仿真界面

M.png (50.62 KB )

M.png

N.png (65.62 KB )

N.png

使用特权

评论回复
12
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
效果(按下KEY_1,LED亮,按下KEY_2,LED灭)

O.png (273.94 KB )

O.png

P.png (282.26 KB )

P.png

使用特权

评论回复
13
文旺C擦、|  楼主 | 2016-12-24 19:09 | 只看该作者
我们看回代码吧,通过这次实验,大家基本上都会配置IO了吧,大家可以脑洞大开,按照技术手册去的更改两个init函数,然后玩出想要的效果,本次讲解就到这里了,后面会慢慢更新一些实验,让大家更好的体会!

使用特权

评论回复
14
lianglz616| | 2017-1-21 00:19 | 只看该作者
cc2530 技术交流
加入群,一起讨论,开发zigbee!   594507478
群主也有量产,上市公司使用的zigbee模块。加群后,可以联系群主。性能,稳定性,应该优于淘宝大部分。
知晓,谢谢!

使用特权

评论回复
15
lianglz616| | 2017-1-21 00:20 | 只看该作者
现在ti好像有cc2630了。m3核cpu+m0核RF.

使用特权

评论回复
16
ziiiro| | 2017-7-13 22:56 | 只看该作者
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:学习者永远停留在过去时,只有思考者才能创造未来时。

24

主题

207

帖子

7

粉丝