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.

[参考译文] CC1111EMK868-915:无法使用 CC1111 USB 软件狗捕获 Itron ERT 燃气表100G DLN 数据

Guru**** 633105 points
Other Parts Discussed in Thread: CC-DEBUGGER, CC1101, SIMPLICITI
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1092085/cc1111emk868-915-not-able-to-capture-the-itron-ert-gas-meter-100g-dln-data-using-cc1111-usb-dongle

器件型号:

我们使用2个 CC1111 USB 软件狗和 CC-Debugger,带有 Itron 的 ERT 燃气表(ITRON 100G DLN 燃气表)

要求:我们需要使用 CC1111 USB 软件狗从 ERT 燃气表捕获数据包数据 SCM/IDM/SCM+数据。

测试场景:

1我们有2组加密狗+ CC 调试器+燃气表

  • 已在868/915频率设置上使用 CC 调试器配置两个加密狗
  • 燃气表会定期发送数据、我们可以在  智能数据包监听器上处于接收模式(Rx 模式)的器件上的某个固定频率范围(902-928、以实现最大捕获)捕获数据。 我们将按预期捕获 CRC 错误的数据包、即 FCS 数据包列未显示"确定"、但 它在数据包监听器上显示 ERR
    • 请指导我们需要做什么才能使正在传输的器件发送的实际标头正常、并且 CRC 正常
    • 即使我们已经尝试使用 CC1111 USB 软件狗上的自定义代码捕获数据、但仍然可以获得 length+payload+CRC
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    为了告诉您如何配置接收器、我们需要知道正在传输的数据包格式。

    Siri

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

    感谢您的快速回复。 Siri,问题是我们不是 ERT 燃气表通信的确切格式,我们的信息非常有限,因为 Itron 燃气表没有提供太多详细信息。可用的信息 编码器接收器发送器- Wikipedia

    请提供指导

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

    请提供指导

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

    CC1111不支持您提到的数据包格式。

    CC1111支持的 CRC 为 x^16 + x^15 + x^2 + 1 (0x8005)、初始化为0xFFFF。

    对于 IDM 数据包、您可以尝试使用设置为0x16A3的16位同步字、使用固定数据包长度(不确定应将长度设置为什么以确保接收到所有内容)、然后禁用 CRC。

    为了能够监控 CC1111接收到的数据、您可以将其配置为异步串行模式。

    然后、您必须编写自己的代码、并且无法使用 Studio 或数据包监听器。

    有关详细信息、请参阅 https://www.ti.com/lit/swra316

    Siri

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

    感谢您的快速回复。 我将尝试执行类似操作  

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

    你(们)好、Siri

    请在以下3个问题中帮助我:

    1我们是否能够在 Smart RF Studio 的 Tx/Rx 模式下传递自己的前导码和同步字节7。 因为当我们尝试使用 SmartStudio 时、它们显示为只读。

    2 CC1111与 CC1101之间的任何主要差异。 根据 Wiki https://en.wikipedia.org/wiki/Encoder_receiver_transmitter 、其在实施部分中明确提到 CC1101非常支持 ERT、但未提及 CC1111。 您可能会有所帮助

    3.我在 IAR 8051 Workbench 上运行一个具有定制代码 CC1111和 cc 调试器的软件狗。 如果我想从具有修改前导码的智能工作室发送一些自定义数据包、可以发送、以便在 IAR 所连接的软件狗上捕获数据包

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

    你(们)好、Siri  

    请提供指导

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

    1)  

    无法对序言进行编程。 同步字可通过 SYNC1和 SYNC0以及 MDMCFG2.SYNC_MODE 进行编程、并可在 SmartRF Studio 中进行编程。 不确定为什么您说它们是只读的

    2)

    从无线电角度来看、CC1111和 CC1101具有相同的功能

    3)

    正如我在1中回答的那样)不可能对序言进行编程。

    要从 SmartRF Studio 发送自定义数据包、您需要禁用前导码和同步(SYNC_MODE = 0)、使用固定数据包长度模式(PKTCTRL0.LENGTH_CONFIG = 0)并设置要在 PKTLEN 寄存器中发送的字节数。 您还需要关闭 CRC。

    Siri

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

    1)需要指导1)我已经按照前面讨论的那样、在 SmartRF Studio 中设置了 ERT 的 SCM 类型数据包中的 SYNC1=0x2A SYNC0=60字节。

    字段 长度(位) 默认值 注释
    SYNC 位 1 1
    序言 20. 0xF2A60

    根据我的理解,当数据包的前导码/同步匹配时,只有使用 CC1111软件狗的 Studio 将捕获该数据,除与 SYNC1 SYNC0匹配外,其他数据将被绕过。 我使用 了具有固定长度的"16/16前导码/同步字位"

    但我不认为这种情况起作用、因为我的器件也会捕获其他不需要的数据包。 如果我做了一些错误、请提供指导。

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

    当只使用一个16位同步字时、除了 实际同步字之外、拾取噪声的可能性也会增加。 这就是我们在 CC1101和 CC1111上建议使用4字节同步字而不仅仅是2字节的原因。 另一个问题是前导码之前只有5位、我们建议对讲机将使用4字节前导码进行位同步等

    BR

    Siri

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

    另一件事。

    您写道发送的数据是曼彻斯特编码。 这意味着、当发送器发送1 + F2A60时、在空中发送的内容实际上是10 + AA59996955。

    然后、您可以尝试不在接收器端使用曼彻斯特、并查找6955作为同步字。 在这种情况下、您将在作为前导码的同步字之前至少有3个字节。

    Siri

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

    感谢 Siri 的更新

    更多问题:

    1)如果我们需要32位同步字和32位前导码,那么我们需要在其中设置它,也就是我们需要在哪些寄存器中设置它,以便我们可以在 studio 上测试相同的内容。 根据我的理解、只有两个寄存器可用于同步0/SYNC1、否则没有其他寄存器可用。

    2) 2)我们是否有一些开源代码或类似代码可用于 CC1111或类似代码、以捕获我们可以根据要求修改的数据。

    我们针对每种测试场景尝试了 SWRC085B。 如果有类似的代码、这将是一个很好的帮助。

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

    如前所述、在 TX 端、可以发送所需内容、方法是关闭前导码和同步、使用固定长度并关闭 CRC、然后将要发送的所有数据写入 RFD 寄存器。

    在 RX 端、您无法对前导码进行编程。 接收器只是需要发送器在同步字之前传输一些内容、以实现位同步等。即使这是最好的前导码、也不必为0x55...。

    为了获得数据表中灵敏度的数字、您需要具有与我们建议的给定 PHY 相同数量的前导码字节。 对于大多数情况、这意味着4个字节的0x55或0xAA。 这并不意味着您无法接收任何具有较短前导码或前导码不是101...序列的内容。 这只意味着性能很可能会较差。

    除了您在 CC1111产品页面上找到的示例、我们没有其他示例、但 E2E 上有一些示例代码可用作参考。

    e2e.ti.com/.../3513.CC1110.rar

    e2e.ti.com/.../1638.Example.zip

    Siri

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

    @Siri

    如果我们可以通过任何方式查看使用自定义代码运行的 CC1111 USB 软件狗的前导码和同步字是什么、请提供指南。  中必须有一种方法

    1调试模式、使用 CC 调试器或

    2在 IAR 8051工作平台中使用手表或

    3在某个时间点读取一些寄存器值

    因为我们完全卡在使用 CC1111 USB 软件狗读取 ITRON 的100G DLN 燃气表数据时所面临的问题中。 请帮助。

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

    请参阅以下应用手册、了解如何将 CC1111配置为异步串行模式。 这在调试中非常有用、可以查看 CC1111接收到的数据:

    https://www.ti.com/lit/swra316

    Siri

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

    请原谅我一再重复提出同样的问题。 实际上,我尝试在 CC1111 USB 软件狗与 CC-调试器连接的情况下启用异步模式,但我不了解如何在连接到调试器时使用示波器检查其数据。

    如 https://www.ti.com/lit/swra316 pdf 的捕获异步数据伪代码中所述

    """接收到的数据可以通过将示波器连接到// P1_6进行监控、也可以通过在(1){"时读取 P1.P1[6]在 SW 中读取

    1)、因为在连接到 cc 调试器时、我们无法将 P1_6 (CC1111加密狗调试连接器引脚的)上的示波器连接到 USB 加密狗(如果我不正确)。 就像 我们删除 CC 调试器一样、我们不确定转换器是否正常工作。

    2)或软件 P1.P1[6]准备就绪表示?? 如何使用代码读取数据。

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

    您好@Siri 请告诉您前导码+sync 是否也在 CC1111 USB 软件狗中进行菜单化/解码

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

    CC1111对前导码、同步、有效载荷和 CRC 进行曼彻斯特编码

    Siri

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

    我不明白为什么您无法监控 P1_6引脚。 您不需要连接调试器。

    将您的代码下载到软件狗、然后在没有调试器的情况下启动代码。 这样、您至少可以看到器件接收到的数据。

    我在 CC1111软件狗上测试了以下代码。 我使用了 SmartRF Studio 的默认38.4kbps 设置。  

    我还在引脚上输出 CS、以便更轻松地在数据流中查找数据包。

    我从另一个器件发送了以下内容:4字节前导码、4字节同步(设置为0x55以便于此测试识别)、4字节有效载荷(0x01、0x02、0x03、0xAA)、无 CRC。

    监控 GPIO 的结果如下:

    以下代码:

    int main(void)
    {
        SLEEP &= ~SLEEP_OSC_PD;
        while( !(SLEEP & SLEEP_XOSC_S) );
        CLKCON = (CLKCON & ~(CLKCON_CLKSPD | CLKCON_OSC)) | CLKSPD_DIV_1;
        while (CLKCON & CLKCON_OSC);
        SLEEP |= SLEEP_OSC_PD;
    
        PKTCTRL1    = 0xE5;
        PKTCTRL0    = 0x32;
        FSCTRL1     = 0x06;
        FREQ2       = 0x24;
        FREQ1       = 0x2D;
        FREQ0       = 0xDD;
        MDMCFG4     = 0xCA;
        MDMCFG3     = 0xA3;
        MDMCFG2     = 0x10;
        MDMCFG1     = 0x23;
        MDMCFG0     = 0x11;
        DEVIATN     = 0x36;
        MCSM0       = 0x18;
        FOCCFG      = 0x16;
        AGCCTRL2    = 0x43;
        FSCAL3      = 0xE9;
        FSCAL2      = 0x2A;
        FSCAL1      = 0x00;
        FSCAL0      = 0x1F;
        TEST2       = 0x81;
        TEST1       = 0x35;
        TEST0       = 0x09;
        PA_TABLE0   = 0x50;
      
        IOCFG1      = 0x0D; // Serial Data Output
        IOCFG2      = 0x0E; // CS
    
        // Put radio in RX
        RFST = RFST_SRX;
       
        while (1);
    }
    

    Siri

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

    感谢您的详细回应。 我得到了你的观点,我也会在我的最后尝试同样的。

    我正在使用此链路 bemasher/rtlamr:一个 RTL-SDR 接收器、用于在900MHz ISM 频带下运行的 Itron ERT 兼容智能仪表。 (github.com) 与 基于 DVB-T+DAB+FM"" RTL2832的 DVB-T 接收器配合使用的代码、

    使用 Bemasher/rtlamr 代码:我们购买了一个加密狗 DVB-T+DAB+FM""基于 RTL2832的 DVB-T 接收器、

    我们运行 rtl_tcp.exe、该软件狗使用该软件狗开始侦听在 ISM 范围内设置的特定频率上的数据、例如912600155。
    在另一端、我们运行的是 rtlamr.exe、它最终捕获由 RTL_TCP 托管的数据包、并解析、解码和打印相同的数据包。

    14:44:22.684819解码。GO:46         blocksize is4096

    14:44:22.684819解码。Go:46:CenterFreq:912600155

    14:44:22.686013解码。GO:47:SampleRate:2359296

    14:44:22.686013解码。GO:48:数据速率:32768

    14:44:22.686013解码。GO:49:ChipLength:72

    14:44:22.686013解码。GO:50:前置符号:21

    14:44:22.686013解码。Go:51:前置长度:3024

    14:44:22.686013解码器。Go:52:封装符号:96

    14:44:22.686013解码。GO:53:封装长度:13824

    14:44:22.686013解码。GO:60:协议:SCM

    14:44:22.686013解码。GO:61:前导码:111110010101001100000

    14:44:22.686013 main.go:121:GainCount:29


    最后、我们能够从 ERT 燃气表获取一些 SCM 数据包。

    {time:2022-04-18T18:30:55.628 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}
    {time:2022-04-18T18:31:10.126 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}
    {time:2022-04-18T18:31:25.125 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}
    {time:2022-04-18T18:32:09.675 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}
    {time:2022-04-18T18:32:39.671 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}
    {time:2022-04-18T18:33:25.667 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}
    {time:2022-04-18T18:34:39.663 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}
    {time:2022-04-18T18:35:55.433 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}
    {time:2022-04-18T18:36:10.156 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}
    {time:2022-04-18T18:36:40.154 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}
    {time:2022-04-18T18:37:40.155 SCM:{ID:57753518 Type:12 Tamper:{PHY:03 Enc:00}功耗:389346 CRC:0x6049}}

    我以十六进制和 位映射了接收到的数据、如下所示

    1111100101010011000001100011000000000101110101001110011100100011100011100111111101110111001111110011

    [249 83 6 48 5 244 228 113 63 174 79 243]}

    [ F95306 B0 05 F1 A0 --71 3F AE -- C9 4E]

    在对收到的数据进行调试时、我发现了使用以下代码量化的原始信号->

     
    // Matched filter for Manchester coded signals. Output signal's sign at each
    // sample determines the bit-value due to Manchester symbol odd symmetry.
    func (d Decoder) Filter(input []float64, output []byte) {
    	// Computing the *** summation over the signal simplifies
    	// filtering to the difference of a pair of subtractions.
    	//fmt.Print("byte array is", output)
    	var sum float64
    	for idx, v := range input {
    
    		sum += v
    		d.csum[idx+1] = sum
    		//fmt.Print(d.csum, v)
    
    	}
    
    	// Filter result is difference of summation of lower and upper chips.
    	lower := d.csum[d.Cfg.ChipLength:]
    	upper := d.csum[d.Cfg.SymbolLength:]
    	for idx, l := range lower[:len(output)] {
    		f := (l - d.csum[idx]) - (upper[idx] - l)
    		output[idx] = 1 - byte(math.Float64bits(f)>>63)
    
    	}
    	return
    }
    

    当此量化数据可用于前导码检查等之后,我将获得先前打印的所需数据

    我捕获的原始信号正被量化:
    e2e.ti.com/.../raw.txt

    查询:1.
    如果我们能够理解这个原始数据包、则意味着正在传入的数据包正在进行 manchestor 解码(根据我的理解)、以便我们能够了解在 CC1111中实际接收到的数据包
    因此、序言和其他内容更容易理解。
    2解码原始数据包。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好  

    请提供指导

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

    你(们)好

    我不熟悉您所指的代码、因为这不是由 TI 制造/或支持的。

    老实说,我甚至不能肯定我知道你希望我们做什么。

    我们可以提供以下支持:

    如果您按照上一篇文章中的说明将器件设置为串行模式、并且能够识别 GPIO 上观察到的数据流中的数据包、我们可以看到是否可以对 CC1111数据包引擎进行编程以查找/检测此数据包。

    BR

    Siri

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

    好的、我将告诉您串行模式测试输出。 感谢您的支持。

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

    我尝试使用建议的代码执行建议的测试,但我需要了解此逻辑分析仪上的板(在我们的案例中为 Salae)需要设置的波特率设置、Perity 位等。

    如上所示、右侧的"Async serial (异步串行)"选项卡的设置

    位速率/波特率/奇偶校验等设置我们需要做什么?

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

    不确定我是否理解您要做的事情。 我假设您的逻辑分析仪不支持 ERT 协议、因此您只需手动查看数据即可找到您认为发送器正在传输的数据。 无线电上的异步串行模式不使用开始/停止/奇偶校验位等。它只显示从空中进入解调器的原始数据。 如我在图中所示、您应该将 CS 输出到引脚、以便更轻松地区分噪声和实际数据。 如果载波侦听阈值设置得足够高、则 CS 信号仅在发送器正在传输时有效、而不是仅在接收到噪声时有效。 当然、对讲机必须按照正确的数据速率等进行编程、方法与您尝试使用内置数据包引擎接收数据包时所用的方法相同。

    Siri

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

    您好、Siri、

    /*------------------------------------------------------------------------------
    |   File:      CC1111_RX.c
    |   Target:    cc1111
    | 
    +-------------------------------------------------------------------------------
    |  Copyright 2004-2007 Texas Instruments Incorporated. All rights reserved.
    |
    |  IMPORTANT: Your use of this Software is limited to those specific rights
    |  granted under the terms of a software license agreement between the user who
    |  downloaded the software, his/her employer (which must be your employer) and
    |  Texas Instruments Incorporated (the "License"). You may not use this Software
    |  unless you agree to abide by the terms of the License. The License limits
    |  your use, and you acknowledge, that the Software may not be modified, copied
    |  or distributed unless embedded on a Texas Instruments microcontroller or used
    |  solely and exclusively in conjunction with a Texas Instruments radio
    |  frequency transceiver, which is integrated into your product. Other than for
    |  the foregoing purpose, you may not use, reproduce, copy, prepare derivative
    |  works of, modify, distribute, perform, display or sell this Software and/or
    |  its documentation for any purpose.
    |
    |  YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
    |  PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
    |  INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
    |  NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
    |  TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
    |  NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
    |  LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING
    |  BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
    |  CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
    |  SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
    |  (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
    |
    |  Should you have any questions regarding your right to use this Software,
    |  contact Texas Instruments Incorporated at www.TI.com.
    |
    +-------------------------------------------------------------------------------
    | Purpose:
    +-------------------------------------------------------------------------------
    | Decription:
    +-----------------------------------------------------------------------------*/
    
    /*==== DECLARATION CONTROL ===================================================*/
    
    
    /*==== INCLUDES ==============================================================*/
    #include "hal_main.h"
    #include "dma.h"
    #include "hal_power_clk_mgmt.h"
    #include<stdio.H>
    
    /*==== DEFINES  ==============================================================*/
    #define CLKCON_26_MHZ_XOSC  0x80
    
    #define DMAIF_0             0x01 // DMA channel 0 interrupt flag in the DMAIRQ register
    
    // Strobe commands for the RFST register
    #define STROBE_RX           0x02 
    #define STROBE_IDLE         0x04
    
    #define N                   5
    
    
    /*==== GLOBAL VARS============================================================*/
    BYTE __xdata rxBuffer[N + 3];
    static UINT8  packetReceived = FALSE;
    
    __xdata DMA_DESC dmaConfigRX;  // Struct for the DMA configuration
    
    
    /*******************************************************************************
    * @fn  main
    *
    * @brief
    *      Main function. 
    *
    * Parameters:
    *
    * @param  void
    *
    * @return void
    *
    *******************************************************************************/
    void main(void) {
      
      // Choose the crystal oscillator as the system clock and set 
      // system clock speed = fRef (fxosc)
      CLKCON &= ~OSC_BIT;           // request switch to crystal oscillator
      while (CLKCON & OSC_BIT);     // wait until the clock switch has occured (=stable)
      SLEEP |= OSC_PD_BIT;          // power down unused oscillator
      
      P1DIR |= 0x02;
      
      // Sync word qualifier mode = 30/32 sync word bits detected 
      // Channel spacing = 199.951172 
      // Data rate = 249.756 
      // RX filter BW = 600.000000 
      // PA ramping = false 
      // Preamble count = 4 
      // Whitening = false 
      // Address config = No address check 
      // Carrier frequency = 868.299683 
      // Device address = 0 
      // TX power = 0 
      // Manchester enable = false 
      // CRC enable = true 
      // Deviation = 128.906250 
      // Packet length mode = Variable packet length mode. Packet length configured by the first byte after sync word 
      // Packet length = 255 
      // Modulation format = GFSK 
      // Base frequency = 868.299683 
      // Modulated = true 
      // Channel number = 0 
      //SYNC0 = 0x55;
     // SYNC1 = 0x55;
      PKTCTRL1 = 0xE4;
      PKTCTRL0   = 0x32;
      FSCTRL1    = 0x06;
      FREQ2      = 0x25;
      FREQ1      = 0xeD;
      FREQ0      = 0xDD;
      MDMCFG4    = 0xca;
      MDMCFG3    = 0xa3;
      MDMCFG2    = 0x10;
      MDMCFG1    = 0x23;
      MDMCFG0    = 0x11;
      DEVIATN    = 0x36;
      MCSM0      = 0x18;
      FOCCFG     = 0x16;
      BSCFG      = 0x6C;
      AGCCTRL2   = 0x43;
      AGCCTRL1   = 0x40;
      AGCCTRL0   = 0x91;
      FREND1     = 0x56;
      FSCAL3     = 0xE9;
      FSCAL2     = 0x2A;
      FSCAL1     = 0x00;
      FSCAL0     = 0x1F;
      TEST2 = 0x81;
      TEST1      = 0x35;
      TEST0      = 0x09;
      PA_TABLE0  = 0x50;
      IOCFG0    = 0x0d;
      IOCFG1     = 0x0E;
      PKTLEN     = N;
      
      // Setup the DMA for RX
      SET_WORD(dmaConfigRX.SRCADDRH, dmaConfigRX.SRCADDRL, &X_RFD);
      SET_WORD(dmaConfigRX.DESTADDRH, dmaConfigRX.DESTADDRL, rxBuffer);
      dmaConfigRX.VLEN      = DMA_VLEN_FIRST_BYTE_P_3;
      SET_WORD(dmaConfigRX.LENH, dmaConfigRX.LENL, N + 1);
      dmaConfigRX.WORDSIZE  = DMA_WORDSIZE_BYTE;
      dmaConfigRX.TRIG      = DMA_TRIG_RADIO;
      dmaConfigRX.TMODE     = DMA_TMODE_SINGLE;
      dmaConfigRX.SRCINC    = DMA_SRCINC_0;
      dmaConfigRX.DESTINC   = DMA_DESTINC_1;
      dmaConfigRX.IRQMASK   = DMA_IRQMASK_ENABLE;
      dmaConfigRX.M8        = DMA_M8_USE_8_BITS;
      dmaConfigRX.PRIORITY  = DMA_PRI_HIGH;
      SET_WORD(DMA0CFGH, DMA0CFGL, &dmaConfigRX);
      
      // 1. Clear interrupt flags
      // For pulsed or edge shaped interrupt sources one should clear the CPU 
      // interrupt flag prior to clearing the module interrupt flag
      DMAIF = 0; 
      DMAIRQ &= ~DMAIF_0;
        
      // 2. Set individual interrupt enable bit in the peripherals SFR, if any
      // No flag for the DMA (Set in the DMA struct (IRQMASK = 1))
                        
      // 3. Set the corresponding individual, interrupt enable bit in the IEN0, 
      // IEN1, or IEN2 registers to 1
      HAL_INT_ENABLE(INUM_DMA, INT_ON);
                        
      // 4. Enable global interrupt
      INT_GLOBAL_ENABLE(INT_ON);
    
      // Infinite loop    
      while (TRUE) {
          
        DMAARM = DMAARM_CHANNEL0;     // Arm DMA channel 0
        RFST = STROBE_RX;             // Switch radio to RX
            
        while (!packetReceived);      // Wait for packet to be received (flag set in dma_IRQ)
        packetReceived = FALSE;  
        
        // Check CRC (check CRC bit in appended status byte)
       // if(rxBuffer[0] < 10) {
         //   printf("reached 2\n");
          P1_1 = ~P1_1;               // Toggle LED
          for(int i = 0;i<=rxBuffer[0]+2;i++) 
                 printf("%d ",rxBuffer[i]);
            if ((rxBuffer[rxBuffer[0] + 2]) & 0x80) 
              printf("CRC OK\n");
        //}
      }
    }
    
    
    /*==== INTERRUPT SERVICE ROUTINES ============================================*/
    
    
    /******************************************************************************
    * @fn  dma_IRQ
    *
    * @brief
    *      Occurs every time the transfer count is reached in RX mode
    *
    * Parameters:
    *
    * @param  void
    *
    * @return void
    *
    ******************************************************************************/
    
    #pragma vector=DMA_VECTOR
    __interrupt void dma_IRQ(void) {
        DMAIF = 0;              // Clear the CPU DMA interrupt flag
        DMAIRQ &= ~DMAIF_0;     // DMA channel 0 module interrupt flag
        packetReceived = TRUE;
    }
    
    

     我正在上传我的 Rx CC1111文件、以供您考虑使用 CC1111软件狗及其逻辑分析仪及其工具来捕获数据。

    /*------------------------------------------------------------------------------
    |   File:      CC1111_TX.c
    |   Target:    cc1111
    |
    +-------------------------------------------------------------------------------
    |  Copyright 2004-2007 Texas Instruments Incorporated. All rights reserved.
    |
    |  IMPORTANT: Your use of this Software is limited to those specific rights
    |  granted under the terms of a software license agreement between the user who
    |  downloaded the software, his/her employer (which must be your employer) and
    |  Texas Instruments Incorporated (the "License"). You may not use this Software
    |  unless you agree to abide by the terms of the License. The License limits
    |  your use, and you acknowledge, that the Software may not be modified, copied
    |  or distributed unless embedded on a Texas Instruments microcontroller or used
    |  solely and exclusively in conjunction with a Texas Instruments radio
    |  frequency transceiver, which is integrated into your product. Other than for
    |  the foregoing purpose, you may not use, reproduce, copy, prepare derivative
    |  works of, modify, distribute, perform, display or sell this Software and/or
    |  its documentation for any purpose.
    |
    |  YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
    |  PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
    |  INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
    |  NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
    |  TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
    |  NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
    |  LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING
    |  BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
    |  CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
    |  SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
    |  (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
    |
    |  Should you have any questions regarding your right to use this Software,
    |  contact Texas Instruments Incorporated at www.TI.com.
    |
    +-------------------------------------------------------------------------------
    | Purpose:
    +-------------------------------------------------------------------------------
    | Decription:
    +-----------------------------------------------------------------------------*/
    
    /*==== DECLARATION CONTROL ===================================================*/
    
    
    /*==== INCLUDES ==============================================================*/
    #include "hal_main.h"
    #include "dma.h"
    #include "hal_power_clk_mgmt.h"
    #include<stdio.h>
    
    /*==== DEFINES  ==============================================================*/
    #define CLKCON_26_MHZ_XOSC  0x80
    
    #define IRQ_DONE            0x10 // The IRQ_DONE bit in the RFIF register
    #define IM_DONE             0x10 // The IM_DONE bit in the RFIM register
    #define RFIF_1_0            0x03 // RF CPU interrupt flag
    
    // Strobe commands for the RFST register
    #define STROBE_TX           0x03
    #define STROBE_IDLE         0x04
    
    #define N                   5
    
    
    /*==== GLOBAL VARS============================================================*/
    BYTE __xdata txBuffer[N + 1];
    static UINT8  packetSent = FALSE;
    
    __xdata DMA_DESC dmaConfigTX;  // Struct for the DMA configuration
    
    
    /*******************************************************************************
    * @fn  main
    *
    * @brief
    *      Main function.
    *
    * Parameters:
    *
    * @param  void
    *
    * @return void
    *
    *******************************************************************************/
    void main(void) {
     
      UINT16 i;
    
      // Choose the crystal oscillator as the system clock and set
      // system clock speed = fRef (fxosc)
      CLKCON &= ~OSC_BIT;           // request switch to crystal oscillator
      while (CLKCON & OSC_BIT);     // wait until the clock switch has occured (=stable)
      SLEEP |= OSC_PD_BIT;          // power down unused oscillator
     
      P1DIR |= 0x02;
     
      // Sync word qualifier mode = 30/32 sync word bits detected
      // Channel spacing = 199.951172
      // Data rate = 249.756
      // RX filter BW = 600.000000
      // PA ramping = false
      // Preamble count = 4
      // Whitening = false
      // Address config = No address check
      // Carrier frequency = 868.299683
      // Device address = 0
      // TX power = 0
      // Manchester enable = false
      // CRC enable = true
      // Deviation = 128.906250
      // Packet length mode = Variable packet length mode. Packet length configured by the first byte after sync word
      // Packet length = 255
      // Modulation format = GFSK
      // Base frequency = 868.299683
      // Modulated = true
      // Channel number = 0
      //SYNC1 = 0x55;
        //SYNC0 = 0x55;
      PKTCTRL0   = 0x01;
      FSCTRL1    = 0x06;
      FREQ2      = 0x25;
      FREQ1      = 0xeD;
      FREQ0      = 0xDD;
      MDMCFG4    = 0xca;
      MDMCFG3    = 0xa3;
      MDMCFG2    = 0x13;
      MDMCFG1    = 0x23;
      MDMCFG0    = 0x11;
      DEVIATN    = 0x36;
      MCSM0      = 0x18;
      FOCCFG     = 0x16;
      BSCFG      = 0x6C;
      AGCCTRL2   = 0x43;
      AGCCTRL1   = 0x40;
      AGCCTRL0   = 0x91;
      FREND1     = 0x56;
      FSCAL3     = 0xE9;
      FSCAL2     = 0x2A;
      FSCAL1     = 0x00;
      FSCAL0     = 0x1F;
      TEST1      = 0x31;
      TEST0      = 0x09;
      PA_TABLE0  = 0x8e;
      IOCFG0     = 0x06;
      PKTLEN     = N;
    
       
      // Setup the DMA for TX
      SET_WORD(dmaConfigTX.SRCADDRH, dmaConfigTX.SRCADDRL, txBuffer);
      SET_WORD(dmaConfigTX.DESTADDRH, dmaConfigTX.DESTADDRL, &X_RFD);
      dmaConfigTX.VLEN      = DMA_VLEN_FIRST_BYTE_P_1;
      SET_WORD(dmaConfigTX.LENH, dmaConfigTX.LENL, N + 1);
      dmaConfigTX.WORDSIZE  = DMA_WORDSIZE_BYTE;
      dmaConfigTX.TRIG      = DMA_TRIG_RADIO;
      dmaConfigTX.TMODE     = DMA_TMODE_SINGLE;
      dmaConfigTX.SRCINC    = DMA_SRCINC_1;
      dmaConfigTX.DESTINC   = DMA_DESTINC_0;
      dmaConfigTX.IRQMASK   = DMA_IRQMASK_DISABLE;
      dmaConfigTX.M8        = DMA_M8_USE_8_BITS;
      dmaConfigTX.PRIORITY  = DMA_PRI_HIGH;
      SET_WORD(DMA0CFGH, DMA0CFGL, &dmaConfigTX);
     
      // 1. Clear interrupt flags
      // For pulsed or edge shaped interrupt sources one should clear the CPU
      // interrupt flag prior to clearing the module interrupt flag
      S1CON &= ~RFIF_1_0;
      RFIF &= ~IRQ_DONE;  
       
      // 2. Set individual interrupt enable bit in the peripherals SFR, if any
      RFIM = IM_DONE;
                       
      // 3. Set the corresponding individual, interrupt enable bit in the IEN0,
      // IEN1, or IEN2 registers to 1
      HAL_INT_ENABLE(INUM_RF, INT_ON);
                       
      // 4. Enable global interrupt
      INT_GLOBAL_ENABLE(INT_ON);
            int j =0;
      while (TRUE) {
    
        // Create packet to transmit
        txBuffer[0] = N;
        for (i = 1; i <= N; i++)
          txBuffer[i] = 0x01;;
          //txBuffer[i] = i+j;;
           printf("rached1\n");
                   P1_1 = ~P1_1;               // Toggle LED
          halWait(250);
                         CLR_LED1();
    
       // while ((P1_2));
                    printf("rached2\n");
                         
                       
       // for (i = 0; i < 10; i++) {
                                         
          // Send the packet
          DMAARM = DMAARM_CHANNEL0;   // Arm DMA channel 0
          RFST = STROBE_TX;           // Switch radio to TX
                   
          while (!packetSent);        // Wait for packet to be transmitted (flag set in rf_IRQ)
          packetSent = FALSE;
          P1_1 = ~P1_1;               // Toggle LED
          halWait(255);
        //}  
          //    j= j+1;
    
      }
    }
    
    /*==== INTERRUPT SERVICE ROUTINES ============================================*/
    
    /******************************************************************************
    * @fn  rf_IRQ
    *
    * @brief
    *
    * Parameters:
    *
    * @param  void
    *
    * @return void
    *
    ******************************************************************************/
    #pragma vector=RF_VECTOR
    __interrupt void rf_IRQ(void) {
      S1CON &= ~RFIF_1_0;     // Clear the CPU RFIF interrupt flag
      RFIF &= ~IRQ_DONE;      // Tx completed, clear the module interrupt flag
      packetSent = TRUE;
    }

    CC1111 TX 代码、使用 IAR Workbench 8051通过 cc 调试器使用另一个 CC1111软件狗实际发送数据。

    当我使用自定义代码将数据从一个软件狗正常发送到另一个软件狗时、这两个软件狗都可以正常工作。 但是,当我用逻辑分析仪插入 Rx 代码刷写的加密狗时,我会在 附加的 CSV 文件中接收到损坏的数据 e2e.ti.com/.../untitled.csvas。 请看一下。

    查询

    • 我无法理解如何确认我的仪表数据是否已损坏?
    • 我看到波特率对使用逻辑分析仪捕获的 CS 和串行数据有影响、因此 CC1111的波特率有一些特定值。
    • 最后但重要的查询是"我们能否尝试捕获 Tx 中一个 CC1111软件狗发送的数据、并使用 Rx 模式上另一个软件狗连接的逻辑分析仪接收数据。" 这将澄清我的许多疑问,并可能使我更加清楚如何进一步调试。 因为到目前为止、逻辑分析仪上捕获的数据是同时发生的、所以如果我们的设置或其他方面正常、就不会更加清晰?
    • 如果我们能够使用上述代码在两个加密狗中进行通信、但在逻辑分析仪上看到数据、而不是在 IAR Workbench 的 I/O 终端上看到数据、这将消除我的许多疑虑。 请参阅指南
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Siri、

    我已经调查了很多、但没有找到如何设置前导码/Sync 字、因为您提到我发送了以下内容的另一个器件的"'F": 4字节前导码、4字节同步(设置为0x55以使本测试更容易识别)、4字节有效载荷(0x01、0x02、0x03、0xAA)、无 CRC。"、

    如何使用 TI 工具或自定义代码设置此前导码/Sync 字节。 如果需要使用或添加一些函数库来设置前导码/SYNC、请提供指导、就像在正常代码中一样、我们只需在 Tx/Rx 模式下设置 SYNC1/SYNC0值就可以了。

    //cc1101.setSyncWord(&syncWord、false);
    cc1101.setSyncWord(syncWordfalse);
    cc1101.setCarrierFreq(CFREQ_433);
    CC1101.disableAddressCheck ();
    //cc1101.setTxPowerAmp(PA_LowPower); 
    对于 CC11111111/CC1110加密狗、有与上面所示类似的库函数。 请提供指导 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    我不确定如何处理这种情况、因为我没有您正在使用的发送器、无法重新创建您正在执行的操作。

    有这么多的电子邮件来回发送,也有很多问题,我开始对正在发生的情况失去了跟踪。

    例如、我不理解您发布的代码的用途以及您使用它的目的。 我也不理解您在 untitled.csv 中尝试显示的内容

    当您有一个发送器正在传输某些数据(如果是 Itron ERT 燃气表)时、您需要从以下内容开始:

    • 器件的射频参数
      • 射频频率
      • 调制格式
      • 数据速率
    • 数据包格式
      • 序言
      • 同步
      • 有效载荷(长度信息)
      • CRC

    由于您在第一封电子邮件中说您能够使用 SmartRF Studio 接收内容、但遇到 CRC 错误、因此我假设您完全控制射频参数

    数据包格式在 编码器接收器发送器- Wikipedia 中进行了解释、它说这是 OOK、并且使用了曼彻斯特编码、但它没有说所有数据都是曼彻斯特编码或只是其中一部分。

    此外、我看到您在帖子中提到的数据速率为32768

    这是符号速率还是位速率?

    关于使用异步模式的建议只是查看无线中的原始数据、以查看是否所有内容都经过了编码、例如曼彻斯特编码。

    如何在我已经介绍的异步模式下查看数据。 我现在在家办公、没有可用的 CC1111软件狗、因此我改用 CC1110 (CC1111–USB 器件):

    我使用了 SmartRF Studio 中用于 CC1110的250kbps 设置、并实施了简单的 TX–RX 测试、在测试中我验证了我可以使用一个 CC1110发送数据包、并使用另一个 CC1110接收数据包:

    代码如下:

    发送:

     

    #define CLKCON_26_MHZ_XOSC  0x80
    
    #define IRQ_DONE            0x10 // The IRQ_DONE bit in the RFIF register
    #define IM_DONE             0x10 // The IM_DONE bit in the RFIM register
    #define RFIF_1_0            0x03 // RF CPU interrupt flag
    
    // Strobe commands for the RFST register
    #define STROBE_TX           0x03 
    #define STROBE_IDLE         0x04
    
    #define N                   10
    
    /*==== GLOBAL VARS============================================================*/
    BYTE __xdata txBuffer[N + 1];
    static UINT8  packetSent = FALSE;
    
    __xdata DMA_DESC dmaConfigTX;  // Struct for the DMA configuration
    
    
    
    void main(void) {
      
      UINT16 i;
    
      // Choose the crystal oscillator as the system clock and set 
      // system clock speed = fRef (fxosc)
      CLKCON &= ~OSC_BIT;           // request switch to crystal oscillator
      while (CLKCON & OSC_BIT);     // wait until the clock switch has occured (=stable)
      SLEEP |= OSC_PD_BIT;          // power down unused oscillator
      
      INIT_BUTTON();
      P1DIR |= 0x01;
    
      // Address Config = No address check 
      // Base Frequency = 868.299866 
      // CRC Enable = true 
      // Carrier Frequency = 868.299866 
      // Channel Number = 0 
      // Channel Spacing = 199.951172 
      // Data Rate = 249.939 
      // Deviation = 126.953125 
      // Device Address = 0 
      // Manchester Enable = false 
      // Modulated = true 
      // Modulation Format = GFSK 
      // PA Ramping = false 
      // Packet Length = 255 
      // Packet Length Mode = Variable packet length mode. Packet length configured by the first byte after sync word 
      // Preamble Count = 4 
      // RX Filter BW = 541.666667 
      // Sync Word Qualifier Mode = 30/32 sync word bits detected 
      // TX Power = 0 
      // Whitening = false 
    
      PKTCTRL0      = 0x05;
      FSCTRL1       = 0x0C;
      FREQ2         = 0x21;
      FREQ1         = 0x65;
      FREQ0         = 0x6A;
      MDMCFG4       = 0x2D;
      MDMCFG3       = 0x3B;
      MDMCFG2       = 0x13;
      DEVIATN       = 0x62;
      MCSM0         = 0x18;
      FOCCFG        = 0x1D;
      BSCFG         = 0x1C;
      AGCCTRL2      = 0xC7;
      AGCCTRL1      = 0x00;
      AGCCTRL0      = 0xB0;
      FREND1        = 0xB6;
      FSCAL3        = 0xEA;
      FSCAL2        = 0x2A;
      FSCAL1        = 0x00;
      FSCAL0        = 0x1F;
      TEST1         = 0x31;
      TEST0         = 0x09;
      PA_TABLE0     = 0x50;
      PKTLEN        = N;
    
      // Setup the DMA for TX
      SET_WORD(dmaConfigTX.SRCADDRH, dmaConfigTX.SRCADDRL, txBuffer);
      SET_WORD(dmaConfigTX.DESTADDRH, dmaConfigTX.DESTADDRL, &X_RFD);
      dmaConfigTX.VLEN      = DMA_VLEN_FIRST_BYTE_P_1; 
      SET_WORD(dmaConfigTX.LENH, dmaConfigTX.LENL, N + 1);
      dmaConfigTX.WORDSIZE  = DMA_WORDSIZE_BYTE;
      dmaConfigTX.TRIG      = DMA_TRIG_RADIO;
      dmaConfigTX.TMODE     = DMA_TMODE_SINGLE;
      dmaConfigTX.SRCINC    = DMA_SRCINC_1;
      dmaConfigTX.DESTINC   = DMA_DESTINC_0;
      dmaConfigTX.IRQMASK   = DMA_IRQMASK_DISABLE;
      dmaConfigTX.M8        = DMA_M8_USE_8_BITS;
      dmaConfigTX.PRIORITY  = DMA_PRI_HIGH;
      SET_WORD(DMA0CFGH, DMA0CFGL, &dmaConfigTX);
      
      // 1. Clear interrupt flags
      // For pulsed or edge shaped interrupt sources one should clear the CPU 
      // interrupt flag prior to clearing the module interrupt flag
      S1CON &= ~RFIF_1_0;
      RFIF &= ~IRQ_DONE;  
        
      // 2. Set individual interrupt enable bit in the peripherals SFR, if any
      RFIM = IM_DONE;
                        
      // 3. Set the corresponding individual, interrupt enable bit in the IEN0, 
      // IEN1, or IEN2 registers to 1
      HAL_INT_ENABLE(INUM_RF, INT_ON);
                        
      // 4. Enable global interrupt
      INT_GLOBAL_ENABLE(INT_ON);
      
      while (TRUE) {
          
        // Create packet to transmit
        txBuffer[0] = N;
        for (i = 1; i <= N; i++)
        {
          txBuffer[i] = i;
        }
    
        // Send the packet
        DMAARM = DMAARM_CHANNEL0;   // Arm DMA channel 0
        RFST = STROBE_TX;           // Switch radio to TX
                    
        while (!packetSent);        // Wait for packet to be transmitted (flag set in rf_IRQ)
        packetSent = FALSE;
        P1_0 = ~P1_0;               // Toggle LED
        halWait(250);                           
      }
    }
    
    #pragma vector=RF_VECTOR
    __interrupt void rf_IRQ(void) {
      S1CON &= ~RFIF_1_0;     // Clear the CPU RFIF interrupt flag
      RFIF &= ~IRQ_DONE;      // Tx completed, clear the module interrupt flag
      packetSent = TRUE;
    }
    

    RX:

    #define CLKCON_26_MHZ_XOSC  0x80
    
    #define DMAIF_0             0x01 // DMA channel 0 interrupt flag in the DMAIRQ register
    
    // Strobe commands for the RFST register
    #define STROBE_RX           0x02 
    #define STROBE_IDLE         0x04
    
    #define N                   255
    
    /*==== GLOBAL VARS============================================================*/
    BYTE __xdata rxBuffer[N + 3];
    static UINT8  packetReceived = FALSE;
    
    __xdata DMA_DESC dmaConfigRX;  // Struct for the DMA configuration
    
    
    void main(void) {
      
      // Choose the crystal oscillator as the system clock and set 
      // system clock speed = fRef (fxosc)
      CLKCON &= ~OSC_BIT;           // request switch to crystal oscillator
      while (CLKCON & OSC_BIT);     // wait until the clock switch has occured (=stable)
      SLEEP |= OSC_PD_BIT;          // power down unused oscillator
      
      P1DIR |= 0x01;
      
       // Address Config = No address check 
      // Base Frequency = 868.299866 
      // CRC Enable = true 
      // Carrier Frequency = 868.299866 
      // Channel Number = 0 
      // Channel Spacing = 199.951172 
      // Data Rate = 249.939 
      // Deviation = 126.953125 
      // Device Address = 0 
      // Manchester Enable = false 
      // Modulated = true 
      // Modulation Format = GFSK 
      // PA Ramping = false 
      // Packet Length = 255 
      // Packet Length Mode = Variable packet length mode. Packet length configured by the first byte after sync word 
      // Preamble Count = 4 
      // RX Filter BW = 541.666667 
      // Sync Word Qualifier Mode = 30/32 sync word bits detected 
      // TX Power = 0 
      // Whitening = false 
    
      PKTCTRL0      = 0x05;
      
      FSCTRL1       = 0x0C;
      FREQ2         = 0x21;
      FREQ1         = 0x65;
      FREQ0         = 0x6A;
      MDMCFG4       = 0x2D;
      MDMCFG3       = 0x3B;
      MDMCFG2       = 0x13;
      DEVIATN       = 0x62;
      MCSM0         = 0x18;
      FOCCFG        = 0x1D;
      BSCFG         = 0x1C;
      AGCCTRL2      = 0xC7;
      AGCCTRL1      = 0x00;
      AGCCTRL0      = 0xB0;
      FREND1        = 0xB6;
      FSCAL3        = 0xEA;
      FSCAL2        = 0x2A;
      FSCAL1        = 0x00;
      FSCAL0        = 0x1F;
      TEST1         = 0x31;
      TEST0         = 0x09;
      PA_TABLE0     = 0x50;
      PKTLEN        = N;
    
      
      // Setup the DMA for RX
      SET_WORD(dmaConfigRX.SRCADDRH, dmaConfigRX.SRCADDRL, &X_RFD);
      SET_WORD(dmaConfigRX.DESTADDRH, dmaConfigRX.DESTADDRL, rxBuffer);
      dmaConfigRX.VLEN      = DMA_VLEN_FIRST_BYTE_P_3;
      SET_WORD(dmaConfigRX.LENH, dmaConfigRX.LENL, N + 1);
      dmaConfigRX.WORDSIZE  = DMA_WORDSIZE_BYTE;
      dmaConfigRX.TRIG      = DMA_TRIG_RADIO;
      dmaConfigRX.TMODE     = DMA_TMODE_SINGLE;
      dmaConfigRX.SRCINC    = DMA_SRCINC_0;
      dmaConfigRX.DESTINC   = DMA_DESTINC_1;
      dmaConfigRX.IRQMASK   = DMA_IRQMASK_ENABLE;
      dmaConfigRX.M8        = DMA_M8_USE_8_BITS;
      dmaConfigRX.PRIORITY  = DMA_PRI_HIGH;
      SET_WORD(DMA0CFGH, DMA0CFGL, &dmaConfigRX);
      
      // 1. Clear interrupt flags
      // For pulsed or edge shaped interrupt sources one should clear the CPU 
      // interrupt flag prior to clearing the module interrupt flag
      DMAIF = 0; 
      DMAIRQ &= ~DMAIF_0;
        
      // 2. Set individual interrupt enable bit in the peripherals SFR, if any
      // No flag for the DMA (Set in the DMA struct (IRQMASK = 1))
                        
      // 3. Set the corresponding individual, interrupt enable bit in the IEN0, 
      // IEN1, or IEN2 registers to 1
      HAL_INT_ENABLE(INUM_DMA, INT_ON);
                        
      // 4. Enable global interrupt
      INT_GLOBAL_ENABLE(INT_ON);
    
      // Infinite loop    
      while (TRUE) {
          
        DMAARM = DMAARM_CHANNEL0;     // Arm DMA channel 0
        RFST = STROBE_RX;             // Switch radio to RX
            
        while (!packetReceived);      // Wait for packet to be received (flag set in dma_IRQ)
        packetReceived = FALSE;  
            
        // Check CRC (check CRC bit in appended status byte)
        if ((rxBuffer[rxBuffer[0] + 2]) & 0x80)
          P1_0 = ~P1_0;               // Toggle LED
      }
    }
    
    #pragma vector=DMA_VECTOR
    __interrupt void dma_IRQ(void) {
        DMAIF = 0;              // Clear the CPU DMA interrupt flag
        DMAIRQ &= ~DMAIF_0;     // DMA channel 0 module interrupt flag
        packetReceived = TRUE;
    }
    
    

    您可以从代码中看到、我发送的数据包采用以下格式:

    前导码(4字节),由 MDMCFG1.NUM_PREAMBLE = 2设置

    SYNC (4字节0xD391D391)由 SYNC1 = 0xD3、SYNC0 = 0x91、MDMCFG2.SYNC_MODE = 3设置

    1长度字节:0x0A

    有效载荷:0x01、0x02、0x03、0x04、0x05、 0x06、0x07、0x08、0x09、0x0A

    2字节 CRC

    修改 RX 代码以执行异步模式、如下所示:

    #define CLKCON_26_MHZ_XOSC  0x80
    
    // Strobe commands for the RFST register
    #define STROBE_RX           0x02 
    #define STROBE_IDLE         0x04
    
    #define N                   255
    
    void main(void) {
      
      // Choose the crystal oscillator as the system clock and set 
      // system clock speed = fRef (fxosc)
      CLKCON &= ~OSC_BIT;           // request switch to crystal oscillator
      while (CLKCON & OSC_BIT);     // wait until the clock switch has occured (=stable)
      SLEEP |= OSC_PD_BIT;          // power down unused oscillator
      
      P1DIR |= 0x01;
      
       // Address Config = No address check 
      // Base Frequency = 868.299866 
      // CRC Enable = true 
      // Carrier Frequency = 868.299866 
      // Channel Number = 0 
      // Channel Spacing = 199.951172 
      // Data Rate = 249.939 
      // Deviation = 126.953125 
      // Device Address = 0 
      // Manchester Enable = false 
      // Modulated = true 
      // Modulation Format = GFSK 
      // PA Ramping = false 
      // Packet Length = 255 
      // Packet Length Mode = Variable packet length mode. Packet length configured by the first byte after sync word 
      // Preamble Count = 4 
      // RX Filter BW = 541.666667 
      // Sync Word Qualifier Mode = 30/32 sync word bits detected 
      // TX Power = 0 
      // Whitening = false 
    
      PKTCTRL0      = 0x32; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
      FSCTRL1       = 0x0C;
      FREQ2         = 0x21;
      FREQ1         = 0x65;
      FREQ0         = 0x6A;
      MDMCFG4       = 0x2D;
      MDMCFG3       = 0x3B;
      MDMCFG2       = 0x13;
      DEVIATN       = 0x62;
      MCSM0         = 0x18;
      FOCCFG        = 0x1D;
      BSCFG         = 0x1C;
      AGCCTRL2      = 0xC7;
      AGCCTRL1      = 0x00;
      AGCCTRL0      = 0xB0;
      FREND1        = 0xB6;
      FSCAL3        = 0xEA;
      FSCAL2        = 0x2A;
      FSCAL1        = 0x00;
      FSCAL0        = 0x1F;
      TEST1         = 0x31;
      TEST0         = 0x09;
      PA_TABLE0     = 0x50;
      PKTLEN        = N;
     
      IOCFG1      = 0x0D; // Serial Data Output!!!!!!!!!!!!!!!!
      IOCFG2      = 0x0E; // CS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      
      RFST = STROBE_RX; 
      
      while(1);
    }

    然后、我使用逻辑分析仪监测 CS 信号和异步 RX 数据、并能够手动检测正确的接收数据:

    Siri

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

    Siri、

    我们已尝试使用 Saleae 逻辑分析仪进行上述建议的基本测试。 面临的问题:

    1仍然无法使用上的 Saleae 和异步模式捕获从第一个用作 Tx 的 CC1111 USB 软件狗传输到另一个 CC1111 USB 软件狗的数据。

    2 Saleae 上的数据仅充满帧错误。

    3您共享的代码也不像同步或 正常模式的加密狗那样工作

    /*Tx Code */
    /*------------------------------------------------------------------------------
    |   File:      CC1111_TX.c
    |   Target:    cc1111
    | 
    +-------------------------------------------------------------------------------
    |  Copyright 2004-2007 Texas Instruments Incorporated. All rights reserved.
    |
    |  IMPORTANT: Your use of this Software is limited to those specific rights
    |  granted under the terms of a software license agreement between the user who
    |  downloaded the software, his/her employer (which must be your employer) and
    |  Texas Instruments Incorporated (the "License"). You may not use this Software
    |  unless you agree to abide by the terms of the License. The License limits
    |  your use, and you acknowledge, that the Software may not be modified, copied
    |  or distributed unless embedded on a Texas Instruments microcontroller or used
    |  solely and exclusively in conjunction with a Texas Instruments radio
    |  frequency transceiver, which is integrated into your product. Other than for
    |  the foregoing purpose, you may not use, reproduce, copy, prepare derivative
    |  works of, modify, distribute, perform, display or sell this Software and/or
    |  its documentation for any purpose.
    |
    |  YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
    |  PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
    |  INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
    |  NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
    |  TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
    |  NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
    |  LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING
    |  BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
    |  CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
    |  SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
    |  (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
    |
    |  Should you have any questions regarding your right to use this Software,
    |  contact Texas Instruments Incorporated at www.TI.com.
    |
    +-------------------------------------------------------------------------------
    | Purpose:
    +-------------------------------------------------------------------------------
    | Decription:
    +-----------------------------------------------------------------------------*/
    
    /*==== DECLARATION CONTROL ===================================================*/
    
    
    /*==== INCLUDES ==============================================================*/
    #include "hal_main.h"
    #include "dma.h"
    #include "hal_power_clk_mgmt.h"
    #include<stdio.h>
    
    /*==== DEFINES  ==============================================================*/
    #define CLKCON_26_MHZ_XOSC  0x80
    
    #define IRQ_DONE            0x10 // The IRQ_DONE bit in the RFIF register
    #define IM_DONE             0x10 // The IM_DONE bit in the RFIM register
    #define RFIF_1_0            0x03 // RF CPU interrupt flag
    
    // Strobe commands for the RFST register
    #define STROBE_TX           0x03 
    #define STROBE_IDLE         0x04
    
    #define N                   5
    
    
    /*==== GLOBAL VARS============================================================*/
    BYTE __xdata txBuffer[N + 1];
    static UINT8  packetSent = FALSE;
    
    __xdata DMA_DESC dmaConfigTX;  // Struct for the DMA configuration
    
    
    /*******************************************************************************
    * @fn  main
    *
    * @brief
    *      Main function. 
    *
    * Parameters:
    *
    * @param  void
    *
    * @return void
    *
    *******************************************************************************/
    void main(void) {
      
      UINT16 i;
    
      // Choose the crystal oscillator as the system clock and set 
      // system clock speed = fRef (fxosc)
      CLKCON &= ~OSC_BIT;           // request switch to crystal oscillator
      while (CLKCON & OSC_BIT);     // wait until the clock switch has occured (=stable)
      SLEEP |= OSC_PD_BIT;          // power down unused oscillator
      
      P1DIR |= 0x02;
      
      // Sync word qualifier mode = 30/32 sync word bits detected 
      // Channel spacing = 199.951172 
      // Data rate = 249.756 
      // RX filter BW = 600.000000 
      // PA ramping = false 
      // Preamble count = 4 
      // Whitening = false 
      // Address config = No address check 
      // Carrier frequency = 868.299683 
      // Device address = 0 
      // TX power = 0 
      // Manchester enable = false 
      // CRC enable = true 
      // Deviation = 128.906250 
      // Packet length mode = Variable packet length mode. Packet length configured by the first byte after sync word 
      // Packet length = 255 
      // Modulation format = GFSK 
      // Base frequency = 868.299683 
      // Modulated = true 
      // Channel number = 0 
      
      SYNC1 = 0xd3;
        SYNC0 = 0x91;
      
      PKTCTRL0   = 0x05;
      FSCTRL1    = 0x0c;
      FREQ2      = 0x24;
      FREQ1      = 0x2D;
      FREQ0      = 0xDD;
      MDMCFG4    = 0x1d;
      MDMCFG3    = 0x55;
      MDMCFG2    = 0x13;
      MDMCFG1    = 0x23;
      MDMCFG0    = 0x11;
      DEVIATN    = 0x63;
      MCSM0      = 0x18;
      FOCCFG     = 0x1d;
      BSCFG      = 0x1C;
      AGCCTRL2   = 0xc7;
      AGCCTRL1   = 0x00;
      AGCCTRL0   = 0xb0;
      FREND1     = 0xb6;
      FSCAL3     = 0xEa;
      FSCAL2     = 0x2A;
      FSCAL1     = 0x00;
      FSCAL0     = 0x1F;
      TEST1      = 0x31;
      TEST0      = 0x09;
      PA_TABLE0  = 0x50;
      IOCFG0     = 0x06;
      PKTLEN     = N;
    
      // Setup the DMA for TX
      SET_WORD(dmaConfigTX.SRCADDRH, dmaConfigTX.SRCADDRL, txBuffer);
      SET_WORD(dmaConfigTX.DESTADDRH, dmaConfigTX.DESTADDRL, &X_RFD);
      dmaConfigTX.VLEN      = DMA_VLEN_FIRST_BYTE_P_1; 
      SET_WORD(dmaConfigTX.LENH, dmaConfigTX.LENL, N + 1);
      dmaConfigTX.WORDSIZE  = DMA_WORDSIZE_BYTE;
      dmaConfigTX.TRIG      = DMA_TRIG_RADIO;
      dmaConfigTX.TMODE     = DMA_TMODE_SINGLE;
      dmaConfigTX.SRCINC    = DMA_SRCINC_1;
      dmaConfigTX.DESTINC   = DMA_DESTINC_0;
      dmaConfigTX.IRQMASK   = DMA_IRQMASK_DISABLE;
      dmaConfigTX.M8        = DMA_M8_USE_8_BITS;
      dmaConfigTX.PRIORITY  = DMA_PRI_HIGH;
      SET_WORD(DMA0CFGH, DMA0CFGL, &dmaConfigTX);
      
      // 1. Clear interrupt flags
      // For pulsed or edge shaped interrupt sources one should clear the CPU 
      // interrupt flag prior to clearing the module interrupt flag
      S1CON &= ~RFIF_1_0;
      RFIF &= ~IRQ_DONE;  
        
      // 2. Set individual interrupt enable bit in the peripherals SFR, if any
      RFIM = IM_DONE;
                        
      // 3. Set the corresponding individual, interrupt enable bit in the IEN0, 
      // IEN1, or IEN2 registers to 1
      HAL_INT_ENABLE(INUM_RF, INT_ON);
                        
      // 4. Enable global interrupt
      INT_GLOBAL_ENABLE(INT_ON);
            int j =0;
      while (TRUE) {
    
        // Create packet to transmit
        txBuffer[0] = N;
        for (i = 1; i <= N; i++)
          txBuffer[i] = 0x0b;;;
          //txBuffer[i] = i+j;;
           printf("rached1\n");
                   P1_1 = ~P1_1;               // Toggle LED
          halWait(250);
                         CLR_LED1();
    
       // while ((P1_2));
                    printf("rached2\n");
                          
                        
       // for (i = 0; i < 10; i++) {
                                          
          // Send the packet
          DMAARM = DMAARM_CHANNEL0;   // Arm DMA channel 0
          RFST = STROBE_TX;           // Switch radio to TX
                    
          while (!packetSent);        // Wait for packet to be transmitted (flag set in rf_IRQ)
          packetSent = FALSE;
          P1_1 = ~P1_1;               // Toggle LED
          halWait(255);
        //}  
          //    j= j+1;
    
      }
    }
    
    /*==== INTERRUPT SERVICE ROUTINES ============================================*/
    
    /******************************************************************************
    * @fn  rf_IRQ
    *
    * @brief
    *
    * Parameters:
    *
    * @param  void
    *
    * @return void
    *
    ******************************************************************************/
    #pragma vector=RF_VECTOR
    __interrupt void rf_IRQ(void) {
      S1CON &= ~RFIF_1_0;     // Clear the CPU RFIF interrupt flag
      RFIF &= ~IRQ_DONE;      // Tx completed, clear the module interrupt flag
      packetSent = TRUE;
    }

    /*Rx Code*/
    /*------------------------------------------------------------------------------
    |   File:      CC1111_RX.c
    |   Target:    cc1111
    | 
    +-------------------------------------------------------------------------------
    |  Copyright 2004-2007 Texas Instruments Incorporated. All rights reserved.
    |
    |  IMPORTANT: Your use of this Software is limited to those specific rights
    |  granted under the terms of a software license agreement between the user who
    |  downloaded the software, his/her employer (which must be your employer) and
    |  Texas Instruments Incorporated (the "License"). You may not use this Software
    |  unless you agree to abide by the terms of the License. The License limits
    |  your use, and you acknowledge, that the Software may not be modified, copied
    |  or distributed unless embedded on a Texas Instruments microcontroller or used
    |  solely and exclusively in conjunction with a Texas Instruments radio
    |  frequency transceiver, which is integrated into your product. Other than for
    |  the foregoing purpose, you may not use, reproduce, copy, prepare derivative
    |  works of, modify, distribute, perform, display or sell this Software and/or
    |  its documentation for any purpose.
    |
    |  YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
    |  PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
    |  INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
    |  NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
    |  TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
    |  NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
    |  LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING
    |  BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
    |  CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
    |  SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
    |  (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
    |
    |  Should you have any questions regarding your right to use this Software,
    |  contact Texas Instruments Incorporated at www.TI.com.
    |
    +-------------------------------------------------------------------------------
    | Purpose:
    +-------------------------------------------------------------------------------
    | Decription:
    +-----------------------------------------------------------------------------*/
    
    /*==== DECLARATION CONTROL ===================================================*/
    
    
    /*==== INCLUDES ==============================================================*/
    #include "hal_main.h"
    #include "dma.h"
    #include "hal_power_clk_mgmt.h"
    #include<stdio.H>
    
    /*==== DEFINES  ==============================================================*/
    #define CLKCON_26_MHZ_XOSC  0x80
    
    #define DMAIF_0             0x01 // DMA channel 0 interrupt flag in the DMAIRQ register
    
    // Strobe commands for the RFST register
    #define STROBE_RX           0x02 
    #define STROBE_IDLE         0x04
    
    #define N                   5
    
    
    /*==== GLOBAL VARS============================================================*/
    BYTE __xdata rxBuffer[N + 3];
    static UINT8  packetReceived = FALSE;
    
    __xdata DMA_DESC dmaConfigRX;  // Struct for the DMA configuration
    
    
    /*******************************************************************************
    * @fn  main
    *
    * @brief
    *      Main function. 
    *
    * Parameters:
    *
    * @param  void
    *
    * @return void
    *
    *******************************************************************************/
    void main(void) {
      
      // Choose the crystal oscillator as the system clock and set 
      // system clock speed = fRef (fxosc)
      CLKCON &= ~OSC_BIT;           // request switch to crystal oscillator
      while (CLKCON & OSC_BIT);     // wait until the clock switch has occured (=stable)
      SLEEP |= OSC_PD_BIT;          // power down unused oscillator
      
      P1DIR |= 0x02;
      
      // Sync word qualifier mode = 30/32 sync word bits detected 
      // Channel spacing = 199.951172 
      // Data rate = 249.756 
      // RX filter BW = 600.000000 
      // PA ramping = false 
      // Preamble count = 4 
      // Whitening = false 
      // Address config = No address check 
      // Carrier frequency = 868.299683 
      // Device address = 0 
      // TX power = 0 
      // Manchester enable = false 
      // CRC enable = true 
      // Deviation = 128.906250 
      // Packet length mode = Variable packet length mode. Packet length configured by the first byte after sync word 
      // Packet length = 255 
      // Modulation format = GFSK 
      // Base frequency = 868.299683 
      // Modulated = true 
      // Channel number = 0 
      //SYNC0 = 0x55;
     // SYNC1 = 0x55;
        PKTCTRL0   = 0x32;
      FSCTRL1    = 0x0c;
      FREQ2      = 0x24;
      FREQ1      = 0x2D;
      FREQ0      = 0xDD;
      MDMCFG4    = 0x1d;
      MDMCFG3    = 0x55;
      MDMCFG2    = 0x13;
      MDMCFG1    = 0x23;
      MDMCFG0    = 0x11;
      DEVIATN    = 0x63;
      MCSM0      = 0x18;
      FOCCFG     = 0x1d;
      BSCFG      = 0x1C;
      AGCCTRL2   = 0xc7;
      AGCCTRL1   = 0x00;
      AGCCTRL0   = 0xb0;
      FREND1     = 0xb6;
      FSCAL3     = 0xEa;
      FSCAL2     = 0x2A;
      FSCAL1     = 0x00;
      FSCAL0     = 0x1F;
      TEST1      = 0x31;
      TEST0      = 0x09;
      PA_TABLE0  = 0x50;
      
      IOCFG0      = 0x0d; // Serial Data Output!!!!!!!!!!!!!!!!
      IOCFG1      = 0x0e; // CS!!
      PKTLEN     = N;
    
      // Setup the DMA for RX
      SET_WORD(dmaConfigRX.SRCADDRH, dmaConfigRX.SRCADDRL, &X_RFD);
      SET_WORD(dmaConfigRX.DESTADDRH, dmaConfigRX.DESTADDRL, rxBuffer);
      dmaConfigRX.VLEN      = DMA_VLEN_FIRST_BYTE_P_3;
      SET_WORD(dmaConfigRX.LENH, dmaConfigRX.LENL, N + 1);
      dmaConfigRX.WORDSIZE  = DMA_WORDSIZE_BYTE;
      dmaConfigRX.TRIG      = DMA_TRIG_RADIO;
      dmaConfigRX.TMODE     = DMA_TMODE_SINGLE;
      dmaConfigRX.SRCINC    = DMA_SRCINC_0;
      dmaConfigRX.DESTINC   = DMA_DESTINC_1;
      dmaConfigRX.IRQMASK   = DMA_IRQMASK_ENABLE;
      dmaConfigRX.M8        = DMA_M8_USE_8_BITS;
      dmaConfigRX.PRIORITY  = DMA_PRI_HIGH;
      SET_WORD(DMA0CFGH, DMA0CFGL, &dmaConfigRX);
      
      // 1. Clear interrupt flags
      // For pulsed or edge shaped interrupt sources one should clear the CPU 
      // interrupt flag prior to clearing the module interrupt flag
      DMAIF = 0; 
      DMAIRQ &= ~DMAIF_0;
        
      // 2. Set individual interrupt enable bit in the peripherals SFR, if any
      // No flag for the DMA (Set in the DMA struct (IRQMASK = 1))
                        
      // 3. Set the corresponding individual, interrupt enable bit in the IEN0, 
      // IEN1, or IEN2 registers to 1
      HAL_INT_ENABLE(INUM_DMA, INT_ON);
                        
      // 4. Enable global interrupt
      INT_GLOBAL_ENABLE(INT_ON);
    
      // Infinite loop    
      while (TRUE) {
          
        DMAARM = DMAARM_CHANNEL0;     // Arm DMA channel 0
        RFST = STROBE_RX;             // Switch radio to RX
            printf("here");
        while (!packetReceived);      // Wait for packet to be received (flag set in dma_IRQ)
        packetReceived = FALSE;  
        
        // Check CRC (check CRC bit in appended status byte)
       // if(rxBuffer[0] < 10) {
         //   printf("reached 2\n");
          P1_1 = ~P1_1;               // Toggle LED
          for(int i = 0;i<=rxBuffer[0]+2;i++) 
                 printf("%d ",rxBuffer[i]);
            if ((rxBuffer[rxBuffer[0] + 2]) & 0x80) 
              printf("CRC OK\n");
        //}
      }
    }
    
    
    /*==== INTERRUPT SERVICE ROUTINES ============================================*/
    
    
    /******************************************************************************
    * @fn  dma_IRQ
    *
    * @brief
    *      Occurs every time the transfer count is reached in RX mode
    *
    * Parameters:
    *
    * @param  void
    *
    * @return void
    *
    ******************************************************************************/
    
    #pragma vector=DMA_VECTOR
    __interrupt void dma_IRQ(void) {
        DMAIF = 0;              // Clear the CPU DMA interrupt flag
        DMAIRQ &= ~DMAIF_0;     // DMA channel 0 module interrupt flag
        packetReceived = TRUE;
    }

    如果上述代码适用于 Saleae 或任何其他逻辑分析仪、您是否可以在您的末尾尝试使用。  

    谢谢、此致、

    Rohit Jindal

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

    我已经在 CC1110上测试了可用的代码。 从无线电的角度来看、CC1111是相同的、但具有 USB。

    CC1111使用的晶体不是 CC1110、因此您需要使用为 CC1111而不是为 CC1110生成的设置。

    此外、您不能对 Saleae 使用任何分析仪。

    当我说您应该使用 异步 模式时、这用于无线电。 这就意味着、任何无线数据都将输出到引脚上、您可以使用逻辑分析仪手动查看该引脚。

    如果您使用 CC1111发送数据包、则会发送前导码、同步、长度、有效载荷和 CRC 的数据包、 并且您不会发送 任何具有起始位/停止位/奇偶校验等的串行协议、因此您无法让逻辑分析仪尝试将数据解释为串行 协议、因为这不是您要发送的数据(也不是燃气表正在发送的数据)

    我也不明白为什么您使用监听器来查找 SimiciTI 数据包。

    Siri

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

    获得积分。 根据我的理解、您需要强调什么

    • 我们不能将 Saleae 与 I2C、ASYS 或串行等上的任何分析仪模式一起使用,我们只需启动 Saleae,而无需选择任何符合我们要求的模式,因为它只会在我附加时生成原始数据:
    • 请告诉我下一个步骤,以解释在 Saleae 界面上捕获的数据。 表示如何根据 CC1111数据表解释0位或1位。 因为我在数据表中找不到任何可以解释或说明5.46微秒信号指向0或1的内容。  
    • 请提供指导
    • 您希望通过这条线传达什么  

      “我也不明白为什么您使用监听器查找 SimiciTI 数据包。”

    • 正如您提到的、"然后、我使用逻辑分析仪监测 CS 信号和异步 RX 数据、并能够手动检测正确的接收数据:"

      我们手动执行它的方式意味着您如何确认收到这些值 D3 91等

    我希望 CC1111的这种类型信息作为其将信号解释为0或1的方式、如上图所示、 手动将周期转换为0 /1位。 我在 CC1111的数据表中找不到这种信息  

    具有低功耗射频收发器和8051 MCU 的真正片上系统数据表(修订版 h)(TI.com) 请提供指南

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

    @Siri 请提供帮助

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

    这些器件不能在透明模式下运行、这主要是为了进行调试。

    这意味着您看到的原始数据、例如、不一定具有50%的占空比(如果查看前导码)。

    当我执行测试时、我使用250kbps 发送了数据。 这意味着1位需要4us。

    当查看接收到的前导码时、您会看到、有时2位需要8us、有时需要7.93us。 在两个位花费8us 的情况下、1仅为3.5us、而0为4.5us

    不过、这对于调试来说已经足够好了、因为本练习的整个目的是查看您是否可以识别您认为仪表正在发送的数据、并验证完整的传输是曼彻斯特编码还是只是其中的一部分。

    当您从射频的角度确定 CC1111配置正确、以便能够识别接收到的数据时、应使用 CC1111是正常模式、并让调制解调器负责解释接收到的数据。 数据表中没有关于如何解读透明数据的信息、因为这是在设计所需的分组模式下使用 CC1111时在内部处理的。

    关于我对监听器的评论、我不明白为什么您使用监听器来查找 SimpliciTI 数据包、因为这是一种专有的 TI 协议、与您尝试接收的内容无关。

    Siri

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

    大家好,我已经在 TI 论坛上查看了一些与使用某些 CC1101捕获 ERT 数据相关的旧帖子。  

    CC1101-CC1190 915MHz 模块不接收数据包-低于1GHz 论坛-低于1GHz - TI E2E 支持论坛

    如果您能够成功、请您提供同样的帮助、因为我在过去两个月中遇到类似的问题。

    谢谢、

    Rohit Jindal

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

    请您能帮我解决这个问题