これらは、MPC5746C のレジスタ保護の下でロック メカニズムを実装しているモジュールです。
0xFFFB0140, /* CMU------------*/
0xFFFB0040, /* FXOSC----------*/
0xFFFB0180, /* MC_CGM --------*/
0xFFFB8000, /* MC_ME ---------*/
0xFFFA8000, /* MC_RGM --------*/
0xFFF50000, /* MEMU_0 -------*/
0xFFFB0080, /* PLLDIG --------*/
0xFFFA0400, /* PMCDIG --------*/
0xFFFC0000, /* SIUL2 ---------*/
0xFFFB0100, /* SXOSC ---------*/
0xFFF9C000 /* LPU_CTL -------*/
レジスタ: ME_MCTL (モード制御レジスタ、32 ビット保護、表 77-5 に従ってオフセット 0x4) と一致します。
ベースアドレス: 0xFFFB0000。
保護サイズ: 32 ビット (4 バイトすべてが保護されます)。
計算
通常のアドレス:ベース + オフセット = 0xFFFB0000 + 0x4 = 0xFFFB0004
ミラーアドレス(エリア3) :ベース + 0x2000 + オフセット = 0xFFFB0000 + 0x2000 + 0x4 = 0xFFFB2004
ソフトロックビットアドレス(エリア4) :
エリア 4 のオフセット: offset/4 = 0x4 / 4 = 0x1。
アドレス: ベース + 0x3800 + オフセット/4 = 0xFFFB0000 + 0x3800 + 0x1 = 0xFFFB3801。
32 ビット レジスタの場合、4 つの SLB (SLB0 ~ SLB3) すべてが 4 つのバイト (たとえば、0x4 ~ 0x7) を制御します。
ソフトロック
オプション 1: ミラー アドレスに書き込む:
0xFFFB2004 に 32 ビットの値を書き込みます (例: モード遷移を開始するには 0x80000000。有効な値については MC_ME の章を参照してください)。
これにより、0xFFFB0004 の ME_MCTL が更新され、0xFFFB3801 の SLBRn レジスタの SLB0 ~ SLB3 が設定されます。
例: *(volatile uint32_t *)0xFFFB2004 = 0x80000000;
オプション2: 直接SLB書き込み:
SLB0~SLB3を設定するには、0xFFFB3801に書き込みます。
4バイトすべてをロックするには、0xFF(WE0~WE3=1、SLB0~SLB3=1)を書き込みます。
例: *(volatile uint8_t *)0xFFFB3801 = 0xFF;
ロック解除
0xF0 を 0xFFFB3801 (WE0~WE3=1、SLB0~SLB3=0) に書き込んで SLB0~SLB3 をクリアし、レジスタのロックを解除します。
例: *(volatile uint8_t *)0xFFFB3801 = 0xF0;
ハードロック
0x00000001 を 0xFFFB3FFC に書き込んで GCR.HLB を設定し、リセットされるまで SLB をロックします。
例: *(volatile uint32_t *)0xFFFB3FFC = 0x00000001;
以下は、4 つのアドレス セットすべてが有効化され、CAN R/W なレジスタ セットの例です。
以下は、ベース + オフセットおよびミラー アドレスが有効になっていて R/W がCANで、他のアドレスは設定できないレジスタ セットの例です。
SLB ビットはソフト ロックを確認し、GCR ビットはハード ロックを実装するように設定されているため、これは深刻な問題を引き起こします。
すべての MC_CGM キャップ レジスタで同じ問題が見つかります。
これらの異なる動作の理由は何でしょうか。一部のアドレスは変更可能ですが、その他のアドレスは予約されています。
こんにちは、
いずれかのモジュールをハードロックすると、他のすべてのモジュールも自動的にハードロックされ、低電力モードで問題が発生します。FXOSC/SXOSC と CMU をここでハードロックしたくないためです。
レジスタ保護はPbridgeに適用されます。
PBRIDGE には MC_CGM モジュールがあります。
これにより、ペリフェラルが MC_CGM の下にマップされます。これを解決するには、HLB ではなく SLB を使用する必要があるようです。
HLB は MC_CGM 全体をロックします。
よろしくお願いいたします。
ピーター
こんにちは、ピーターさん。
ご協力ありがとうございます。すべてのモジュールに対してソフト ロックと監視 SLB を設定できるようになりました。
ハード ロック GCR ビットに関してもう 1 つ質問があります。あなたの説明によれば、CMU、FXOSC、SXOSC、PLLDIG、MCCGM のすべての MCCGM キャップ モジュールには、1 つの共通ベース アドレス (0xFFFB0000) があるはずです。
77.1.1項によればレジスタ保護構成、注記では低電力モードでの動作について説明します。
前述したように、ベース アドレスが同じ場合、いずれかのモジュールをハード ロックすると、他のすべてのモジュールも自動的にハード ロックされ、低電力モードで問題が発生します。FXOSC/SXOSC と CMU をここでハードロックしたくないためです。
この問題を回避する方法はありますか。
ありがとうございます。よろしくお願いします。
こんにちは、
SLBの結果は次のとおりです。
CMU_LFREFR 32 - アドレスのベースとオフセット
CGMモジュールのベースは0xFFFB_0000です
CMUオフセットは0x140です
CGM LFREFRオフセットはモジュールベースから0x14Cです
ミラーへの書き込みを介してCMU_LFREFRのSLBを設定しました
よろしくお願いいたします。
ピーター
こんにちは。これも機能していません。
CMU_LFREFR 32 | オフセット 0xCh | 保護サイズ - 16 (バイト 2 と 3) |
0xFFFB0000 , /* CMU----------*/
ベースアドレス -0xFFFB000C
ミラーアドレス -0xFFFB200C
SLB - 0xFFFB3803
GCR - 0xFFFB3FFC
こんにちは、
簡単なテストを見る: MC_CMU - CSR
ベース アドレス - 0xFFFB014C - これはオフセット アドレスです。基地ではありません。
MC_CMU モジュールのベースは 0xFFFB 0140 です。
ミラーアドレス -0xFFFB214C
ベース+オフセット+ミラー
SLB -0xFFFB3943
参照マニュアルに記載されている CGM 全体のベース アドレスを取得します。
SO計算は次のようになります。
0xFFFB0000 + 3800 + SLBの位置
GCR - 0xFFFB413C
同上
0xFFFB0000+3FF0
よろしくお願いいたします。
ピーター
こんにちは、ピーター。SLB と GCR が動作していないサンプルがいくつかあります。これらのアドレスをチェックして、異なる動作が表示されるかどうかをCAN確認してください。そうでない場合、これらのモジュールに何が問題があるのでしょうか?
1. MC_CMU - 0xFFFB0140 - { MODULE_CMU, 0xC,REG_SIZE_16}, CMU_LFREFR
2. MC_CMU - 0xFFFB0140 { MODULE_CMU, 0x18,REG_SIZE_32}, CMU_MDR
3. PLLDIG 0xFFFB0080 - { MODULE_PLLDIG, 0x20, REG_SIZE_16}, PLLDIG_PLLCR
4. PLLDIG 0xFFFB0080 - { MODULE_PLLDIG, 0x28,REG_SIZE_32}, PLLDIG_PLLDV
5. PMCDIG 0xFFFA0400 - { MODULE_PMCDIG, 0x0,REG_SIZE_32},
6. PMCDIG 0xFFFA0400 - { MODULE_PMCDIG, 0x10,REG_SIZE_32},
こんにちは、
PREG_PROT をチェックしたところ、リファレンスマニュアルに記載されているとおりに動作します。
ME_CGMレジスタSC_DC0について:
ベース: 0xFFFB0000 + オフセット 7E8
ミラー: 0xFFFB07E8
= ベース (0xFFFB0000) + オフセット (7E8) + ミラー (0x2000)
この例では、SC_DC0 フォーム ME_CGM モジュールをソフト ロックでロックしています。
内訳は次のとおりです。
エリア 4: 1.5 KB で、エリア 1 のバイトごとに 1 ビットのソフト ロック ビットを保持します。1 つのモジュール レジスタ ワードに関連付けられた 4 つのソフト ロック ビットは、メモリ マップ内のバイト境界に配置されます。ソフト ロック ビット レジスタは、ビット マスクを使用して直接書き込むCAN。
SO、対応する SLB 設定を確認するには、ソフト ロック ビットの領域を 8 で割る必要があります。
ベース(モジュール)+ 3800 + (エリア1のバイトあたり1ビット)
ハードロック ビットの場合は、モジュール全体で 1 つになります。
エリア 5 は 512 バイトの大きさで、保護モードの構成ビットを保持します。モジュールごとに 1 つの構成ハード ロック ビットがあり、これによりソフト ロック ビットへのそれ以上の変更がすべて防止され、一度設定されるとシステム リセットによってのみクリアCANます。他のビットが設定されている場合は、保護されたモジュールへのユーザー アクセスが許可されます。
ベース(モジュールの)0xFFFB0000 + オフセット 3FFC
GCRはエリア5の端にあります。
よろしくお願いいたします。
ピーター
こんにちは、
テストしてできるだけ早くご連絡いたします。
よろしくお願いいたします。
ピーター