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.

CC2642R: SPI 扮演 SLAVE角色,如何降低功耗?

Part Number: CC2642R

您好!! 

我使用CC2642R 開發, SDK版本為 6.40

我讓 SPI 作為 SLAVE角色, 常態下會處於 Shutdown 狀態。並使用 cs 腳位作為 Wakeup。

這一切都順利,也能正確溝通讀值。

但...當 SPI 接收到某指定的COMMAND後, 就不可以再 SHUTDOWN 了.

必須保持在 STANDBY 狀態。 並繼續維持聽 SPI 的通訊.

而問題就在這裡,為何 STANDBY 模式下, 的功耗 會由 uA 跳升到 mA 而且KEEP 住.....

(.P.S  硬件,完全無額外的週邊I/O使用, UART也 DISABLE了.)

如下圖所示,

1: 初上電及廣播. 然後 Power Down
2: 外部 SPI 作動,成功收到指令. 接著會 Power Down
3. 外部 SPI 作動,成功收到特別指令.. 且不執行 Power Down.
4. 外部 SPI 作動,成功收到特別指令...之後就一直 keep 在1.6 mA 了.
    直到 5次通訊後, 執行 Power Down. 才降下功耗.
請問, SPI 扮演 SLAVE的角色時. 於 STANDBY 狀態下,如何降低到規格中提到的 uA 等級的功耗?
謝謝!!

  • 補充問題說明:

    於 SPI 通訊 FUNCTION 結尾時, 若不進入POWER DOWN. 

    則執行  以下引用.

    GPIO_init();
    GPIO_setConfig(CONFIG_GPIO_SPI_0_SS, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
    GPIO_setCallback(CONFIG_GPIO_SPI_0_SS, gpioButtonFxn1);
    GPIO_enableInt(CONFIG_GPIO_SPI_0_SS);

    也是這邊開始,讓功耗升高的。

    謝謝。

  • 您好,

    您使用的SDK里的示例是哪个?板子是官方的还是客制化的pcb?

  • 你好,我使用的範例是 simple_peripheral.

    板子是使用官方的開發板。

    謝謝你。

  • 您好,

    您能把程序中您修改的部分通过文件形式发出来吗?

  • 您好.  之前未注意到您有回文.  請參考以下說明:

    首先  我的CS觸發條件寫法如下

     在  simple_peripheral.c  裡頭的 事件如下:

    上圖事件中, 呼叫的 SPI_main_flow() 如下:

    主要的規則是, spi 收到的內容 "A" 若小於 2 執行 Power_shutdown.  否則進入 standby 。

    而問題就出在, 同樣都是讀 SPI. 沒有增加其它程式碼, 但為何進入 standby 之後, 功耗就拉高幾乎要2mA 了.

    而且降不下來。 請你指導是否有什麼地方要特別去執行什麼指令使其功耗DOWN 下來。

    謝謝

  • 您好,

    收到您的跟进消息。我这边和工程师一起研究一下,有结论及时联系您。

    感谢您的支持。

  • 第三張圖更新如下, 同時我的疑惑也是圖片中的紅框處。

    當紅框處,全部 註解後, SPI 完全沒辦理接收資料。
    反之,有了紅框處後, SPI 可正常繼續接收資料. 但也形成瞬間把功耗由 uA 拉昇到 mA,
    且維持住,降不下來。請問我該怎麼修改調整才能降功耗呢?  謝謝~

  • 您好,

    您能否提供与功率分析测量相对应的 SPI 通信线路的逻辑分析仪或示波器屏幕截图?

    Could they also give logic analyzer or oscilloscope screenshots of the SPI communication lines which correspond to the power analysis measurements?

  • 您好, 設備有限.  僅能提供示波器  與功耗機  截圖。

    示波器的  CH1 是 CS腳,  CH2 是 CLK腳。

    示波器的停頓圖面是對應到功耗機 畫面約 34秒處 (很明顯的升高)

    SPI 的 READ / WRITE 都無誤,就是功耗抬高之後,我就算把SPI 排線全拔掉.  還是一直 KEEP 在1.5mA那個準位。

    謝謝。

  • 您好,

    感谢您到目前为止提供的内容。您还有几个SPI API没有分享,比如SPI_TxdataCLear、SPI_sem_init、SPI_Init、SPI_TimeOutInit、SPI_ReadWriteData和SPI_Close。

    在示波器读数中,CS 引脚在没有任何 SPI 活动的情况下切换。这种情况是否是导致问题的必要条件?您是否尝试通过调试器暂停操作以确定 MCU 的状态?应该需要确认 MCU 是否陷入错误或条件循环。

    在 CS 引脚变低和 SPI 数据读/写开始之间有几条指令发生。这可能会导致从机比主机晚启动并移位错误(shift bits out incorrectly)。master设置的SPI时钟频率是多少?客户应降低此速度并进一步测试特定的主 SPI 操作,以进一步了解导致不稳定行为的条件。

  • 您好. 

        補上幾個 FUNCTION 如下圖。

    另外,回覆您的疑問一, 我這邊可以確認並未進入錯誤循環, 因為 DEBUG時, UART 還有持續拋出所收到的SPI 封包內容。
    而 CS 引腳, 在沒有任何SPI活動情況下,若我不加入下述三項宣告定義, 則後續的所有SPI 封包都沒有成功觸發,更不會有 UART字串出現。

    GPIO_setConfig(CONFIG_GPIO_SPI_0_SS, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);
    GPIO_setCallback(CONFIG_GPIO_SPI_0_SS, gpioButtonFxn1);
    GPIO_enableInt(CONFIG_GPIO_SPI_0_SS);

    疑問二, MASTER 的 SPI時鐘頻率我不太確定是多少, 但有量測過 CLK 每個HI_LO 最小都大於24us。而我們目前的狀態
    並非收到的數據不穩定。而是 SPI 通訊後, 也都有正常的執行 SPI_Close() 等行. 為何電流一直沒降下來。
    ( 且KEEP高功耗當下, 我嘗試移除 SPI 四隻I/O, 還是維持功耗,不會掉下來 )

  • 您好,

    SPI 仍可启用,从而阻止 LPM。您应进一步调试他们的系统,以确保一旦 CONFIG_GPIO_SPI_0_SS 引脚返回到高的状态,就会调用 SPI_transferCancel 和 SPI_close。他们还可以启用 transferTimeout 以确保 SPI_transfer 在适当的时间内退出。

    The SPI can still be enabled and thus blocking LPM.  The customer should further debug their system to ensure that SPI_transferCancel and SPI_close are both called once the CONFIG_GPIO_SPI_0_SS pin returns to a high state.  They can also enable the transferTimeout to make ensure that SPI_transfer is exited in an appropriate amount of time.