NXPの専門家の皆さん、こんにちは。
最近、プロジェクトのMCUをS32K118からS32K312EVB-Q172に変更しました(SDK 5.0.0を使用)。HF01)。どちらも FIRC 48Mhz で動作しています。
しかし、Flexio モジュールを使用して I2C マスターを設定する際に行き詰まりました。ターゲット ボー レートは 400 kHz です。
しかし、以下の問題が見つかりました...
1.ボーレートの計算式はK1シリーズとK3シリーズで異なります。
K3 シリーズでは、ボーレートは 2 つのパラメータ (I2c タイマー比較値と I2c FlexIO プリスケーラ) によって計算されますが、K1 シリーズ SDKs ではボーレートを使用してパラメータを計算します。
InputClockとDividerをパラメータとしてボーレートを計算するSDKコードを参照します。
S32K3xx の場合: baudRate = (inputClock + divider + 2U) / (2U * ((uint32_t)divider + 2U));
S32K1xx の場合: ボーレートは開発者によって割り当てられ、ボーレートを使用して分周値と分周値を計算します。
SO私の質問は、これらの式は互いに等しくないようです。どうすれば希望するボーレートを取得できるのでしょうか?
cmpvalue を 58 に設定し、prescaler をFLEXIO_TMR_DECREMENT_ON_FLEXIO_CLK_DIV_1 に設定してみましたが、400 kHZ が生成されるはずですが、LA 測定が 295 kHZ 付近で止まってしまいます。
2. S32 Design Studio 周辺機器 GUI でボーレートの計算が不正確になります。
I2c タイマーの比較値を変更しましたが、車載生成されたボーレート値は GUI と Flexio_I2c_Ip_PBcfg.c で変更されません。
事前に返信いただきありがとうございます!
こんにちは@acnhyxgxl1
RTD_I2C_UM pdf に基づいてボー レートを計算する方が簡単だと思います (これがツールがボー レートを計算する方法であるため)。
比較値は次のようにして求めることができます。
ボーレート = CLK / (2 * (CMP + 9))
CMP = (CLK / (BR * 2)) - 9
400kHzボーレート、FIRC 48MHz、CORE_CLK div = 2の場合:
CMP = (24MHz / (400kHz * 2)) - 9
CMP = 21
Flexio_I2c_Ip_CS_0_PBcfg.c ファイルに正しい値を生成します。
プルアップ抵抗の値は立ち上がり時間と速度にCAN影響する可能性があることに注意してください。この使用CASEでは 4k7 オームの抵抗器を使用することをお勧めします。計算によって値のサイズを決定するために、次の資料を参照することもCANます。
最後に、GUIとボーレートが変更されない現象についてですが、これは設定ツールのバグであることが確実です。実際のボーレートは手動で計算または測定する必要があるかもしれません。このツールのバグについては社内チームに報告いたします。ご連絡いただきありがとうございます。
よろしくお願いします、
ジュリアン