This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1200:配置寄存器写入和读取操作

Guru**** 2393725 points
Other Parts Discussed in Thread: CC1200

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/594806/cc1200-configuration-registers-write-and-read-operations

器件型号:CC1200
主题中讨论的其他器件: SimpliciTI

从该图中可以看到、 联系 SPI 访问类型中的单寄存  器访问、我们认为如果我们向 SI 引脚发送0x80、这意味着我们要执行的操作是从 CC1200读取寄存器的值、SO 引脚将返回0x00 (地址)的值。
如果 CC1200在我们读取寄存器之前通电、则该值为复位值(默认值) 0x06。
因此、当我们向 SI 引脚发送0x80时、SO 引脚应返回一个8位芯片状态字节和一个8位数据字节(0x06)。
SI:0x80
因此:0x0F 0x06

 我的理解是否正确?

当我们写入寄存器时、SO 引脚首先返回8位芯片状态字节、为什么 S6为零?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你是对的。 在 MOSI 上发送0x80意味着您要对寄存器0x00 (IOCFG3)进行一次读取。 该寄存器默认设置为0x06。 当0x80 8s 在 MOSI 上计时时、您将在 MISO 上获得返回的状态。 这是0x0F、这意味着 CHIP_RDYn 为0且状态为空闲(000)。 最后4个位(0xF)被保留。 下一个字节(0x06)是寄存器0x00的内容。 在 SPI 实现中、您应该在 CHIP_RDYn (状态字节的 MSB)上进行轮询、并在开始计时之前确保它为0、因为在晶体不稳定的情况下、您不应该访问芯片。

    Siri
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们通过 SPI 接口使用 tiny4412 (使用 Samsung Exynos4412作为主处理器)来控制 cc1200。

    由此:e2e.ti.com/.../279412,We 确定了连接、如图所示

    当我们向 SI 引脚发送命令选通 STX (0x35)时、SO 引脚应返回 芯片状态字节 (0x2F)、这已由我们验证、

    SI:STX (0x35)

    SO: 芯片状态字节 (0x2F)

    当我们向 SI 引脚发送0x80时、SO 引脚应返回一个8位芯片状态字节和一个8位数据字节(0x06)。
    SI:0x80
    因此:0x0F 0x06

    但我无法得到0x06、为什么是?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    MCU 是主器件、因此主器件必须提供时钟(SCLK)才能从 CC1200读取数据。 用户指南中的图3显示了这一点。 这意味着、在时钟输出0x80后、必须发送虚拟字节才能读取0x06。

    BR

    Siri
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的帮助。我们获得了正确的结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    芯片复位后、我们能够通过 SPI 接口配置/重新配置无线电。

    但我们 无法使 CC1200正确地发送和接收数据包。我们的连接是否正确?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "正确"是什么意思?

    我们需要有关您正在做什么以及您看到什么的更多信息来帮助您进一步。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们使用 ARM 控制 CC1200作为接收器、MSP430控制 CC1200作为发送器。 代码根据 swrc274a 的 cc120x_ease_link 进行修改。 现在的问题是、我们丢失了大量数据包、在 packetCounter 中接收到的数据包不连续:

    接收器:packetCounter = 1
    数据包:packetCounter = 0x00 0x0C
    接收器:packetCounter = 2
    数据包:packetCounter = 0x00 0x14
    接收器:packetCounter = 3
    数据包:packetCounter = 0x00 0x1B

    void runRX(){

    uint8 rxBuffer[128]={0};
    uint8 rxBytes;
    uint8 marcState;

    printf("******** 设置 CC1200模式为 RX ************* \n");
    TrxSpiCmdStrobe (CC120X_SRX);
    睡眠(2);

    while (1){
    printf ("--read number rxbytes from CC120X_NUM_RXBYTES--\n");
    rxBytes = cc120xSpiReadReg (CC120X_NUM_RXBYTES);
    printf ("-------------------- rxBytes =0x%2hhhx ---------- \n",rxBytes);

    if (rxBytes!= 0){
    printf ("--read Marc state to check for RX FIFO error \n");
    marcState = cc120xSpiReadReg (CC120X_MARCSTATE);
    printf ("---------------- marcstate =0x%2hhhhx----- ",marcState";

    if ((marcState & 0x1F)= RX_FIFO_ERROR){
    printf("--if RX FIFO 错误,CC1200清空 RX FIFO 缓冲区\n");
    TrxSpiCmdStrobe (CC120X_SFRX);

    否则{
    printf ("从 RX FIFO 读取 rxBuffer\n");
    cc120xSpiReadRxFifo (rxBuffer、rxBytes);

    if (rxBuffer[rxBytes - 1]和0x80){
    PacketCounter++;
    printf("****** 电池组计数器=%d ******** \n",packetCounter);



    TrxSpiCmdStrobe (CC120X_SRX);
    睡眠(2);

    printf ("****** 接收过多 \n");

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您为什么要连续轮询 FIFO 中的字节数量而不是使用基于中断的系统?

    if (rxBuffer[rxBytes - 1]& 0x80):如果为真、您是否有一个结束字节、因为您累加了计数器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为这样做的原因是 TX 需要有一个数据包间隔。

    RX 数据包计数器

    TX 数据包计数器

    packetCounter==1

    0x00 0x0D

    packetCounter==2

    0x00 0x14

    0x14- 0x0D=7

    packetCounter==3

    0x00 0x1B

    0x1b-0x14=7

    packetCounter==4

    0x00 0x22

    0x22-0x1B=7

    packetCounter==5

    0x00 0x2A

    0x2A-0x22=8

    packetCounter==6

    0x00 0x31

    0x31-0x2A=7

    packetCounter==7

    0x00 0x38

    0x38-0x31=7

    packetCounter==8

    0x00 0x40

    0x40-0x38=8

    packetCounter==9

    0x00 0x47

    0x47-0x40=7

    packetCounter==10

    0x00 0x4E

    0x4E-0x47=7

    packetCounter==11

    0x00 0x56

    0x56-0x4E=8

    packetCounter==12

    0x00 0x5D

    0x5D-0x56=7

    packetCounter==13

    0x00 0x64

    0x64-0x5D=7

    packetCounter==14

    0x00 0x6C

     0x6C-0x64=8

    packetCounter==15

    0x00 0x73

     0x73-0x6C=7

    packetCounter==16

    0x00 0x7A

    0x7A-0x73=7

    packetCounter==17

    0x00 0x82

    0x82-0x7A=8

    packetCounter=18

    0x00 0x89

    0x89-0x82=7

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从 cc120x_ease_link_rx.c:
    /*********
    *@fn runRX
    *
    *@简介 将无线电置于 RX 中并等待数据包。 函数假设
    * 该状态字节附加在 RX_FIFO 中
    * 更新数据包计数器并显示接收到的每个数据包。
    *
    *@param 无
    *
    *@返回 无
    *
    静态 void runRX (void){

    uint8 rxBuffer[128]={0};
    uint8 rxBytes;
    uint8 marcState;

    //将 ISR 函数连接到 GPIO2
    ioPinIntRegister (IO_PIN_PORT_1、GPIO2、&radioRxISR);

    //下降沿上的中断
    ioPinIntTypeSet (IO_PIN_PORT_1、GPIO2、IO_PIN_FALLING_EDGE);

    //清除 ISR 标志
    ioPinIntClear (IO_PIN_PORT_1、GPIO2);

    //启用中断
    ioPinIntEnable (IO_PIN_PORT_1、GPIO2);

    //更新 LCD
    updateLcd();

    //在 RX 中设置无线电
    TrxSpiCmdStrobe (CC120X_SRX);

    //无限循环
    while (true){

    //等待数据包接收中断
    if (packetSemaphore = ISR_ACT_REQUIRED){

    //读取 RX FIFO 中的字节数
    cc120xSpiReadReg (CC120X_NUM_RXBYTES、&rxBytes、1);

    //检查 FIFO 中是否有字节
    if (rxBytes!= 0){

    //读取 MARCSTATE 以检查 RX FIFO 错误
    cc120xSpiReadReg (CC120X_MARCSTATE、&marcState、1);

    //屏蔽 MARCSTATE 位并检查我们是否有 RX FIFO 错误
    if ((marcState & 0x1F)= RX_FIFO_ERROR){

    //刷新 RX FIFO
    TrxSpiCmdStrobe (CC120X_SFRX);
    }否则{

    //从 RX FIFO 读取 n 个字节
    cc120xSpiReadRxFifo (rxBuffer、rxBytes);

    //检查 CRC OK (CRC_OK:第二个状态字节中的位7)
    //假设状态字节附加在 RX_FIFO 中
    //(PKT_CFG1.append_status = 1)
    //如果禁用 CRC,CRC_OK 字段将读为1
    if (rxBuffer[rxBytes - 1]和0x80){

    //更新数据包计数器
    PacketCounter++;




    //更新 LCD
    updateLcd();

    //重置数据包信标
    packetSemaphore = ISR_IDLE;

    //将无线电设置回 RX
    TrxSpiCmdStrobe (CC120X_SRX);



    您的意思是、我们还需要使用 GPIO2来设置中断。我们没有设置数据包信标。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您说的结束字节是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在我们的示例代码中、当我们获得一个中断、告诉 MCU 在 RX FIFO 中接收到一个数据包时、我们读取长度字节。

    在您的代码中使用:
    TrxSpiCmdStrobe (CC120X_SRX);
    睡眠(2);

    while (1){
    printf ("--read number rxbytes from CC120X_NUM_RXBYTES--\n");
    rxBytes = cc120xSpiReadReg (CC120X_NUM_RXBYTES);
    printf ("-------------------- rxBytes =0x%2hhhx ---------- \n",rxBytes);

    您如何知道从 FIFO 中读出的内容是长度字节?

    暂存有关结束字节的问题。 if (rxBuffer[rxBytes - 1]& 0x80)用于检查 CRC OK 位、要使该位正常工作、您必须实际读取 CRC OK 标志。 如果 rxBytes 不是长度字节、则可以增加数据包计数器、而无需接收完整的数据包计数器。

    不确定我是否理解:"我认为这是因为 TX 需要有一个数据包间隔。" 如果您希望 Tx 中数据包之间的间隔、为什么您认为必须在 Rx 中使用轮询?

    我不理解:
    RX包计数 μ A TX包计数 μ A 差值 μ A
    packetCounter==1 0x00 0x0D 0

    Tx 编号是什么以及3是什么。 数字?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。


    关于:您如何知道从 FIFO 中读出的内容是长度字节?  

    8.5固件中的数据包处理

    b) SPI 轮询
    GPIO_STATUS 寄存器可按给定速率进行轮询、以获取有关当前 GPIO 值的信息。 NUM_RXBYTES 和 NUM_TXBYTES 寄存器可以以给定的速率进行轮询、以分别获取有关 RX FIFO 和 TX FIFO 中字节数的信息。 也可以使用 FIFO_NUM_RXBYTES.FIFO_RXBYTES 和 FIFO_NUM_TXBYTES.FIFO_TXBYTES。 这些寄存器域给出了 RX FIFO 中可用的字节数量和 TX FIFO 中可用的字节数量、并且两个寄存器的值都达到15。

    我们称之为 CC120X_NUM_RXBYTES 实际上是 CC1200的 NUM_RXBYTES、其解释如下

    (__LW_AT__SWRU346B)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    关于:如果您想在 Tx 中的数据包之间设置间隔、为什么您认为必须在 Rx 中使用轮询?
    我们认为、接收器 CC1200从空气中接收数据包后、需要一些处理时间、而另一个发送器 CC1200将数据包连续发送到空气中。
    因此、当接收器 CC1200处理数据包时、它无法从另一个发送器 CC1200接收空气数据包。
    因此接收器 CC1200丢失了数据包。

    发送器 CC1200'code:
    静态 int createPacket (uint8 txBuffer[])

    txBuffer[0]= PKTLEN;//长度字节
    txBuffer[1]=(uint8)(packetCounter >> 8);// packetCounter 的 MSB
    txBuffer[2]=(uint8) packetCounter;// packetCounter 的 LSB

    //用随机字节填充缓冲区的其余部分
    对于(uint8 i = 3;i <(PKTLEN + 1);i++){
    txBuffer[i]= 0xAA;

    返回0;

    在 RX 中:每次 CC1200正确接收数据包时、RX 数据包计数器+1;

    在 TX 中: 每次 CC1200 正确发送数据包时、TX 数据包计数器+1。

    RX 数据包计数器

    TX 数据包计数器

    packetCounter==1

    0x00 0x0D

    packetCounter==2

    0x00 0x14

    0x14- 0x0D=7

    packetCounter==3

    0x00 0x1B

    0x1b-0x14=7

    packetCounter==4

    0x00 0x22

    0x22-0x1B=7

    packetCounter==5

    0x00 0x2A

    0x2A-0x22=8

    packetCounter==6

    0x00 0x31

    0x31-0x2A=7

    packetCounter==7

    0x00 0x38

    0x38-0x31=7

    packetCounter==8

    0x00 0x40

    0x40-0x38=8

    packetCounter==9

    0x00 0x47

    0x47-0x40=7

    packetCounter==10

    0x00 0x4E

    0x4E-0x47=7

    packetCounter==11

    0x00 0x56

    0x56-0x4E=8

    packetCounter==12

    0x00 0x5D

    0x5D-0x56=7

    packetCounter==13

    0x00 0x64

    0x64-0x5D=7

    packetCounter==14

    0x00 0x6C

     0x6C-0x64=8

    packetCounter==15

    0x00 0x73

     0x73-0x6C=7

    packetCounter==16

    0x00 0x7A

    0x7A-0x73=7

    packetCounter==17

    0x00 0x82

    0x82-0x7A=8

    packetCounter=18

    0x00 0x89

    0x89-0x82=7

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您使用轮询或中断驱动、CC1200接收和处理数据包的速度同样快。 在这两种情况下、您都需要确保在接收器找到下一个数据包的同步之前先读取 RX FIFO。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的发送程序遇到了问题。 在发送程序运行后、我们无法接收数据包。

    关于 MSP430控制 CC1200向空中发送数据的此代码、我们编写了 Tiny4412控制 CC1200向空中发送数据的代码。

    确定接收器和发送器的寄存器配置相同、寄存器配置源自 SamrtRF Studio。

    void runTX(){


    uint8 txBuffer[PKTLEN+1]={0};
    printf("******** 设置 CC1200模式为 TX ************* \n");
    // trxSpiCmdStrobe (CC120X_STX);

    while (1){
    //更新数据包计数器
    PacketCounter++;

    //使用 PKTLEN + 2字节数据包创建随机数据包
    //计数器+ n x 随机字节
    createPacket (txBuffer);

    //将数据包写入 TX FIFO
    cc120xSpiWriteTxFifo (txBuffer、sizeof (txBuffer));

    // Strobe TX 发送数据包
    TrxSpiCmdStrobe (CC120X_STX);
    睡眠(0.3);

    printf ("****** 接收过多 \n");

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否检查过 Tx 侧实际上发送了有关频率的内容?

    您是否已检查 FIFO 错误?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们没有检查 TX FIFO 错误、也没有检查 TX FIFO 错误。

    数据包长度模式=可变。
    8.3传输模式下的数据包处理:"如果 TX FIFO 在传输完完整数据包之前为空、对讲机将进入 TX_FIFO_ERR。"您认为这可能是原因吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我只是让数据包间隔变大、接收端的数据包丢失数量明显变小。

    但我不明白 我写入  TX FIFO 的程序数据为何

    0x1E 0x00 0x4F 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x19 0x1A 0x1C  

    计划:

    void runTX(){

    uint8 txBuffer[PKTLEN+1]={0};
    uint8 txBytes;
    uint8 txBytes2;
    uint8 marcState;
    printf("******** 设置 CC1200模式为 TX ************* \n");

    while (1)

    //使用 PKTLEN + 2字节数据包创建随机数据包
    //计数器+ n x 随机字节
    createPacket (txBuffer);
    TrxSpiCmdStrobe (CC120X_SFTX);

    cc120xSpiWriteTxFifo (txBuffer、sizeof (txBuffer));
    printf ("------ sizeof (txBuffer)=0x%2hhhx ---------- \n",sizeof (txBuffer));
    睡眠(1);
    txBytes = cc120xSpiReadReg (CC120X_NUM_TXBYTES);
    printf ("------ 从 CC120X_NUM_TXBYTES:txBytes = 0x%2hhhhx 中读取 txbytes 数--- ",txBytes);
    marcState = cc120xSpiReadReg (CC120X_MARCSTATE);
    printf ("------ 读取 MARC 状态以检查 TX FIFO 错误:marcstate == 0x%2hhhhhx--- ",marcState";
    if ((marcState & 0x1F)!= TX_FIFO_ERROR)

    txBytes2 = cc120xSpiReadReg (CC120X_NUM_TXBYTES);
    printf ("---read number txbytes from CC120X_NUM_TXBYTES again:txBytes2 =0x%2hhhx --\n",txBytes2);
    if (txBytes2 =(sizeof (txBuffer)-1))

    printf ("--write number txbytes to CC1200 TX FIFO ok、send TX 命令--\n");
    TrxSpiCmdStrobe (CC120X_STX);
    printf("****** 电池组 TXCounter=%d ******** \n",packetCounter);
    //更新数据包计数器
    PacketCounter++;


    否则{printf ("--write number txbytes to CC1200 TX FIFO error-\n");}

    睡眠(0.4);
    printf ("****** 接收过多 \n");

    SmartRF Studio 接收到的数据包始终显示 CRC 错误、SmartRF Studio 无法接收数据包

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只看一下 SmartRF Studio 窗口:您是否修改了 Rx 带宽? 考虑到数据速率/偏差、它看起来很小。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用 SmartRF Studio 建议的配置、但未做任何更改。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于某种原因、屏幕截图中未显示一个数字。

    看起来您正在尝试发送01 02 03等、但接收到0x22...22或0x88 ...0x88、这毫无意义。

    首先、您能否尝试使用具有较低数据速率的2GFSK 的设置之一? 您是否在 Tx 侧和 Rx 侧实际使用相同的设置?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如 上一个图所示的"RX 侧设置"。

    TX 侧设置从 SmartRF Studio:导出

    代码为:

    //地址配置=无地址检查
    //比特率= 1000
    //载波频率= 867.999878
    //偏差= 399.169922
    //设备地址= 0
    //曼彻斯特启用= false
    //调制格式= 4-GFSK
    //数据包位长度= 0
    //数据包长度= 255
    //数据包长度模式=变量
    // RX 滤波器带宽= 1666.6667
    //符号速率= 500
    // Whitening = false

    静态常量寄存器 Setting_t preferredSettings[]=

    {CC120X_IOCFG2、0x06}、
    {CC120X_SYNC_CFG1、0xA8}、
    {CC120X_EXTERING_M、0x47}、
    {CC120X_MODCFG_DEV_E、0x2F}、
    {CC120X_DCFILT_CFG、0x1E}、
    {CC120X_PREAMING_CFG0、0x8A}、
    {CC120X_IQIC、0x00}、
    {CC120X_CHAN_BW、0x01}、
    {CC120X_MDMCFG1、0x42}、
    {CC120X_MDMCFG0、0x05}、
    {CC120X_symbol_Rate2、0xC9}、
    {CC120X_symbol_rate1、0x99}、
    {CC120X_symbol_RATE0、0x99}、
    {CC120X_AGC_REF、0x2F}、
    {CC120X_AGC_CS_THR、0xf8}、
    {CC120X_AGC_CFG2、0x60}、
    {CC120X_AGC_CFG1、0x12}、
    {CC120X_AGC_CFG0、0x84}、
    {CC120X_FIFO_CFG、0x00}、
    {CC120X_FS_CFG、0x12}、
    {CC120X_PKT_CFG2、0x00}、
    {CC120X_PKT_CFG0、0x20}、
    {CC120X_PKT_LEN、0xFF}、
    {CC120X_FREQOFF_CFG、0x23}、
    {CC120X_MDMCFG2、0x00}、
    {CC120X_FREQ2、0x56}、
    {CC120X_FREQ1、0xCC}、
    {CC120X_FREQ0、0xCC}、
    {CC120X_IF_ADC1、0xEE}、
    {CC120X_IF_ADC0、0x10}、
    {CC120X_FS_DIG1、0x04}、
    {CC120X_FS_DIG0、0xA3}、
    {CC120X_FS_CAL1、0x40}、
    {CC120X_FS_CAL0、0x0E}、
    {CC120X_FS_DIVTWO、0x03}、
    {CC120X_FS_DSM0、0x33}、
    {CC120X_FS_DVC1、0xF7}、
    {CC120X_FS_DVC0、0x0F}、
    {CC120X_FS_PFD、0x00}、
    {CC120X_FS_PRE、0x6E}、
    {CC120X_FS_REG_DIV_CML、0x1C}、
    {CC120X_FS_SPARE、0xAC}、
    {CC120X_FS_VCO0、0xB5}、
    {CC120X_IFAMP、0x0D}、
    {CC120X_XOSC5、0x0E}、
    {CC120X_XOSC1、0x03}、
    };

    因此、我认为 TX 设置与 RX 设置相同。

    感谢您的灵感。  我刚刚发现了一个重要问题、 即 TX 射频设置 应该与 RX 射频设置完全相同、而 TX 寄存器设置 不应该与 RX 寄存器设置完全相同。我将尝试新的想法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据您的建议、调制将更改为2GFSK、结果如下:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您必须检查 TX FIFO 中是否包含要发送的数据、FIFO 指针是否位于预期的位置。

    将 Rx 端设置为固定的数据包长度、并检查接收到的长度是否正确。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们能够持续接收该封装
    ARM 控制 CC1200、发送的数据为
    0x1E 0x00 0x69 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0B 0x0C 0x0D 0x0E 0x0F 0x10 0x11 0x13 0x14 0x15 0x16 0x17 0x19 0x1A 0x1B 0x1C 0x1D

    void runTX(){
    
    uint8 txBuffer[PKTLEN+1]={0};
    uint8 txBytes;
    uint8 txBytes2;
    uint8 marcState;
    printf ("********* 设置 CC1200模式为 TX ************* \n");
    while (1){
    
    //更新数据包计数器
    PacketCounter++;
    //使用 PKTLEN + 2字节数据包创建随机数据包
    //计数器+ n x 随机字节
    createPacket (txBuffer);
    
    
    cc120xSpiWriteTxFifo (txBuffer、sizeof (txBuffer));
    
    TrxSpiCmdStrobe (CC120X_STX);
    睡眠(1);
    TrxSpiCmdStrobe (CC120X_SFTX);
    睡眠(0.4);
    }
    }
    
    


    但 SmartRF Studio 收到该消息、
    16:59:04.025 | 0001 | 03 04 05 06 07 08 09 0A 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1c 1D 55 |-29 CRC 错误


    存在 CRC 错误、原因是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于您收到额外的字节、我会假设长度字节错误