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.

[参考译文] CC1200EMK-868-930:读/写奇数行为

Guru**** 2560390 points
Other Parts Discussed in Thread: C2000WARE, CC1200

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/728711/cc1200emk-868-930-read-write-odd-behaviour

器件型号:CC1200EMK-868-930
主题中讨论的其他器件:C2000WARECC1200

您好!
我将 F28379D 与 CC1200EMK 配合使用。 从单个(非扩展)寄存器读取和写入的行为似乎是奇数的。 例如、当我读取/写入 IOCFG3时、0x01、0x06和0x03有效、但0x02和0x04失败。 此外、当我使用其他寄存器尝试此操作时、有时会失败。 我将在下面发布两个示例、其中一个是 IOCFG3寄存器、另一个是通道 BW 寄存器。

我当前的流程是:  

拉低 CSn、等待 MISO 变为高电平、延迟0.5us、开始传输。 写入地址。 完成后、从地址读取。  

一些其他信息:我将 C2000Ware Driverlib 用于 SPI。 4MHz 时钟速度。 SPIA_LOW 和 SPIA_HIGH 等用于 CC1200的 CS_n 的外部 GPIO。

这两个测试返回的状态为0x60。

代码: (ICOFG3)

while (final_value!= 0x03)//使用中断点重复此操作 
{ SPIA_LOW; SPIA_WAIT; DEVICE_DELAY_US (1); //写入地址 SPI_writeDataBlockingNonFIFO (Current_BASE、0x0000);// IOCFG3 DEVICE_DELAY_US (0.5);//延迟 SPI_writeDataBlockingNonFIFO (Current_BASE、0x02<<8); //从地址读取 DEVICE_DELAY_US (1); SPI_writeDataBlockingNonFIFO (CURRENT_BASE、0x80<<8); WRITE_RETURE_VALUE = SPI_READDataNonBlocking (CURRENT_BASE); DEVICE_DELAY_US (0.5); WRITE_RETURE_VALUE = SPI_READDataNonBlocking (CURRENT_BASE); //发送虚拟字节 SPI_writeDataBlockingNonFIFO (Current_BASE、0xFF<8); DEVICE_DELAY_US (0.5); Bear_final_value = SPI_readDataNonBlocking (CURRENT_BASE); DEVICE_DELAY_US (0.5); final_value = SPI_readDataNonBlocking (CURRENT_BASE); SPIA_HIGH; DEVICE_DELAY_US (10); }

另一个使用 CHANBW 寄存器的示例、该代码返回0xF7

while (final_value!= 0x03){

SPIA_LOW;
SPIA_WAIT;
DEVICE_DELAY_US (1);

//写入地址

SPI_writeDataBlockingNonFIFO (Current_BASE、(CC120X_CHAN_BW | CC1200_WRITE_BIT)<< 8);// IOCFG3
DEVICE_DELAY_US (0.5);//延迟
SPI_writeDataBlockingNonFIFO (Current_BASE、0xA6<8);

//从地址读取
DEVICE_DELAY_US (1);
SPI_writeDataBlockingNonFIFO (Current_BASE、(CC120X_CHAN_BW | CC1200_READ_BIT)<<8);
WRITE_RETURE_VALUE = SPI_READDataNonBlocking (CURRENT_BASE);
DEVICE_DELAY_US (0.5);
WRITE_RETURE_VALUE = SPI_READDataNonBlocking (CURRENT_BASE);

//发送虚拟字节

SPI_writeDataBlockingNonFIFO (Current_BASE、0xFF<8);
DEVICE_DELAY_US (0.5);
Bear_final_value = SPI_readDataNonBlocking (CURRENT_BASE);
DEVICE_DELAY_US (0.5);
final_value = SPI_readDataNonBlocking (CURRENT_BASE);

SPIA_HIGH;
DEVICE_DELAY_US (10);
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不可能仅仅通过查看代码来弄清什么是错误的、因为我不知道代码是否在执行它所期望的操作。 您能不能查看您的 SPI 通信图(全部4条 SPI 线路)、我可以查看它们以尝试了解正在发生的情况。
    我假设这是一个错别字、你说你将 CSn 拉低、然后等待 MISO 变为高电平。 MISO 应在开始传输之前变为低电平。

    BR

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

    我目前无法访问探头、但上次几天前我检查它时、它按预期工作。 MOSI 显示按预期发送的数据、MISO 中返回的数据与缓冲区中的读操作相同。

    是否有方法在不使用探针的情况下通过 CCS 生成图?

    此外、您还可以将其更正为拼写错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我设法解决了这个问题。 SPI 配置为在上升沿工作、但在毫不延迟地将其切换到下降沿时、工作正常。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴你能解决这个问题:-)