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**** 2539500 points
Other Parts Discussed in Thread: CC1200, CC1101

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/670184/cc1200-status-byte-reserved-bits

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

您好!

我有一些将 CC1200留在 TX 中的软件错误。 我应该注意的是、CC1200被配置为不发送前导码和同步字、并且在这个错误发生前、传输工作正常。

我只想问状态字节(3:0)中的保留位是什么、或者它们是否意味着您(TI)可以帮助我弄清发生了什么情况、以便我的 CC1200不发送消息、 因为当发生此错误时、状态字节为0x0F、因此这些位都为1。 在发生此错误之前,状态字节为0x00,所以我想看看这是否对您有任何意义,这样您就可以将 mi 放在我能理解我的错误的方向上,并希望能修复它:D.

我还没有深入探讨这个问题、因此我无法告诉您  MARC_STATUS1寄存器中的内容或类似内容。 我所知道的是,消息不会发送,对于开始,我想查看这些位是否能帮助我快速解决这个问题:D

 电源 无法在 NDI 下发布代码

此致、

Ugljesa  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为这些位的含义与 CC1101上的相同(请参阅 www.ti.com/.../cc1101.pdf 中的图23)

    根据经验、获得未记录的退货值的客户的软件或硬件中存在错误
    -这是定制板还是 EM?
    -您使用哪款 MCU?

    您写道:"我应该注意到 CC1200被配置为不发送前导码和同步字、并且在出现此错误之前传输正常。"
    -为什么不发送前导码/同步
    -您如何触发错误? 它是否随机出现? 是否发送命令?

    -由于您获得了未记录的状态,请检查您的 SPI 例程是否正常工作。
    -请参阅此主题 :e2e.ti.com/.../118780 ,其中有人与您有相同的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    定制板、我正在使用 MSP432。 我不发送前导码和同步,因为我正在发送智能前导码..

    我很奇怪是什么触发了这个错误、但我现在可以随时复制它。 因此、当我发送消息并且在发送当前消息后有条件发送另一个 Wright 时、会发生此错误。 但是、当我发送消息时、首先我空闲、然后进行监听、然后进入空闲状态、最后到达 TX。

    您在该文档中向我指出、 知道这些位表示我可以写入 TX FIFO 的字节数量、现在我怀疑出于某种原因、当我向 TXFIFO 发送128字节来填充它时、在发送初始化时、它会保持为空、因此我收到的中断较新(用于阈值) 这将重新填充 TX FIFO 或结束传输。 我假设该位为空、因为在突发写入128个字节后、发送 STX 后、我得到0x0F (Wright 到 TX FIFO 剩余15个或更多字节)、并且当它工作时、状态字节为0x00、因此 TX FIFO 已满。

    发送消息并连续发送两条消息时,我看不到有什么不同,我希望我从 TX 经过-> IDLE->SNiff->IDLE->TX 比平常更快,其中 c1220的监听时间更长,然后我转到 TX。 但在 TX 初始化之前、我进入空闲状态、 发送 SFTX 和 SFRX、然后相应地设置所有寄存器、执行 SCAL、然后填充 TX FIFO 并发送 STX。

    /*禁用同步字*/
    CC1200_SingleWrite (CC1200_ADDRESS_SYNC_CFG1,0x00);
    /*禁用前导码*/
    CC1200_SingleWrite (CC1200_ADDRESS_PREAMARE_CFG1、0x00);
    当 TX FIFO 下溢时、/*将 GPIO0置为有效*
    CC1200_SingleWrite (CC1200_ADDRESS_IOCFG0、0x05);
    当 TX FIFO 被清空到低于阈值时、/*将 GPIO2置为有效*/
    CC1200_SingleWrite (CC1200_ADDRESS_IOCFG2、0x02);
    /*配置无限数据包模式*/
    CC1200_SingleWrite (CC1200_ADDRESS_PKT_CFG0、0x40);
    /*禁用 CRC、附加状态和白化*/
    CC1200_SingleWrite (CC1200_ADDRESS_PKT_CFG1、0x00);
    
    /*将 FIFO 阈值设置为在 TX FIFO 降至127以下时生效- TX_FIFO_THR 字节*/
    CC1200_SingleWrite (CC1200_ADDRESS_FIFO_CFG、TX_FIFO_THR);
    
    CC1200_SendCommand (SCAL);
    while (CC1200_GetStatus ()!= CC1200_STATUS_IDLE);
    
    /*即使数据包较小、也要填充 TX FIFO 的整数*/
    CC1200_BurstWrite (tranBuffer、CC1200_ADDRESS_FIFO、FIFO_SIZE);
    
    /*检查在第一个中断之后将保留多少个字节*/
    if (packetLength <= USE_TXFIFO_Bytes)
    {
    cc1200_BytesLeft = 0;
    }
    其他
    {
    cc1200_bufferOffset = tranBuffer + FIFO_SIZE;
    cc1200_bytesLeft = packetLength - Available;TXFIFO_Bytes;
    
    CC1200_PrepareDMA (cc1200_bufferOffset、available _TXFIFO_bytes、cc1200_state);
    }
    
    /*启用和配置中断*/
    MAP_GPIO_interruptEdgeSelect (CC1200_GPIO_PORT、CC1200_GPIO0、GPIO_LOW_TO_HIGH_TRANSITION);
    MAP_GPIO_interruptEdgeSelect (CC1200_GPIO_PORT、CC1200_GPIO2、GPIO_HIGH_TO_LOW_TRANSITION);
    MAP_GPIO_clearInterruptFlag (CC1200_GPIO_PORT、CC1200_GPIO0 | CC1200_GPIO2);
    MAP_GPIO_enableInterrupt (CC1200_GPIO_PORT、CC1200_GPIO0 | CC1200_GPIO2);
    
    /*开始传输*/
    状态= CC1200_SendCommand (STX);
    
    退货状态; 

    编辑:在这个错误之后,我可以再次进行监听,下次发送也可以... 因此,写入 TX FIFO 确实有问题,我显然不会向 TX FIFO 写入任何内容,因此也不会进行更新的退出传输(我在这里谈论的是我在用于射频模块的 MCU 中的状态。 不知道此时 CC1200处于什么状态).. 我从未遇到过这种错误、因此在最近对智能前导码进行编码后、我会看到什么不同。 除了一些不同的寄存器配置之外、当我接收到时间戳数据包的 CRC 正常时、我还有 RX FIFO 的直接猝发读取:

    CC1200_BurstRead (timeStampBuffer、CC1200_address_FIFO、2);
    时间戳= timeStampBuffer[1];

    其中 CC1200_BurstRead 为:  

    CC1200_SelectModule ();
    
    //从起始地址进行猝发读取的命令字节*/
    CC1200_TransmitByte (staringAddress | CC1200_Read_burst);
    statusByte= CC1200_ReceiveByte (
    
    for (I = 0);<length; i++) { CC1200_TransmitByte(SNOP);
    
    
    outputBuffer[i]= CC1200_ReceiveByte ();
    }
    
    CC1200_DeselectModule (); 

     这是否会导致 TX FIFO 出现问题? 此外、在我使用 带有稳定寄存器的自动校准之前、现在我用 SCAL 手动校准、并且在接收到一个点我有 SWORST。 这是以前和现在的不同之处、以前我从未见过此错误。  

    但是、在发送消息之前、如果我在发送当前消息时有条件发送下一条消息、那么请勿查看导致这种情况的原因。 即使由于我在生成消息时使用一些共享变量而在某个位置进行数据竞速、我也看不出这是如何导致的、因为无论指针指向什么、填充 TX FIFO 都是完成的。 所以我最想的是 ,在发出指令指令之前,我必须等待一段时间,但我怀疑吗?

    EDIT2:在发送 Sidle 命令之前、在2ms 的延迟后、它没有该错误。 还尝试了1ms、然后又出现了。 因此、由于延迟为2ms、我不会遇到这个问题、但现在我的响应时间又增加了2ms。 您能否尝试发送 CC1200进行监听、然后快速发送到 TX 来重复此行为? 不知道转换的确切速度是多快,因为在进入监听(SWOR)后直接发送信号之前,有一些代码(周期)在48MHz 上执行。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "在发送 sidle 命令之前延迟了2ms 后、它没有该错误":您是否在您发布的代码中显示了正在发送 sidle 命令?

    您是否遵循了智能前导码的代码示例? 这可能听起来像是您在尝试让对讲机执行某项操作之前未检查对讲机是否处于给定状态。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    否、未显示。 该寄存器发生更改之前。

    CC1200_SendCommand (sidle);
    while (CC1200_GetStatus ()!= CC1200_STATUS_IDLE);
    CC1200_SendCommand (SFRX);
    CC1200_SendCommand (SFTX); 

    我怀疑我的状态是错误的。 你可以看到、我等到我的空闲状态结束后。 此外、在芯片就绪时、在每次 CS 下拉时、我都等到 SO 下拉时才显示。 另一件事是、当处于 TX/RX -下溢/中断溢出时、我会考虑 FIFO 错误、因此如果发生这种情况、我会刷新相应的 FIFO 缓冲区。

    这个问题只发生在我说过的那种情况下,下一条消息在发送另一条消息后发送 Wright,而我在发送 Wright 之后转到 Sniff 和 Wright 以便 IDLET->TX。  至少我认为是这样:D  

    如果您认为发送 SWOR 和设置 CS、 将 CS 拉至低电平并发送 sildle 后经过的时间没有问题  、那么我将尝试找出其他可能的问题原因。 此时、在发送侧消息之前等待2ms (可能会更短、因为我没有尝试1到2ms 之间的时间)、这样就消除了我的问题。

    编辑: 我更改了一点等待、而不是在发送 sidle 2ms 之前等待、我输入了在初始化监听之后启动的计时器、在 sidle 之前在 TX 初始化中、我检查计时器是否仍在运行以及是否等待通过。 如果计时器配置<=1ms、则会出现问题、如果 > 1和<1.3ms、则会返回状态字节0x0F、但在这种情况下、它会将一些字节放置在 TX_THR 之上、以便可以终止 TX、因为它在某个点下出现下溢或成功发送消息 (此时不确定、但我的 MCU 退出其 TX 状态并再次初始化监听)对于 配置为>=1.3ms 的计时器、没有问题。 我现在真的不知道这是为什么,但也许你们可以弄清楚它,或者它的一些大的巧合和问题是我的软件中的某个地方:D. 如果我发现它:D,我将发布它   

    此致。

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "发送 SWOR 并设置 CS、将 CS 拉低并发送侧讨论":是否完成了"当 CSn 拉低时、MCU 必须等到 CC120X、因此引脚变为低电平、然后才能开始传输标头字节。 这表明晶体是稳定的"。 当您选通 SWOR 时、芯片进入睡眠状态、这意味着您必须确保 xtal 再次启动。 另一种解决方法可能是一个问题。 xtal 是一种机械器件、这意味着在发送 SWOR 后不会立即停止摆动。 您可能需要从 SWOR 开始一段时间、直到可以再次启动以确保 xtal 不会仍然摆动。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,它是 CC1200_SelectModule()函数的一部分,在这里,在下拉 CS 之后,I 会一直等到 SO 也下降。
    是的、这可能是由于一些机械部件、我用最后一个解决方案解决了这个问题。
    谢谢。