0

ハードウェアのメモリ レイアウトについて質問があります。

現在、デバイスAde7978 (Isolated Energy Metering Chipset)のデータシートを読んでいます。
I²C または SPI を介した通信用のレジスタ リスト (表 39、105 ページ) には、すべてのデータのレジスタ アドレスがリストされています。以下は、最初の 3 つの数字の抜粋です。

┌─────────┬─────────┬──────────────────────────────────┬─────────────────────────────────┐
│ Address │ Name    │ Description                      │ Bit Length During Communication │
├─────────┼─────────┼──────────────────────────────────┼─────────────────────────────────┤
│ 0x4380  │ AIGAIN  │ Phase A current gain adjust.     │ 32                              │
│ 0x4381  │ AVGAIN  │ Phase A voltage gain adjust.     │ 32                              │
│ 0x4382  │ AV2GAIN │ Phase A V2P channel gain adjust. │ 32                              │
└─────────┴─────────┴──────────────────────────────────┴─────────────────────────────────┘

値の長さが 32 ビットで、アドレス値が 1 だけ増えるのはどうしてですか?
レジスタはメモリに直接マップされていません。
それらは、メモリのさまざまな部分に内部的にマップされる任意の数値ですか? 誤って 32 ビット数値の中間にアクセスできないようにするために配置しただけですか、それともハードウェア上の理由がありますか?

一般的な答えがある場合は、ぜひ。Ade7978 が具体的にこれを行う理由をたまたま知っているなら、それは私にとっても良いことです.
御時間ありがとうございます。

4

1 に答える 1

1

一般的なバイトアドレス体系とは見た目が異なりますが、実際にはアドレスの割り当てとアドレスが指すデータのビット長は関係ありません。アクセスされるデータを「ワード」と呼びます。ADE7978 のシリアル ポートは、32、16、または 8 ビット ワードで動作します。レジスタ テーブルを読み続けると、32 ビット、16 ビット、または 8 ビット長のさまざまなレジスタが見つかりますが、それらのアドレスは 1 ずつインクリメントされています。

プログラマー モデルのレジスタ テーブルは、次のようなものです。

ADDR1  :  |-----REGISTER 1-----|
ADDR2  :  |--REGISTER 2--|
ADDR3  :  |-------REGISTER 3-------|

回路内では、シリアル ポート内のレジスタ アドレス デコード ロジックが正当なレジスタ アドレスを受信した後、これらのレジスタ選択信号の 1 つをアサートし、対応するレジスタの書き込み/読み取りのみを有効にします。それは次のようなものです:

16-BIT_REG_ADDR --+---- =ADDR1? --ENABLE-->  |----16-BIT_REG1----|
                  +---- =ADDR2? --ENABLE-->  |--8-BIT_REG2--|
                  +---- =ADDR3? --ENABLE-->  |--------32-BIT_REG3--------|

各レジスタは、ビット数に関係なく、全体として扱われます (アクセスされます)。

確かに、シリアルポートを使用して異なるビット長のレジスタにアクセスする場合、コントローラ側のプログラムは、シリアルポートの動作チャートに示されているタイミングで、対応するビット数を提供/読み取る必要があります。

つまり、これはデザイン提供者とユーザーの間の合意です。ユーザーがマニュアルに従ってレジスタにアクセスしている限り、問題はありません。

于 2020-09-19T16:58:17.977 に答える