我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 2306|回复: 4

[技术文章] CC1101 学习笔记

[复制链接]

该用户从未签到

16

主题

2

回帖

30

积分

一级逆天

积分
30

社区居民

QQ
发表于 2013-12-22 13:42:37 | 显示全部楼层 |阅读模式
但是这个无线又不是很容易学习的,前一阵学的是CC430和Simplici
TI协议,搞得我头大,什么都看不懂。这次换成了MSP430F2274+CC1101,我也是学的很痛苦,苦于没有高手指点,只有慢慢的琢磨了。我要把我学到的无私分享给大家,那样大家就不用走那么多弯路了,算是共同分享共同进进步。这篇文章都是以CC1101
radio为基础,不是CC430自带的radio。
先说说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是突发访问控制为,BIT6为1为突发访问,BIT6为0为单字节访问。(突发访问下面说)

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

命令滤波:

命令滤波这里和TFT的写0x22是一样的,它就自动跳转到寄存器的出口,cc1101这里也是,只要写一下对应的寄存器的地址,不用写数据,它就内部自动执行相应的指令,比如重启芯片,设置为发送模式,共有14个滤波指令,地址从0x30~0x3D。



[img]mhtml:file://D:\DataSheet\eBook\CC1101 学习 笔记 之扫盲贴( MSP430F2274 + CC1101 433M).mht![/img]

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

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



数据包格式:

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

[img]mhtml:file://D:\DataSheet\eBook\CC1101 学习 笔记 之扫盲贴( MSP430F2274 + CC1101 433M).mht![/img]
可以看出数据包由前导码,同步字节,可选的数据包长度,可选的目标地址,真正数据区,2字节的CRC校验码。其更加详细内容可以看前面写的CC430上的无线通信两篇文章。



CC1101的几个状态:

几个状态分别是,IDLE,TX,RX,FSTXON,校准,迁移,RXFIFO_OVERFLOW,TXFIFO_OVERFLOW,有读的状态字的BIT6~BIT4决定



[img]mhtml:file://D:\DataSheet\eBook\CC1101 学习 笔记 之扫盲贴( MSP430F2274 + CC1101 433M).mht![/img]


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



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都被刷新为空。9PATABLE的访问,用来设置发射功率的。地址是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。
就写这么多吧,都是一个字一个字的打上去的,也不容易。如果实在看不懂,说明看的太少了,看一段时间后自然而然就明白了。
更深的我也不懂,无法解释,只希望把现在知道的分享给大家。
回复

使用道具 举报

舞池里的 该用户已被删除
发表于 2014-5-13 10:17:59 | 显示全部楼层
回复

使用道具 举报

  • TA的每日心情
    开心
    昨天 08:20
  • 签到天数: 124 天

    [LV.7]常住居民III

    2

    主题

    8628

    回帖

    9962

    积分

    二级逆天

    积分
    9962

    社区居民终身成就奖特殊贡献奖原创先锋奖

    QQ
    发表于 2021-1-4 08:57:59 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    7

    主题

    165

    回帖

    204

    积分

    PADS-2021国庆特训班

    积分
    204

    终身成就奖

    发表于 2022-1-14 09:19:47 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:20
  • 签到天数: 124 天

    [LV.7]常住居民III

    2

    主题

    8628

    回帖

    9962

    积分

    二级逆天

    积分
    9962

    社区居民终身成就奖特殊贡献奖原创先锋奖

    QQ
    发表于 2022-3-6 08:27:36 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    论坛开启做任务可以
    额外奖励金币快速赚
    积分升级了


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    平平安安
    TOP
    快速回复 返回顶部 返回列表