2316949_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2316949_ja-JP

2316949_ja-JP

PN7642 - スリープモード

やあみんな

PN76_Sys_PCRM_EnterStandby(); 関数を使ってスリープさせようとしています。GPIO3でイベントが発生するまでスリープさせるように指示するだけでは、何も問題はありません。
WUC を使用しようとすると問題が発生しました。
スリープ状態に移行するときにエラーは発生しませんが、IC が直接起動しており、その理由がわかりません。

使用例としては、たとえば 5 分間スリープするために、スリープを複数回入力することです。

論理:

(calc_sleep_en_b == FALSE)の場合

{

dwWakeUpCntValue = calculate_sleep_time(new_lock_values. public_timer_value );

計算されたパブリックカウンター値UI = dwWakeUpCnt値;

タイマーカウンタ値ui = 0;

select_wake_up_reason = E_PN76_PCRM_WAKEUP_SOURCE_GPIO3_LOW | E_PN76_PCRM_WAKEUP_SOURCE_TIMER ;

max_sleep_time_li = 最大スリープ時間;

PCRM_CLEARBITN(PCRM_GPREG6、 PHHAL_HW_PN76XX_GPREG_6_LPCD_ENABLED_POS );

status_pn7642 = PN76_Sys_PCRM_EnterStandby(選択ウェイクアップ理由、最大スリープ時間li);

}

そうでない場合、

{

PCRM_CLEARBITN(PCRM_GPREG6、 PHHAL_HW_PN76XX_GPREG_6_LPCD_ENABLED_POS );

PN76_Sys_PCRM_ReEnterStandby();

}


寝た後:

- BOOT Regsを確認する

- BOOT REG 2と3をリセットする

- カウンター値が予想される計算値と等しくない場合は、 PN76_Sys_PCRM_ReEnterStandby() で再度スリープします。


ウェイクアップの理由とカウンターを確認するためのすべての変数は AO-RAM で定義されています。

__attribute__ ((section( ". noinit .$RAM2" )))揮発性uint8_t magic_num;

__attribute__ ((section( ". noinit .$RAM2" )))揮発性uint8_t sleep_reason_uc;

__attribute__ ((section( ". noinit .$RAM2" )))揮発性uint32_t timer_counter_value_ui;

__attribute__ ((section( ". noinit .$RAM2" )))揮発性uint32_t計算されたパブリックカウンター値ui;


この問題の原因は何でしょうか?

何か見逃しましたか?

これらの規則も少しリセットする必要がありますか?

  • PCRM_SYS_BOOT1_STS
  • PCRM_SYS_BOOT2_STS
  • PCRM_SYS_BOOT3_STS
  • PCRM_SYS_STBY_CFG_REG
  • PCRM_SYS_STBY_CFG_REG
  • PCRM_SYS_LP_CLK_EN_REG
  • PCRM_INT_SET_STATUS_REG
  • PCRM_INT_CLR_STATUS_REG

助けてくれてありがとう。



よろしくお願いいたします。

オリバー

Re: PN7642 - Sleep Mode

やあ、エドゥラド、

PN7642 FW は 02.06、SDK バージョンは 2.15.004 です。
ウェイクアップ カウンターの値は 2690 ミリ秒で 1023 です。

低電力カード検出は必要ありません。スリープして、AO-RAM カウンターを比較し、>= でない場合は反復処理を行い、再度スリープします。

再びスタンバイ状態に入るときに、BOOT レジスタ、割り込みフラグ (PCRM レジスタから) を処理 (リセット) する必要がありますか、それともこれは内部で実行されますか?
スリープ状態に入るとき、BOOT_2 レジスタは 0x00000000 である必要がありますか?

この PDF は知っていますが、これに関する詳細な情報はありません。



よろしくお願いいたします。

オリバー

Re: PN7642 - Sleep Mode

こんにちは@MPEngineering

あなたの調子が良いといいのですが。

使用している PN7642 ファームウェアと SDK のバージョンは何ですか?

PN7642 の低電力機能を評価する場合は、nfc_examples > nfc_low_power_mode を参考にすることを検討してください。また、低電力カード検出を実装する場合、PN7642 SDK では、さまざまな LPCD オプションを示す Nfcrdlib_Ex6_LPCD プロジェクト例が提供されます。

使用している時間 (またはウェイクアップ カウンター) の値を確認してください。最大ウェイクアップ時間は 2690 ミリ秒であることを考慮してください。PN76 ファミリー NFC コントローラーの低電力機能の使用方法も参照することをお勧めします。

よろしくお願いいたします
エドゥアルド。

Re: PN7642 - Sleep Mode

こんにちは、

PN7642 用の開発キットを使用していますか、それともカスタム ボードですか?

ウェイクアップ ソースとして GPIO3 とタイマーを OR 結合していることがわかります。ウェイクアップソースとしてタイマーのみを設定すると(E_PN76_PCRM_WAKEUP_SOURCE_TIMER)、正常に動作するか確認してください。

PN7642 SDK の nfc_low_power_mode デモを使用して、オプション 1 -> カウンターをウェイクアップとしてスタンバイに入るを選択し、オプション 2 -> 2690ms (低電力スタンバイ最大間隔) を選択して、期待どおりに動作するかどうかをお知らせください。

よろしくお願いいたします
エドゥアルド。

Re: PN7642 - Sleep Mode

こんにちは、

このトピックに関してサポート チケットを送信されたことは承知しております。コミュニケーションのチャネルを 1 つだけ維持するために、社内チケットで議論を続けてください。

よろしくお願いいたします
エドゥアルド。

Re: PN7642 - Sleep Mode

おい、

1. はい、カスタム ボードで nfc_low_power_mode デモを実行でき、動作します。

2. PN7642 をホストなしのスタンドアロン MCU として使用します。実際の RTC がないため、定期的にスリープ状態にする必要があります。たとえば、最大スリープ時間を 2650 ミリ秒にして 5 分間スリープしたい場合、スリープ サイクルを 113 回繰り返します。SO: 起動して、AO-RAM カウンター変数を確認します。カウンター変数が 113 未満の場合、カウントアップして再度スリープします。

3. プロジェクトで PN76_Sys_PCRM_EnterStandby() などの API 関数を使用すると、IC は最大時間 (2.65 秒) スリープすることはありませんが、AO-RAM カウンターに到達し、期待どおりにコードを実行します。API を呼び出すときにエラーは発生しません。あまりにも速すぎます。

4. はい、MAX_SLEEP_TIME は 1023 です。

5. LPCD モードを使用したくありません。GPIO3 と一緒に WUC だけを使用する可能性もあるはずです。


この API の問題の他に、API 関数を使用しないようにしました。代わりに、PCRM Regs を直接使用します。現在、MCU は 1 回 (2.65 秒) スリープしますが、2 回目はスリープしません。何かがそれを妨げているため、再び眠りにつくのだと思います。
私は安全でした:
- ブート1 (0x00000000)
- BOOT2 (0x00022000 -> GPIO3 および WUC)
- BOOT3(0x00000000)、
- PCRM_INT_ENABLE ( 0x4060010 )、
- EEPROM 内の PCRM_INT_STATUS (0x00000104)。

PCRM_SYS_STBY1_CTRL_CLR_BOOT_REGS_MASKとPCRM_SYS_STBY1_CTRL_CLR_RST_STS_MASKを使ってBOOT2をクリアしようとしましたが、効果がありません。PCRM_INT_STATUSは謎です。GPIO2_ZIFが有効になっていないからでしょうか?

防止フラグを削除するにはどうすればいいですか?


よろしくお願いいたします。
オリバー

Re: PN7642 - Sleep Mode

こんにちは、

カスタムボードです。
タイマー (E_PN76_PCRM_WAKEUP_SOURCE_TIMER) のみを使用しても機能しません。
論理的には動作しますが、IC は 2650 ミリ秒間スリープしません。最後に、カウンターは予想されるスリープ サイクルと等しくなり、スイッチをオンにします。

例をカスタム ボードにフラッシュしたところ、動作しました。

00> 1 PCRM_SYS_STBY_CFG: 0x00000001
00>
00> ブート1レジスタ: 0x00000010
00> ブート2 レジスタ: 0x00000000
00> ブート3 レジスタ: 0x00000020
00> ---PN7642 IC構成の詳細---
00> ****************************************************************************************
00> *****警告*****: PN7642 IC は以下の設定で構成されています。
00> *****警告*****: IC 設定はボード設定と一致する必要があります。不一致があると、PN7642 IC が損傷する可能性があります。
00> 電源/DCDC構成:
00> カードモードでのDC-DCの使用: DC-DCはバイパスではなく電源供給されます
00> リーダーモードでのDC-DCの使用: DC-DCはバイパスではなく電源供給されます
00> VUP入力電圧:内部DC-DC使用:自動バイパスおよびVDDPAに対する可変ブースト付き
00> LPCD用DC-DCの使用: LPCD用DC-DCの使用は無効
00> RFLD/NFCLD キャリブレーションステータス: キャリブレーションされていません
00> DPC関連の設定:
00> DPC アクティブターゲットモード: 有効
00> DPC はアクティブ イニシエーター モードです: 有効
00> DPC のリーダー/パッシブ イニシエーター モード: 有効
00> オートコレクト設定:
00> ランダム UID の有効化: 無効。EEPROMに保存されたUIDを使用する
00> ****************************************************************************************
00>
00> Test_a 変数:0
00>
00> 低電力モードの例:
00> ウェイクアップカウンタの期限切れ後のスタンバイ後の起動
00> ブート2 レジスタ: 0x00000000
00> ブート3 レジスタ: 0x00000020
00> Test_a 変数:0
00> モードを選択します:
00> 1 -> カウンターをウェイクアップとしてスタンバイ状態に入る:
00> 2 -> 外部RFをウェイクアップとしてスタンバイ状態に入る:
00> 3 -> カウンターをウェイクアップとして超低電力スタンバイに入る:
00> 4 -> 外部RFによるウェイクアップで超低電力スタンバイに入る:
00> 5 -> ULPCDキャリブレーションを入力:
00> 6 -> ULPCD検出を入力:
00> 7 -> LPCDキャリブレーションを入力:
00> 8 -> LPCD検出を入力:
< 1
00> 1
00> 以下のオプションからウェイクアップ間隔を選択します。
00> 0 -> 500ミリ秒:
00> 1 -> 1000ミリ秒:
00> 2 -> 2690ms (低電力スタンバイ最大間隔):
00> 3 -> 4095ms (超低電力最大間隔) :
2未満
00> 2 PCRM_SYS_STBY_CFG: 0x00000001
00>
00> ブート1レジスタ: 0x00000010
00> ブート2 レジスタ: 0x00000000
00> ブート3 レジスタ: 0x00000020

Boot Regs、PCRM INT Regs などを操作する必要がないことを確認できますか?
これは内部的に行われていると思います (NXP FW / FSM)。例では処理は示されていません。

他に何かアイデアはありますか?


よろしくお願いいたします。

オリバー

Re: PN7642 - Sleep Mode

こんにちは、

私の理解では、カウンターをウェイクアップ ソースとして使用すると、PN7642 SDK から nfc_low_power_mode デモを正常に実行でき、スタンバイ モードが期待どおりに動作する、ということになりますが、これは正しいですか?

また、カスタム実装では、PN7642を一定時間(例えば、デバイスは 2690 ミリ秒間スタンバイ状態になります。この「ウェイクアップ -> スタンバイ」プロセスは 5 分間繰り返されます) これも正しいですか?このようなアプリケーションが必要となるシナリオについて説明していただけますか?

「IC は 2650 ミリ秒間スリープしない」というのは、デバイスがスタンバイ状態に入るのを何かが妨げているという意味ですか?それとも、ウェイクアップ間隔が完了する前にデバイスがウェイクアップしてしまうのでしょうか?

実装では、dwWakeUpCntValue = calculate_sleep_time(new_lock_values.public_timer_value) を計算していることがわかります。ただし、max_sleep_time_li = MAX_SLEEP_TIMEを設定し、この変数を PN76_Sys_PCRM_EnterStandby(select_wake_up_reason, max_sleep_time_li) にパラメータとして渡します。N76_Sys_PCRM_EnterStandby のパラメータ dwWakeUpCntValue に対して MAX_SLEEP_TIME 値が有効であることをご確認ください。

これはスタンバイ時の LPCD モードの一般的なシーケンスです。参考になるかもしれません。

EduardoZamora_0-1771279070773.png

よろしくお願いいたします
エドゥアルド。


Tags (1)
No ratings
Version history
Last update:
‎02-26-2026 05:29 AM
Updated by: