デバイスFXTH870902DT1をプログラムするには、「消去してプログラム」キーを押します。
工場出荷時にチップに付属する内部ファームウェアはありません。
しかし、ファームウェア アドレス 0xE000 にアクセスできず、デモ コードは「u8Status = TPMS_READ_VOLTAGE(gu16UUMA);」で停止します。なぜでしょうか?
こんにちは、
A. デバッグ ボタンを使用してデバイスをプログラムすると、デバイスにフラッシュしたコードをデバッグ ウィンドウで読み取ることができるようになります。フラッシュされたのは確かに.absですファイル。そして、このファイルを他の FXTH87 デバイスにロードすることもできます。
CW に関するより具体的な質問については、CW マニュアルとマルチリンク仕様を参照するか、CW コミュニティ スペースをご利用ください。
C. 「LEDが点灯しなくなりました。なぜですか?」
LF ブロックが有効になると、GPIOB は高インピーダンスになります。データシートを参照してください:
「さらに、ステップ 1 をマスクして「 (void)u8fnDALDetectDerivative(); 」または「gu8Derivative = 0xFF」または「gu8Derivative = 0x00」とすると、ステップ 4 で LED が点灯しますが、なぜでしょうか?」
u8fnDALDetectDerivative 関数は、変数 gu8Derivative の正しい値を設定します。
ファームウェア関数が呼び出されると (たとえば、TPMS_LF_ENABLE)、プログラムはジャンプ テーブルに移動して、関数の正しいファームウェアの場所にジャンプします。正しいアドレスにジャンプするために、ジャンプ テーブルで gu8Derivative が使用されていることがわかります。
/* void TPMS_LF_ENABLE(UINT8 u8スイッチ) */
#TPMS_LF_ENABLEを定義します(( void (*)(UINT8))(u16fnDALLinkFmw( gu8Derivative , FN_LF_ENABLE)))
したがって、gu8Derivative が正しくない場合、プログラムは TPMS_LF_ENABLE ファームウェア関数にジャンプしないため、関数は実行されず、GPIOB は高インピーダンスに設定されません (そのため、LED はオンのままになります)。
十分に明確であることを願います。
よろしくお願いいたします。
トーマス
こんにちは、
ご回答ありがとうございます。
A. 項目 3 について: PE マルチリンク ユニバーサルは FXTH870902DT1 のプログラミング専用ですが、読み取れませんか?
読み取りとは、プログラム ファイル *.abs などのコードの FXTH870902DT1 を読み取り、このファイルを別のデバイスにプログラムできることを意味しますか?
B. 点滅が速すぎて見えないのでしょうか?瞬きはどうしましたか?LED を GPIO に接続し、この GPIO を定期的に切り替えるだけでしたか?
速くする必要はありません。ただ軽くするだけです。1 つの GPIO によってリードされるドライバ 1 のみ。はい、今のところ問題はありません。
C.しかし、次のような別の問題も見つかりました。
/* 導関数を一度決定する */
(void)u8fnDALDetectDerivative(); //1.gu8Derivative = ONE_AXIS_DERIVATIVE_INDEX; ONE_AXIS_DERIVATIVE_INDEX をここで 1 と定義します
/* 割り込みフラグをクリアする */
TPMS_INTERRUPT_FLAG = クリア;
フレームID = クリア;
/* データモードのLFRを設定する */
vfnDataModeInit();
vfnClearReceivedBuffer();
PTBD = 0x00; //2.normal、LEDを消灯
TPMS_LF_ENABLE(SET); //3.このコードで初めてFreescaleファームウェアにアクセスする
PTBD = 0x0f; //4. LED が点灯しなくなりました。なぜでしょうか?
さらに、ステップ 1 をマスクした場合、ステップ 4 で LED がオンになります (void)u8fnDALDetectDerivative(); または "gu8Derivative = 0xFF" または "gu8Derivative = 0x00" ですが、なぜでしょうか?
こんにちは、
以下に、TPMS アプリ チームの同僚 Camille からの質問に対する詳細な回答を示します。
1.ファームウェア機能のソース コードにアクセスしなくても、独自のコードをデバッグすることができます。SO、デバッグ中のコードでは、ファームウェア関数に到達すると、関数のソース コードにアクセスすることはできませんが、この関数をステップオーバーして次の行でデバッグを続行することができます。
たとえば、デバッグボタンを使用してデバイスをプログラムする場合、プログラミングが完了すると、(通常どおり) main の先頭で停止し、ここからステップ オーバーまたはステップ インを使用して行ごとに実行できるようになります。ファームウェア関数に到達しても、関数のソース コードを表示することはできませんが、ステップ オーバーして、使用されている変数の変化を確認することはできます。
2. 「デバイス全体を消去」をクリックすると、0xE000 から 0xFFFF までの Freescale フラッシュを含む、メモリ全体が消去されます (0xC000 から 0xFFFF までのフラッシュ)。そのため、Freescale ファームウェアが失われ、再プログラムすることができなくなるため、デバイスを使用できなくなります。SO、 「デバイス全体を消去する」は使用しないでください。
[消去してプログラム]をクリックすると、ユーザーがアクセス可能なフラッシュ (0xC000 ~ 0xDFFF) のみが消去され、指定したアプリケーション ファイルで再プログラムされます。これは、デバッグ モードを使用せずにデバイスをプログラムするために使用する必要があります。
3. デバッガーに入ると、メモリパネルを使用してメモリに書き込まれた内容を読み取ることができ、レジスタの内容にアクセスできるようになります。CW10.6ではデバイスをプログラミングした後以外にデバッガーに入る手段は知りません。SO、私の知る限り、CW10.6 では、デバッグボタンを使用してデバイスをプログラムした後にのみ、デバイスを読み取ることができます。
4. デバイスをリセットすると、フラッシュの Freescale ゾーンにあるリセット割り込みベクターが呼び出されます。すでにご存知のとおり、このゾーンのソース コードにはアクセスできません。
コードにブレークポイントを配置して [リセット] をクリックすると、リセット割り込みベクターにアクセスできなくなります (最初に[使用可能なソースがありません... ] と表示されます)。ただし、その後 [実行] をクリックすると、プログラムは Freescale ゾーンを離れ、メインの先頭から再起動し (リセットを行ったため)、配置したブレークポイントで停止します。したがって、デバッグを続行できるようになります。
5. いいえ、特に設定はございません。デバッグ モードの場合は、デバッグ セッションを終了し、マルチリンクを切断して電源を入れ直すだけで、プログラムの実行が開始されます。
点滅が速すぎて見えないのでしょうか?瞬きはどうしましたか?LED を GPIO に接続し、この GPIO を定期的に切り替えるだけでしたか?
さらに詳しい情報が必要な場合は、再度お知らせください。
よろしくお願いいたします。
トーマス
こんにちは、
ご返信ありがとうございます!
FXTH870902DT1 をデバッグしたときにいくつか疑問が見つかりました。
1. アドレス「 0xE000 0xFFFF 」でデバッグするときにアクセスできない理由はわかりましたが、「 0xE000 0xFFFF 」に保存されている Freescale のファームウェアを使用する場合、どのようにコードをデバッグすればよいのでしょうか?
2. 「ファームウェアジャンプテーブル」の「0xE000 0xE03F」または「ファームウェアフラッシュ」領域の「0xE040 0xFFFF」のアドレスが消去されます。
プログラミングツール「PE Multilink universal」を使用する場合、「デバイス全体を消去」キーまたは「消去してプログラム」キーをクリックしますか?
3. 私は新人です。ちなみに、PE マルチリンク ユニバーサルは FXTH870902DT1 のプログラミング専用ですが、読み込まれませんか?
4. FreescaleのWebセットからダウンロードしたコード「FXTH87xx02_Starter_Project_CW10」をデバッグしました。
1 つの LED を点灯するコードを追加し、「ステップ オーバー」キーをクリックして、LED を段階的に点灯し、「リセット」キーをクリックすると、「"0xFFFF (0xFFFF)() " に使用できるソースがありません」という情報が表示されますが、これはどういう意味ですか。
5. 「ステップオーバー」キーをクリックすると LED が点灯しますが、FXTH870902DT1 をプログラムして電源を入れ直しても何もアクションが起こらない場合、PE マルチリンク ユニバーサルの設定が必要ですか?
よろしくお願いいたします。
空のオーロラ
こんにちは、
0xE000 から 0xFFFF までのフラッシュ メモリには、ファームウェア機能 (など) が含まれています。このゾーンはデバッグではアクセスできません。これは Freescale 専用に予約されたフラッシュ ゾーンであり、ユーザーはアクセスできません。
CW プロジェクトで、TPMS_READ_VOLTAGE を右クリックして「宣言を開く」を選択すると、ジャンプ テーブルにリダイレクトされることがわかります。
#TPMS_READ_VOLTAGE を定義 ((UINT8(*)(UINT16*))(u16fnDALLinkFmw(gu8Derivative, FN_READ_VOLT)))
このファイルでは関数のアドレスを確認できます。
#TWO_AXES_READ_VOLT ((UINT16)0xE003) を定義します
つまり、この関数が呼び出されると、プログラムはジャンプ テーブルを使用して 0xE000 から 0xFFFF までの間の関数にジャンプします。そして、プログラムが 0xE000 と 0xFFFF の間のゾーンにジャンプすると、このゾーンはデバッグではアクセスできないため、デバッグでコードを追跡することはできなくなります。
追加情報が必要な場合はお知らせください。
よろしくお願いいたします。
トーマス