CC1101的调试

来源:互联网 发布:点测光和矩阵测光 编辑:程序博客网 时间:2024/05/12 22:38

单片机又来了个新东西,CC1101,记录下自己的调试过程吧


资料的查找,CC1101有中文的数据手册,网上的中文数据手册有两个版本的,一个是阉割版的,48页,还有一个完整版的100页多点,我建议看那个完整版的好点,代码网上也有,官方有DEMO,但我没找到,下面会附上自己用的代码


CC1101是CC1100的升级版,在性能方面有一定的改进,具体在DATASHEET里面有介绍,有一个值得注意的,CC1101和CC1100在代码上可以通用,而且两者之间能互相通信。CC1101通过SPI进行驱动,可以是MCU自带的SPI也可以用MCU模拟SPI来驱动。


关于寄存器的读取:读写寄存器的控制在于W/R位,写寄存器的时候先写地址,再写写入寄存器的内容,通过SI引脚;读寄存器的时候写地址,然后SO引脚会输出寄存器的内容,在读写的时候可以一位位也可以连续的读写,通过将CSn拉高来停止连续读写。


CC1101寄存器地址是0~0x3F,也就是BIT0~BIT5,BIT7控制读写(1的时候为读,0的时候为写),BIT6控制连续读写还是单次读写(1为突发访问,0为单字节读写)。


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


数据包的格式:

可以看出数据包由前导码,同步字节,可选的数据包长度,可选的目标地址,真正数据区,2字节的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分为TXFIFO和RXFIFO两个单独的64数据区,当我们给的地址BIT7不同时,也就是读写控制位是1还是0,BIT7是0时访问的是TXFIFO,BIT7是1时RXFIFO被访问。BIT6是突发访问控制位,当BIT6为1时,选择的是突发访问,BIT6为0是单字节访问。这样就可以得到

0x3F:单字节访问TXFIFO
0xBF:单字节访问RXFIFO
0x7F:突发访问TXFIFO
0xFF:突发访问RXFIFO

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)进行比较,如果匹配则数据包被写到RXFIFO,否则数据包被丢失。

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

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

0 0