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.

[参考译文] CC1312R:从 MEMS 读取数据时出现调试/非调试问题

Guru**** 2553450 points
Other Parts Discussed in Thread: CC1312R

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1015902/cc1312r-debug-non-debug-issue-to-read-data-from-mems

器件型号:CC1312R

您好!

我有一个使用 CC1312R 的定制板。 我使用 TI-RTOS、板上有一个 MEMS (BMA400)。 软件的工作方式如下:

为 MCU 加电。
读取 MEMS 数据。
读取温度数据。
通过 RF 发送数据。
配置唤醒引脚并进入关断模式。

除了一件事、它按预期工作。 我在为电路板加电时无法读取 MEMS 数据。 我可以通过射频发送数据、但 MEMS 数据全部为零、发送温度数据。

在调试时、我还可以发送 MEMS 和温度数据。 但是、正如您所知、我只能看到一次、当 MCU 进入关断模式时、我无法再进行调试。 这就是为什么我在读取 MEMS 数据时看不到正在发生或未发生的情况。 问题出在哪呢?

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

    从您的描述中、我不清楚您是否完全能够读取 BMA400中的任何内容、或者您是否能够在上电后读取正确的数据、但不清楚是否在关机后读取。

    BMA400不是 TI 产品、因此我不熟悉它的工作原理、但我假设您可以通过 SPI 和/或 I2C 与其通信。

    您需要做的是监控 SPI 和/或 I2C 线路、以查看您是否正在向器件传输正确的数据。 如果您不确定应如何配置设备以获得正确的数据,则需要联系 Bosch Sensortec 以获得相关支持。 如果您知道需要传输哪些数据、但不知道如何配置 CC1312R 来传输这些数据、我们可以为您提供指导、因为您可以向我们提供有关需要在 SPI/I2C 上发送哪些数据的详细信息。

    https://dev.ti.com/tirex/explore/content/simplelink_cc13x2_26x2_sdk_5_10_00_48/docs/proprietary-rf/proprietary-rf-users-guide/proprietary-rf-guide/debugging-index.html#debugging-guide-for-serial-interfaces

    Siri

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

    您好 Sİri、

    我可以保证我可以通过 SPI 协议从 BMA400读取和写入数据。 如果我无法与 SPI MCU 通信、由于我将 MEMS 配置为在一段时间后触发中断、因此我确信我将与 MEMS 通信。

    根据您的建议、我将检查 MEMS 和 MCU 之间的数据和时钟线。 我无法确定问题是与 MCU 端还是 MEMS 端有关。 我还在 Bosch Sensortec 论坛上提出了一个问题。

    我将在任何进度发生时更新状态。

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

    您好!

    我检查了数据。 我正在配置 SPI、如下所示。

        SPI_init();
        SPI_Params_init(&params);
    
        params.bitRate     = 8000000;
        params.dataSize    = 8;
        params.frameFormat = SPI_POL0_PHA0;
        params.mode        = SPI_MASTER;
        params.transferMode= SPI_MODE_BLOCKING;
    
        masterSpi = SPI_open(0, &params);
    
        MEMS_Config();


    我意识到 MCU 不会生成8MHz 时钟。 它大约为400kHz、然后我将 params.bitrate 更改为 40kHz、并且至少读取和发送了一点数据。



    当 MCU 从关断模式唤醒且 SPI 的行为与此类似时,会发生什么情况? 如何强制 MCU 生成8MHz 时钟信号?

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

    从关断模式唤醒后、我无法重新创建您看到的与在正确的时钟下使用 SPI 相关的问题。

    我采用了引脚关断示例、并对其进行了修改、以便在器件每次从关断状态唤醒时通过 SPI @ 8MHz 传输2个字节。 我已验证 SPI 时钟速度是否正确。

    我对代码的修改如下所示:

    #define SPI_MSG_LENGTH      (2)
    
    SPI_Handle spiHandle;
    SPI_Transaction spiTransaction;
    
    unsigned char masterRxBuffer[SPI_MSG_LENGTH];
    unsigned char masterTxBuffer[SPI_MSG_LENGTH] = {0xAA, 0xAA};
    // .
    // .
    // .
    
    static void taskFxn(UArg a0, UArg a1)
    {
        /* If we are waking up from shutdown, we do something extra. */
        if (isWakingFromShutdown) {
            /* In this example we toggle LED1 */
            uint32_t sleepUs = 50000;
            Task_sleep(sleepUs / Clock_tickPeriod);
            
            SPI_Params      spiParams;
    
            SPI_init();
            SPI_Params_init(&spiParams);
            spiParams.frameFormat           = SPI_POL1_PHA1;
            spiParams.mode                  = SPI_MASTER;
            spiParams.transferMode          = SPI_MODE_BLOCKING;
            spiParams.bitRate               = 8000000;
    
            spiHandle = SPI_open(CONFIG_SPI_0, &spiParams);
    
            /* Start transfer */
            spiTransaction.count = SPI_MSG_LENGTH;
            spiTransaction.txBuf = masterTxBuffer;
            spiTransaction.rxBuf = masterRxBuffer;
    
            spiTransaction.txBuf = masterTxBuffer;
            SPI_transfer(spiHandle, &spiTransaction);
        }
    
        /* Turn on LED0 to indicate active */
        PIN_setOutputValue(hPins, CONFIG_PIN_LED_0, 1);
    
        /* Pend on semaphore before going to shutdown */
        Semaphore_pend(Semaphore_handle(&shutdownSem), BIOS_WAIT_FOREVER);
    
        /* Turn off LED0 */
        PIN_setOutputValue(hPins, CONFIG_PIN_LED_0, 0);
    
        /* Configure DIO for wake up from shutdown */
        PINCC26XX_setWakeup(ButtonTableWakeUp);
    
        /* Go to shutdown */
        Power_shutdown(0, 0);
    
        /* Should never get here, since shutdown will reset. */
        while (1);
    }

    BR

    Siri

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

    您好、Siri、

    问题是电源。 我通过调试器提供能量。 当我用纽扣电池为其供电时、它会按预期工作。 我的错误。 我想再问两个与这个系统相关的问题。

    我是否必须在 MCU 从关断模式唤醒时执行所有初始化操作,例如 SPI、I2C,或者只执行一次即可?

    我想知道这个系统是否需要看门狗计时器。 它长时间处于关断模式、然后在短时间内唤醒 MCU 时执行一些任务。 我只是想建议使用看门狗,我还想知道看门狗计时器消耗了多少能量?

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

    你(们)好

    当从关断模式唤醒时、系统完全重新启动、与使用 RESET 引脚和关断使器件保持复位的唯一区别是、在关断模式下、I/O 引脚被锁存以保持其输出值。

    看门狗定时器既不在待机模式下运行、也不在关断模式下运行。

    BR

    Siri