CC1101模块学习
本文最后更新于20 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

最近有做有关无线电发送和接收的课设,故写下此篇记录学习

当然,内容基于CC1101中文手册

# CC1101模块学习

翻阅数据手册可知道,CC1101通过SPI接口配置参数以达到最优性能。

关键参数如下:

功率降低/提升模式

晶体振荡器功率降低/提升

接收/传输模式

RF 信道选择

数据率

调制格式化

RX信道滤波器带宽

RF 输出功率

64 位传输FIFO数据缓冲

数据包通信硬件支持

交错前向误差校正

数据白化

电磁波激活(WOR)

一、 4 线串行配置和数据接口

CC1100通过4线SPI兼容接口(SI,SO,SCLK 和CSn)配置。这个接口同时用作写和读缓 存数据。

SPI 接口上所有的地址和数据转换 被最先在重要的位上处理。 SPI 接口上所有的处理都同一个包含一个读 /写位,一个突发访问位和一个 6 位地址的 头字节一起作用

在地址和数据转换期间,CSn脚(芯片选择, 低电平有效)必须保持为低电平。如果在过 程中CSn变为高电平,则转换取消。

当CSn变低,在开始转换头字节之前,MCU 必须等待,直到SO脚变低。这表明电压调 制器已经稳定,晶体正在运作中。除非芯片处在SLEEP 或 XOFF 状态,SO 脚在 CSn变低之后总会立即变低。

配置寄存器写和读操作:

1、芯片状态位

先看图

当头字节在SPI接口上被写入时,芯片状态 字节在SO脚上被CC1100写入。

首先是第7位CHIP_RDYn。它信号表明晶体正处于工作中, 调节数字供给电压是稳定的。

然后是第4到第6位,这三位共同表明了当前模块的状态模式

最后是第0位到第4位,其实是决定发送数据的长度?

2、寄存器访问

CC1100配置寄存器位于SPI地址从0x00到 0x2F 之间。所有的配置寄存器均能读和写。读/写 位控制寄存器是读或者写。当对寄存器写 时,每当一个待写入的数据字节传输到 SI 脚时,状态字节将被送至SO脚。

通过在地址头设置突发位,连续地址的寄存器能高效地被访问。这个地址在内部计数器内设置起始地址。每增加一个新的字节(每8 个时钟脉冲),计数器值增加1。突发访问,不管是读访问还是写访问,必须通过设置 CSn 为高来终止。

对与剩下的0x30-0x3D 间的地址来说,突发位用以在状态寄存器和命令滤波之间选择(如下)。状态寄存器只读。突发读取对状态寄存器是 不可取的,故它们每次只能被读一个。

3、命令滤波

命令滤波可被视为CC1100的单字节指令。 通过命令滤波寄存器的选址,内部序列被启动。这些命令用来关闭晶体振荡器,开启传输模式和电磁波激活等。

命令滤波寄存器的访问和一个寄存器的写操作一样,但没有数据被传输。就是说,只有R/W 位(置为0),突发访问(置为0) 和六个地址位(0x30和0x3D之间)被写。 一个命令滤波可能在任何其他 SPI 访问之 后,而不需要将CSn拉至高电平。

4、FIFO访问

先解释一下什么是FIFO,FIFO(First In First Out,先进先出)是一种数据缓存器,常用于不同时钟域之间的数据传输。它的特点是数据按照进入的顺序依次输出,类似于排队的方式。FIFO在FPGA中是非常常用的IP核,广泛应用于接口模块、数据转换和协议处理等场合。

64 字节TX FIFO和64字节RX FIFO通过 0x3F 被访问。当读/写位为0时,TX FIFO 被访问,当读/写位为1时,RX FIFO被访 问。 也就是TX FIFO (发送)是只写的,而RX FIFO(接收)是只读的。

突发位用来决定FIFO访问是单字节还是突发访问。单字节访问方式期望地址的突发位为0及1数据字节。在数据字节之后等待一个新的地址,因此,CSn继续保持低。突发访问方式允许一地址字节,然后是连续的数据字节,直到通过设置 CSn 为高来关断访问。(中译中:单字节访问就是一个地址+一个数据,突发访问方式就是一个地址+n个数据,直到CSn拉高来结束)

头字节访问FIFO:

头字节访问方式
0x3F单字节访问TX FIFO
0x7F突发访问TX FIFO
0xBF单字节访问RX FIFO
0XFF突发访问RX FIFO

当对TX FIFO写时,状态字节对每个SO脚上的新数据字节是输出量,这个状态位能用来侦测对 TX FIFO 写数据时的下溢。注意,状态字节包含在写入字节到TX FIFO 的过程前空闲的字节数。当最后一个适合TX FIFO的字节被 传送至SI脚后,被SO脚接收的状态位会表 明在TX FIFO中只有一个字节是空闲的。传输FIFO可能会通过发布一个SFTX命令滤波而被淹没。相似地,一个SFRX命令滤波会淹没接收FIFO。当进入休眠状态时,两个FIFO都被清空。

SFTX:冲洗TX FIFO缓冲

SFRX:冲洗RX FIFO缓冲

5、PATABLE访问

PATABLE用来选择PA能量控制设置。在接收此地址之后,SPI等待至少8个字节。通过控制 PATABLE,能实现可控的PA能量上升和下 降,减少的带宽的ASK调制整型也如此。

二、微控制器接口和引脚结构

微控制器为SPI 配置接口(SI,SO,SCLK 和 CSn)使用4个I/O引脚。

CC1100 有两个专用的配置引脚(GDO0、GDO1)和一个共享引脚(SO),能输出对控制软件有用的内部状态信 息。这些引脚能用来对MCU产生中断。

GDO1/SO 的默认设置为 3 状态输出。通过选择任意其他的控制选项, GDO1/SO 脚将成为一般引脚。当CSn为低 时,此引脚的功能如一般SO脚。

在同步和异步连续模式下,处于传输模式时 GDO0脚被用作连续TX数据输入脚。提一嘴GDO0脚也能用作集成于芯片的模拟温度传感器。

可选通信控制特性

通过重复使用 SPI 接口上的 SI,SCLK 和 CSn,CC1100 含有一个可选的控制电磁波 方式。这个特性使通信的主要状态有一个简 单的3脚控制:休眠,空闲,RX和TX。控制MCSM0.PIN_CTRL_EN配置位,可开 启这一可选功能。

当CSn为高,SI和SCLK设置为理想状态时,状态变化的命令被发出,如下所示。当CSn变低,SI和SCLK的状态被 闭锁,根据引脚配置一个命令滤波在内部产 生。只能用这种功能改变状态。这意味着, 例如,如果SI和SCLK设置为RX且CSn 固定,则RX不会被重新启动。当CSn为低, SI 和SCLK为一般SPI功能。

所有引脚控制命令滤波被立即执行,除 SPWD滤波外。SPWD滤波一直延迟到CSn 变高为止。

三、接收信道滤波带宽

为了满足不同信道宽度要求,使接收器信道 滤波装置可编程控制。 MDMCFG4.CHANBW_E 和MDMCFG4.CHANBW_M 配置寄存器控制 接收器信道滤波带宽。

CC1100 支持 54-63kHz 到 600-700kHz 之间 的信道滤波带宽。然而,在300kHz之上, 灵敏度和模块化性能会稍微降低。

为得到最高性能,信道滤波带宽应该选择 为:信号带宽最多占80%信道滤波带宽。举例:

设置信道滤波带宽为 500kHz,信号应该处 于500kHz的80%之内,即400kHz。假设发 送装置和接收装置均为频率为915MHz,正 负 20ppm 频率波动,总的频率波动为 915MHz 的正负40ppm,即正负37kHz。如 果整个发送信号带宽将在 400 kHz 内被接 收,那么发送信号带宽应该为 400kHz-237kHz 的最大值,即326kHz。

四、配置寄存器

CC1100 的配置通过程序控制8位寄存器完成。在芯片重启之后,所有的寄存器置默认值。

在下表中,有14个命令滤波寄存器。访问这些寄存器将会发起内部状态或模式的改变。

地址滤波名描述
0x30SRES重启芯片
0x31SFSTXON开启和校准频率合成器(若MCSM0.FS AUTOCAL=1)
0x32SXOFF关闭晶体振荡器
0x33SCAL校准频率合成器并关断(开启快速启动)。在不设置手动校准 模式(MCSM0.FS_AUTOCAL=0)的情况下,SCAL能从空闲 模式滤波。
0x34SRX启用 RX。若上一状态为空闲且 MCSM0.FS_AUTOCAL=1 则 首先运行校准。
0x35STX空闲状态:启用TX。若MCSM0.FS_AUTOCAL=1首先运行校 准。若在RX状态且CCA启用:若信道为空则进入TX
0x36SIDLE离开RX/TX,关断频率合成器并离开电磁波激活模式若可用
0x37SAFC运行频率合成器的AFC调节
0x38SWOR运行自动RX选举序列(电磁波激活)
0x39SPWD当CSn为高时进入功率降低模式。
0x3ASFRX冲洗RX FIFO缓冲
0x3BSFTX冲洗TX FIFO缓冲
0x3CSWORRST重新设置真实时间时钟
0x3DSNOP无操作。可能用来为更简单的软件将滤波命令变为2字节。

在下表中,有47个一般的8位配置寄存器。

地址寄存器描述
0x00IOCFG2GDO2输出脚配置
0x01IOCFG1GDO1输出脚配置
0x02IOCFG0GDO0输出脚配置
0x03FIFOTHRRX FIFO和TX FIFO门限
0x04SYNC1同步词汇,高字节
0x05SYNC0同步词汇,低字节
0x06PKTLEN数据包长度
0x07PKTCTRL1数据包自动控制
0x08PKTCTRL0数据包自动控制
0x09ADDR设备地址
0x0ACHANNR信道数
0x0BFSCTRL1频率合成器控制
0x0CFSCTRL0频率控制词汇,高字节
0x0DFREQ2频率控制词汇,中间字
0x0EFREQ1频率控制词汇,低字节
0x0FFREQ0调制器配置
0x10MDMCFG4调制器配置
0x11MDMCFG3调制器配置
0x12MDMCFG2调制器配置
0x13MDMCFG1调制器配置
0x14MDMCFG0调制器背离设置
0x15DEVIATN主通信控制状态机配置
0x16MCSM2主通信控制状态机配置
0x17MCSM1主通信控制状态机配置
0x18MCSM0频率偏移补偿配置
0x19FOCCFG位同步配置
0x1ABSCFGAGC控制
0x1BAGCTRL2AGC控制
0x1CAGCTRL1AGC控制
0x1DAGCTRL0高字节时间0暂停
0x1EWOREVT1低字节时间0暂停
0x1FWOREVT0电磁波激活控制
0x20WORCTRL前末端RX配置
0x21FREND1前末端TX配置
0x22FREND0频率合成器校准
0x23FSCAL3频率合成器校准
0x24FSCAL2频率合成器校准
0x25FSCAL1频率合成器校准
0x26FSCAL0RC振荡器配置
0x27RCCTRL1RC振荡器配置
0x28RCCTRL0频率合成器校准控制
0x29FSTEST产品测试
0x2APTESTAGC测试
0x2BAGCTEST不同的测试设置
0x2CTEST2不同的测试设置
0x2DTEST1不同的测试设置
0x2ETEST0

五、配置流程

参考代码:

 //默认对应的引脚已经正确定义
 const uint8_t PaTabel[ ] = { 0xc0, 0xC8, 0x84, 0x60, 0x68, 0x34, 0x1D, 0x0E};
 static const uint8_t CC1101InitData[ 22 ][ 2 ]=
 {
  { CC1101_IOCFG0,      0x06 },
  { CC1101_FIFOTHR,     0x47 },
  { CC1101_PKTCTRL0,    0x05 },
  { CC1101_CHANNR,      0x96 }, //430M
  { CC1101_FSCTRL1,     0x06 },
  { CC1101_FREQ2,       0x0F },
  { CC1101_FREQ1,       0x62 },
  { CC1101_FREQ0,       0x76 },
  { CC1101_MDMCFG4,     0xF6 },
  { CC1101_MDMCFG3,     0x43 },
  { CC1101_MDMCFG2,     0x13 },
  { CC1101_DEVIATN,     0x15 },
  { CC1101_MCSM0,       0x18 },
  { CC1101_FOCCFG,      0x16 },
  { CC1101_WORCTRL,     0xFB },
  { CC1101_FSCAL3,      0xE9 },
  { CC1101_FSCAL2,      0x2A },
  { CC1101_FSCAL1,      0x00 },
  { CC1101_FSCAL0,      0x1F },
  { CC1101_TEST2,       0x81 },
  { CC1101_TEST1,       0x35 },
  { CC1101_MCSM1,       0x3B },
 };
 ​
 void CC1101_Init( void )
 {
  uint8_t i = 0;
 ​
  CC1101_Gpio_Init( ); //引脚初始化
  CC1101_Reset( );   //模块复位
 ​
  for( i = 0; i < 22; i++ )
  {
  CC1101_Write_Reg( CC1101InitData[i][0], CC1101InitData[i][1] ); //写入配置参数
  }
  CC1101_Set_Address( 0x05, BROAD_0AND255 ); //写入设备地址 和地址模式
  CC1101_Set_Sync( 0x8799 ); //写入同步字段
  CC1101_Write_Reg(CC1101_MDMCFG1, 0x72 ); //调制解调器配置
 ​
  CC1101_Write_Multi_Reg( CC1101_PATABLE, (uint8_t*)PaTabel, 8 );
 }
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇