以下内容是针对无线温度计准备的,内容会不断更新,大部分引用网络,加入自己的理解。

更新:与CC1101相关联的芯片,包括CC110L,CC1100E等。

CC110L是经济型版本,也就是价格便宜一些,去掉了一些高级功能。如果用不到这些功能,倒是一个不错的选择。

CC1100E是老版本。

更新:熟悉液晶显示的同学会比较熟悉CC1101的操作。把CC1101类比液晶显示会更容易理解。

MCU对CC1101的操作分3类:

1、读寄存器;

2、写寄存器;

3、写滤波指令。

(前提是SPI通讯是正常的)

//

寄存器的配置,优先选择SmartRF Studio 7(注意版本)来配置。关于SmartRF Studio 7的使用细节,可参考如下链接:

SmartRF Studio 7的使用教程

//

先说说CC1101是通过SPI方式与MCU相连,可以通过MCU自带的硬件SPI,3线模式,或者MCU模拟SPI来驱动。

关于滤波指令和寄存器配置:

其实这里也TFT配置差不多,玩过TFT的都有同感,TFT可以通过RW引脚控制是读还是写,

如果是写寄存器,先写寄存器的地址,然后写数据,数据就到了相应的寄存器里面了;

如果读寄存器,就是RW引脚设置为读对应的电平,先写寄存器的地址,该寄存器里面的数据就可以读出来了。

(这里要强调:都是先写寄存器地址)

明白了这些其实理解CC1101就可以很容易理解了。

那么对应CC1101的理解:

寄存器的配置:

CC1101寄存器地址是0~0x3F,也就是BIT0~BIT5

CC1101读写控制是BIT7

BIT7为1时,为读对应的寄存器;

BIT7为0时,为写相应的寄存器。

//

BIT6是突发访问控制

BIT6为1为突发访问,也就是连续访问;

BIT6为0为单字节访问。(突发访问下面说)

//

举个例子,比如配置PKTCTRL0寄存器,其地址0x08,我们突发访问写的话写先数据0x48,再连续写数据,这里明白了突发访问后就很容易知道了,如果单字节读这个寄存器,先写数据0x88,读一下就可以了。

命令滤波:

命令滤波,也就是执行特殊指令,只要写一下对应的寄存器的地址,不用写数据,它就内部自动执行相应的指令。比如重启芯片,设置为发送模式等,共有14个滤波指令,地址从0x30~0x3D。

关于滤波指令的状态寄存器其实是可读不可写的,

也就是0x30~0x3D的地址加上0xC0,(BIT7 和IBT6为1,前面说过了),比如写数据0xF4,就可以读到相应RSSI状态寄存器里面的值。(读到的这个数值,应该是通过SPI自动传给MCU?)

数据包格式:

先看一个官方PDF上截得一个图


可以看出数据包由前导码,同步字节,可选的数据包长度,可选的目标地址,真正数据区,2字节的CRC校验码。

(对应的前导码,同步字节,CRC校验码怎么配置?)

CC1101的几个状态:

几个状态分别是:

IDLE(空闲状态),

TX(发送模式),

RX(接收模式),

FSTXON(快速发送准备),

校准,

迁移,

RXFIFO_OVERFLOW,

TXFIFO_OVERFLOW,有读的状态字的BIT6~BIT4决定

知道了那么多基本的,那么初步认识就容易了,我下面再把笔记贴上去,大家可以看看。

1 当CSN引脚变低,MCU必须等待SO引脚电平变低,表明内部稳定,除非radio处于Sleep或者XOFF状态,或者CSN变低后SO会立即变低的。

2 只有使radio处于XOSC空闲,并且数字中心的能量开启,其他模块处于功率降低状态,这时候频率和信道配置才能被更新。

3 状态字的最后4个字节表示FIFO的可用字节,其最大值是15,此时表示15或者更多字节是可以使用的。

4 每当一个字节通过SI引脚写入到寄存器时,状态字节将被送到SO引脚

5 寄存器的连续字节访问,就是内部计数器会自动设置起始地址,每增加一个字节,地址会自动加1,无论是读还是写,必须通过CSN拉高终止。(为何要进行连续字节访问?)

6 关于命令滤波其实是radio的单字节指令。执行指令,就是写入对应指令的寄存器的地址。内部的功能会自动做出相应的启动或者关闭,这里和TFT的液晶的寄存器出口指令一样,只需要写一个0x22,不像前面的对寄存器先写地址后写数据。

7 关于FIFO的访问,首先知道这个是64字节,可以通过单字节访问或者突发访问(也就是连续访问),他们的地址是0x3F,其实这些是这样操作的。

FIFO分为TX FIFO和RX FIFO两个单独的64数据区,当我们给的地址BIT7不同时,也就是读写控制位是1还是0,BIT7是0时访问的是TX FIFO,BIT7是1时RX FIFO被访问。BIT6是突发访问控制位,当BIT6为1时,选择的是突发访问,BIT6为0是单字节访问。这样就可以得到

0x3F:单字节访问TX FIFO

0xBF:单字节访问RX FIFO

0x7F:突发访问TX FIFO

0xFF:突发访问RX FIFO

8 当radio进入休眠状态时,两个FIFO都被刷新为空。

9 PATABLE的访问,用来设置发射功率的。地址是0x3E,里面有8个字节的表,接受地址SPI要等待8个字节。读写还是通过读写位控制,突发访问还是单字节访问还是通过突发位控制。这内部有个计数器,当计数到7时会自动下次为0。当设置CSn为高时,内部的计数器会变为0。

10 一般所有的滤波命令会立即执行,但是SPWD(休眠滤波命令)不会立即执行,它会延迟到CSn为高时执行。

11接收模式下的数据包滤波,CC1101支持包括地址滤波和最大长度滤波两种滤波方式。

地址滤波:设置PKTCTRL1.ADR_CHK大于0开启数据包地址滤波,radio将数据包中的目标地址字节的值同自己ADDR寄存器值和广播地址(0x00,0xFF)进行比较,如果匹配则数据包被写到RX FIFO,否则数据包被丢失。

最大长度滤波:在可变数据包长度模式下,PKTLEN.PACKET_LENGTH寄存器的值用来设置最大允许数据包长度,当接收字节值比这个值大,则数据包被丢弃。

注:当设置PKTCTTL1.ADRCHK=10时广播地址为0x00,当设置PKTCTTL1.ADRCHK=11时,广播地址为0x00和0xFF。

//

先说说GDO0和GDO2,这两个东西是搞CC1101很重要的两个东西,它连着你的单片机的IO口。因此你完全可以利用中断来判断当前的模块处于一种什么样的情况,当然这个还跟你怎么去设置IFGDO0和IFGDO2这两个寄存器有关系了,详见CC1101中文手册64页。

不过我的发送没有用中断来做,因为查询够了。当然查询也看你怎么查了,我见到过的有两种,如下:

1.先判断GDO0/GDO2(看你怎么连了)是否变高电平,然后再判断是否变低电平,这么一个过程就是发送一帧数据的过程。

2.判断CC1101的状态寄存器,这个也要看你的设置了,如果你发送完之后是IDLE状态则等待0x01如果发送完之后是接收状态则等待0x0d;

说到发送数据,这里说明一下,CC1101发送数据的时候是先发送前导码和同步字的,然后在发送FIFO数据长度、地址(如果接收端开启了地址过滤)以及FIFO中的数据。

在这里要说明一点:当时我和同事一起做这个的时候发现当低速率的时候他发送的数据我总是接收不到。原因就是我发送完之后等待IDLE的时间太短,所以数据根本就没发完就超时了。

说到寄存器,那CC1101的功能那么多,寄存器自然就很多。其实真正我们需要手动去设置的寄存器却不是很多,大多数寄存器都是SmartRF来自动生成的,在这里说说几个比较重要的寄存器:

FIFOTHR:(数据包长度阈值)这个主要是设置发送和接收FIFO能够放的下多少发送和接受的数据,一般来说都只要设置成0x07就可以了,因为如果你数据比较长你可以分包发送或者分包接收即可。

PKTLEN: 最大数据包长度设置。

PKTCTRL1:这个寄存器如果你需要地址过滤的话那就需要开启地址过滤,还有就是如果你想在你的数据FIFO最后两个字节放上RSSI的值和LQI值以及CRC_OK的话就需要做相应的设置。

PKTCTRL0:想开启数据白化和CRC校验的话就设置一下咯,当然还有比较重的就是是否是固定长度数据包或者是可变长度数据包,区别就是固定的话那前导码和同步字后就不需要加上FIFO数据长度了,反之则需要加上FIFO数据长度。否则CC1101怎么知道你要发多少数据呢?

MCSM1:这个太重要了,决定了你发送完或者接收完数据后下一个状态是什么。

MCSM0:选择自动校准还是手动校准,听说不校准的话速率低倒关系不大,速率高了可能跑偏了影响就大了。

cc1101 简单入门相关推荐

  1. TI CC1101学习笔记:工作原理简单入门

    众所周知,在IOT的市场应用中,从通信协议细分的话,有SUB-1G,2.4G,3G, 4G,以及最新推出的5G,虽然5G通信协议已经在崭露头角,但是不同的通信协议在不同的应用领域之中还是占据着一定的重 ...

  2. BizTalk 2006 简单入门示例程序(附源项目文件下载)

    BizTalk 2006 简单入门示例程序(附源项目文件下载) 为初学BizTalk Server 2006的开发人员,提供一个简单入门的示例程序,包括一个Receive Port.Send Port ...

  3. python如何读取mat文件可视化_python Matplotlib数据可视化(1):简单入门

    1 matplot入门指南 matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求.但功能丰富从另一方面来说也意 ...

  4. ARM NEON 编程简单入门1

    原文:http://blog.csdn.net/silentob/article/details/72954618  ARM NEON 编程简单入门1 NEON简介 NEON是适用于ARM Corte ...

  5. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  6. EChart.js 简单入门

    EChart.js 简单入门 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart   这个是Visual Studio里的自带控件,使用比 ...

  7. 【我的区块链之路】- Hyperledger fabric的简单入门(四)链码的编写及调试

    [我的区块链之路]- Hyperledger fabric的简单入门(四)链码的编写及调试       之前的文章中我们有讲过了fabric的一些核心的配置文件的选项说明,讲过fabric 的网络启动 ...

  8. 基于vue-cli、elementUI的Vue超简单入门小例子

    基于vue-cli.elementUI的Vue超简单入门小例子 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. 开始写例子之前,先对环境的部署做点简单 ...

  9. 【java开发系列】—— spring简单入门示例

    回顾 1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控 ...

最新文章

  1. 三阶魔方还原步骤图_(六)最简单的三阶魔方入门教程——顶面还原
  2. 思维导图 - 测试技术扩展:Postman接口测试、Sonar白盒测试、Sonic移动测试、Python操作FTP服务器
  3. 反馈速度小于 200ms!“弹窗”功能让你极速触达用户内心
  4. windows service 2008 内存吃尽解决方案
  5. 常用作业定义的T-SQL模板.sql
  6. 栈的输出_C|简单实现栈、及利用递归将十进制数用其他进制来输出
  7. 实训-利用HTML+CSS制作某米官网首页
  8. 步进电机驱动器的作用以及其调速方法
  9. 使用Origin软件对数据进行指数拟合的方法
  10. 详解智慧城市排水管理系统整体方案
  11. Python打包为exe文件
  12. 手搓GPT系列之 - Logistic Regression模型,Softmax模型的损失函数与CrossEntropyLoss的关系
  13. 自定义钉钉机器人发消息@所有人
  14. Windows10企业版中安装Docker
  15. CC00027.hadoop——|HadoopHive.V27|——|Hive.v27|Hive优化策略|实战.v03|
  16. Coursera TensorFlow 基础课程-week1
  17. Android studio占用C盘资源的解决方法
  18. 华为首次超越苹果 iPhone失去全球第二大手机供应商
  19. 大龄焦虑?如何看待程序员35岁职业危机?
  20. 接触角测量的常用测量法

热门文章

  1. 【操作系统】计算机中内存、cache和寄存器之间的关系及区别
  2. 亲身经历鬼门关,荒唐人遇到荒唐事!
  3. 计算机术语英语与门或门,与门、或门、非门、与非门、或非门、异或门
  4. 计算机图形学 实验3 《图形变换》
  5. 假定站点A和B在同一个10Mb/s以太网网段上。这两个站点之间的传播时延为225比特时间。现假定A开始发送一帧,并且在A发送结束之前B也发送一帧。如果A发送的是以太网所容许的最短的帧,那么A在检测到
  6. 内推 | 【思迈特-BI工程师】成都 8-10K
  7. 使用计算机时什么是开机键什么是关机键,电脑如何快速关机|电脑关机的快捷键是什么...
  8. 旅游网站(注册功能)
  9. Bambook应用“我爱记歌词”搜索动力说明
  10. iphone如何使用itunes恢复数据?