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.

[参考译文] 如何以异步串行模式发送数据?

Guru**** 2595805 points
Other Parts Discussed in Thread: CC1101

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/957286/how-to-send-data-in-async-serial-mode

器件型号:CC1101

嘿、我要在异步串行模式下使用 CC1101发送数据。 在 TI SmartRF Studio 中、我为433.92MHz 和 ASK/OOK 调制生成了寄存器值

radio.writeSingleByte (defs.IOCFG2、0x0B)#GDO2输出引脚配置
radio.writeSingleByte (defs.IOCFG0、0x0C)#GDO0输出引脚配置
radio.writeSingleByte (defs.FIFOTHR、0x47)#RX FIFO 和 TX FIFO 阈值
radio.writeSingleByte (defs.PKTCTRL0、0x32)#数据包自动化控制
radio.writeSingleByte (defs.FSCTRL1、0x06)#Frequency Synthesizer Control
radio.writeSingleByte (defs.FREQ2、0x10)#Frequency Control Word、High Byte
radio.writeSingleByte (defs.FREQ1、0xB0)#频率控制字、中间字节
radio.writeSingleByte (defs.FREQ0、0x71)#Frequency Control Word、Low Byte
radio.writeSingleByte (defs.MDMCFG4、0xF5)#调制解调器配置
radio.writeSingleByte (defs.MDMCFG3、0x83)#调制解调器配置
radio.writeSingleByte (defs.MDMCFG2、0x30)#调制解调器配置
radio.writeSingleByte (defs.DEVIATN、0x15)#调制解调器偏差设置
radio.writeSingleByte (defs.MCSM0、0x18)#Main Radio Control State Machine Configuration
radio.writeSingleByte (defs.FOCCFG、0x16)#Frequency Offset Compensation Configuration
radio.writeSingleByte (defs.AGCCTRL0、0x92)#AGC 控制
radio.writeSingleByte (defs.WORCTRL、0xFB)#Wake on Radio Control
radio.writeSingleByte (defs.FREND0、0x11)#前端 TX 配置
radio.writeSingleByte (defs.FSCAL3、0xE9)#Frequency Synthesizer Calibration
radio.writeSingleByte (defs.FSCAL2、0x2A)#Frequency Synthesizer Calibration
radio.writeSingleByte (defs.FSCAL1、0x00)#Frequency Synthesizer Calibration
radio.writeSingleByte (defs.FSCAL0、0x1F)#Frequency Synthesizer Calibration
radio.writeSingleByte (defs.TEST2、0x81)#Various Test Settings
radio.writeSingleByte (defs.TEST1、0x35)#各种测试设置
radio.writeSingleByte (defs.TEST0、0x09)#各种测试设置 

按照中的理解、要在 TX 透明模式下发送、我需要切换连接到 GD0的引脚(GD0设置为输入)

因此、我将 INIT 和选通写入 TX

PA_TABLE =[0x00、0x60、0x00、0x00、0x00、0x00、0x00、0x00]
SPI = SPI (1、波特率= 1125000、极性= 0、相位= 0、位= 8、 firstbit=SPI.MSB、SCK=Pin (22)、mosi=Pin (23)、miso=Pin (21)

radio = CC1101.CC1101 (SPI=SPI)
radio.reset ()
setDefaultValues ()
radio.writeBurst







(defs.PATABABLE、PA_table) radio.sidle (radio.selfTest (radio.setTXState) radio.silot ("CC1101)输出:radio.selfTest)
PARTNUM 0x00
版本0x14
MARCSTATE 0x01 (空闲)
CC1101无线电初始化

PARTNUM 0x00
版本0x14
MARCSTATE 0x13 (TX)

接下来、我尝试发送数据、更改引脚的状态会连接到 GD0

DEF sendRawData (self、code1、Code2、PE):
代码1 =(代码1 << 16)+ 257 * urandom.getrandbits (8)
打印("0x%08X 0x%08X"%(代码1、代码2))
self._sendANMotors (code1、Code2、PE)
#ToDo:если не установлен 回调
#self.TX_CB (code1、Code2)如果 self.TX_CB 不是无、则为无
utime.sleep_ms (1000)
返回 True

DEF __sendANMotors (self、C1、C2、PE):
对于 J IN 范围(0、4):
#发送前导码为12位
对于 I IN 范围(0、12):
UTIME.SLEEP_US (PE)
self.gd0.on()
UTIME.SLEEP_US (PE)
self.gd0.off()
utime.sleep_us (PE * 10)

发送代码1
对于 I IN 范围(4 * 8、0、-1):
self._sendBit (C1 >>(I - 1)& 1、PE)

发送代码2.
对于 I IN 范围(4 * 8、0、-1):
self._sendBit (C2 >>(I - 1)& 1、PE)

#发送几位
self._sendBit (1、PE)
self._sendBit (1、PE)
utime.sleep_us (PE * 39)

默认_sendBit (self、b、PE):
如果 b =0:
self.gd0.on()#0
utime.sleep_us (PE * 2)
self.gd0.off()
UTIME.SLEEP_US (PE)
否则:
self.gd0.on()#1.
UTIME.SLEEP_US (PE)
self.gd0.off()
uttime.sleep_us (PE * 2)

sendRawData (0x2020、0x456AAA32、420) 

我的 RTL-SDR 不显示来自 CC1101的任何活动、我在哪里不对?

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

    您可以使用 SmartRF Studio 测试异步模式。 我刚刚测试了续 选择异步模式时的 RX 和 CONT TX。 在 TX 侧、我向 GDO0 (数据输入)输入方波、并使用逻辑分析仪监控接收器上的 GDO0 (数据输出)。

    我能够在接收器上看到方波。

    BR

    Siri

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

    我的配置是否正常? 我是否正确切换 GD0引脚以传输数据?

    设置 CC1101时、我的订单是否正确?

    PA_TABLE =[0x00、0x60、0x00、0x00、0x00、0x00、0x00]
    
    radio = CC1101.CC1101 (SPI=SPI)
    radio.reset ()
    setDefaultValues ()
    radio.writeBurst (defs.PATABLE、PA_table)
    radio.sidle (
    radio.setTXState (
    radio.selfTest () radio.writeBurst (defs.padle)
    radio 0x420) radio rundle、rundle 0x2020 (
    
    radio.setTXState a) radio) radio rundle 0x420 (a)、rundle rundle 0x420 (a)、rundle rundle rundle randle 

    正如我了解到的、传输功率的 PA_TABLE 响应、对吧?

    遗憾的是、我无法测试 CONT。 SmartRF Studio 中的 TX、原因我使用自己的定制板、但我可以使用逻辑分析仪测试 GD0 (在电路板上初始化为输出)

    UPD

     


    我使用逻辑分析仪检查了 GD0引脚、脉冲是正确的

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

    你(们)好

    除了 FOCCFG 寄存器外、您的设置是根据 SmartRF Studio 进行的(Studio 将其设置为0x14、您使用0x16、为什么?)

    我不理解我们在您发送的图中看到的内容。 这是您的发送器还是接收器上的 GDO0?

    您是否在正常模式下测试了电路板、以确保您的硬件正常。

    尝试制作一个简单示例、在其中执行以下操作(使用正常数据包格式/FIFO 模式的 SmartRF Studio 中的 OOK 设置)

    TX

    • 初始化 MCU
    • 重置无线电
    • 配置无线电(写入寄存器和 PATABLE)
    • 将数据包写入 FIFO:5、1、2、3、4、 5.
    • 选通 STX

    RX

    • 初始化 MCU
    • 重置无线电
    • 配置无线电(写入寄存器和 PATABLE)
    • 选通 RTX
    • 等待 GDO0变为高电平(接收到同步)、然后变为低电平(接收到数据包)
    • 读取 RXFIFO

    如果接收器上的 GDO0信号(IOCFG0 = 0x06)没有发生任何变化、则需要查看您的硬件设计。

    BR

    Siri

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

    感谢您的回复!

    我尝试在正常模式下发送数据

    pa_table =[0x00、0x12、0x0e、0x34、0x60、0xc5、0xc1、0xc0]
    SPI = SPI (1、波特率= 4000000、极性= 0、相位= 0、位= 8、 firstbit=spi.msb、sck=Pin (22)、mosi=Pin (23)、miso=Pin (21)
    
    ) utime.sleep (2)
    
    radio = CC1101.CC1101 (SPI=SPI、gd0=18)
    radio.reset ()
    setPacketValues ()
    radio.writele (def (
    
    radio.selfTest
    
    radio.setTXState) radio (defs.able1)(
    
    radio.sendPacketData([5,1,2,3,5]
    
    
    radio.setTXState) tleep circle (radio.selfTest)(cirtle)、union (cirtle)() 

    但我的接收器侧没有任何东西。

    我的配置是

    radio.writeSingleByte (defs.IOCFG0、0x06)#GDO0输出引脚配置
    radio.writeSingleByte (defs.FIFOTHR、0x47)#RX FIFO 和 TX FIFO 阈值
    radio.writeSingleByte (defs.PKTCTRL0、0x05)#数据包自动化控制
    radio.writeSingleByte (defs.FSCTRL1、0x06)#Frequency Synthesizer Control
    radio.writeSingleByte (defs.FREQ2、0x10)#Frequency Control Word、High Byte
    radio.writeSingleByte (defs.FREQ1、0xB0)#频率控制字、中间字节
    radio.writeSingleByte (defs.FREQ0、0x71)#Frequency Control Word、Low Byte
    radio.writeSingleByte (defs.MDMCFG4、0xF5)#调制解调器配置
    radio.writeSingleByte (defs.MDMCFG3、0x83)#调制解调器配置
    radio.writeSingleByte (defs.MDMCFG2、0x33)#调制解调器配置
    radio.writeSingleByte (defs.DEVIATN、0x15)#调制解调器偏差设置
    radio.writeSingleByte (defs.MCSM0、0x18)#Main Radio Control State Machine Configuration
    radio.writeSingleByte (defs.FOCCFG、0x14)#Frequency Offset Compensation Configuration
    radio.writeSingleByte (defs.AGCCTRL0、0x92)#AGC 控制
    radio.writeSingleByte (defs.WORCTRL、0xFB)#Wake on Radio Control
    radio.writeSingleByte (defs.FREND0、0x11)#前端 TX 配置
    radio.writeSingleByte (defs.FSCAL3、0xE9)#Frequency Synthesizer Calibration
    radio.writeSingleByte (defs.FSCAL2、0x2A)#Frequency Synthesizer Calibration
    radio.writeSingleByte (defs.FSCAL1、0x00)#Frequency Synthesizer Calibration
    radio.writeSingleByte (defs.FSCAL0、0x1F)#Frequency Synthesizer Calibration
    radio.writeSingleByte (defs.TEST2、0x81)#Various Test Settings
    radio.writeSingleByte (defs.TEST1、0x35)#各种测试设置
    radio.writeSingleByte (defs.TEST0、0x09)#各种测试设置 

    那么、似乎是硬件问题、如果我可以读取 CC1101的器件型号和版本、这是否意味着芯片工作正常?

    我没有焊接天线、因为我之前的 PCB 在30~40cm 的薄空间内工作正常。 它是否会影响传输?

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

    通常、您应该能够在没有天线的情况下进行超过30cm 的通信、但 接收到的信号将具有低 RSSI。  

    如果您使用的是硬件、则尚未完全验证、我将使用天线和/或进行传导测量。  

    理想情况下、您应该测试您的硬件是否与已知良好的软件(SmartRF Studio)一起工作、并在此开始测试软件后提供较少的未知数量。  

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

    谢谢!

    焊接天线、但在空气中仍然没有任何东西。 我测试了所有连接、没有未路由的布线。 我使用的是来自的所有无源组件、因此、晶体可能存在问题? 我使用 NDK-NX3225GA-26MHz-EXS00A、根据其 DS、负载电容器 CL = 10pF、因此我需要使用15pF 的负载电容器、我的 PCB 使用27pF。 我是否需要更改它们?

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

    您是否可以访问 CCDebugger?  

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

    只需对您的代码进行一些注释即可。

    为什么要向 PA 表写入2个以上的值?

    您是否有逻辑分析仪、以便确认您的 SPI 访问是否符合规格?

    Siri

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

    否、但我发现我错误地放置了晶体 NDK-NX3225GA-26MHz、并且晶体的引脚连接到 GND。 我修复了它、可能会发送一些东西、需要进行检查

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

    在软件中、您应该等到 SO 变为低电平、然后再执行任何其他操作(请参阅数据表)。 这是否意味着您对此没有任何检查?  

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

    我在做一些事情之前等待了几秒钟、我认为 MISO 变低就够了。 改变晶振的方向不会产生任何效果。 我将尝试将这个设置为接收器、以确保硬件正常或不正常

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

    请确认这实际上是低电平。 同时监视 SPI 接口流量并验证流量是否与数据表中定义的一致。

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

    好的、但是如果我使用异步方式传输数据、我不需要 SPI、而只需要配置寄存器和可执行模式。 我可以读回我的寄存器、它们具有我设置的值、这意味着 SPI 工作正常

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

    并发送命令选通信号、STX?  

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

    是的、我发送 STROBE STX 并等待2秒钟、考虑到这段时间 MISO 变为低电平、但我将使用逻辑分析仪检查 SPI、如何告知 CC1101我的异步 TX 即将结束? 发送选通信号空闲是否足够、之后是否需要清空 TX FIFO?

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

    -将代码更改为等待如此低的值。 等待2秒毫无意义。 使用逻辑分析仪检查最重要的一点是、它实际上会变为低电平。  

    -您使用异步模式,也就是说,所有与数据包相关的功能都将被禁用。 因此 TX FIFO 未被使用。

    -是的、Sidle 退出 TX 状态并进入空闲状态。