こんにちは、 @lukaszadrapa
私は使用しています
HseResponse = HashDataDefSrv(HSE_HASH_ALGO_SHA2_256、(uint32_t) sizeof(test)、 test、&image_hash_length、image_hash、HSE_SGT_OPTION_NONE);
const uint_8 [] として保存された画像の HASH を計算する関数ですが、パラメータが無効であるという結果が返されます。SO、より小さな配列でハッシュをテストすることにしましたが、同様の問題が発生しました。
この問題の解決にご協力ください!
さらに、HSEをRTD 3.0.0で使用すると不具合が見つかりました。それは次のとおりです:-
ブレークポイントなしでコードを実行すると、HSE APIは常にNOT_OK(HSE_OKまたはHSE_SUCCESS以外のエラーを意味します)を応答しますが、これらのAPIを手動でジャンプすると、HSE_SUCCESSが返されます。
こんにちは@lukaszadrapa
解決策(D_CACHE_ENABLE を無効にする)を試しましたが、機能しませんでした。
そして私の追加の問題については何も言及しませんでした。
こんにちは@R_S002
最初のステップとして、プロジェクトのデータキャッシュを無効にしてみてください。これは、HSE_SRV_RSP_INVALID_PARAM エラーの一般的な原因です。HSE との通信に使用されるすべてのデータ オブジェクトは、キャッシュ不可能なメモリに強制的に保存する必要があります。データ キャッシュを無効にすると、これがCASEに当てはまるかどうかがすぐにわかります。
よろしくお願いいたします。
ルーカス
データ キャッシュが原因でない場合は、両方の問題についてさらに詳しい情報が必要になります。
ハッシュ サービスの場合、HSE に送信する直前にサービス記述子のスクリーンショットを撮っていただけますか?
2 番目の問題に関してですが、HSE から返されたエラーコードを正確に確認していただけますか?コードをステップ実行するときに機能する場合は、何らかのタイミングの問題または一貫性の問題である可能性があります。これらの HSE サービスを実行するときに割り込みを無効にしようとしましたか?
こんにちは@lukaszadrapa
オフィスに戻ったらサービスの説明をお伝えします
2 番目の問題は HSE_SRV_RSP_NOT_SUPPORTED を返します。「割り込みを無効にする」についてもう少し詳しく説明していただけますか?
R_S002_0-1764847866495.png
こんにちは@lukaszadrapa
実行前のHASH関数の画像
私のボードで簡単なテストを実行しましたが、同じ問題がCANで確認されました。ハッシュで問題が発生したことはないので、何が起こっているのか確認させてください。今日は時間がないSO、来週確認します。
よろしくお願いいたします。
ルーカス
わかりました。おそらく pHashLength が原因のようです。このポインタが指す変数は、ハッシュ バッファのサイズに初期化する必要があります。ゼロであってはなりません。HSE サービス API リファレンス マニュアルには次のように記載されています。
「入力/出力:ハッシュ長が格納されるuint32_tの位置へのポインタ
バイト単位で保存されます。このサービスを呼び出す際、このパラメータには
ホストによって提供されるバッファのサイズ。リクエストが完了すると、
返される値の実際の長さが格納されます。バッファが小さい場合
ハッシュのサイズより大きい場合、ハッシュは切り捨てられます。
SO、このパラメータの内容を確認してください。
以下は私が過去に使用した簡単な例です。
int main(void) {
hseSrvResponse_t HseResponse;
uint8_t ハッシュ結果[ 64 ] = {0U};
uint32_tハッシュ_長さ = 64U ;
/*FWインストールステータスを確認する*/
終了するまで待機します();
/* 使用したテストベクトル: https://www.di-mgt.com.au/sha_testvectors.html */
/* 入力メッセージ: 文字 "a" (0x61) を 100 万回 (1,000,000) 繰り返します。*/
/* SHA-512 */
/* 期待される結果: */
/* e718483d0ce76964 4e2e42c7bc15b463 8e1f98b13b204428 5632a803afa973eb de0ff244877ea60a 4cb0432ce577c31b eb009c5c2c49aa2e 4eadb217ad8cc09b */
HseResponse = HSE_HashDataBlocking
(
MU0、
HSE_ACCESS_MODE_ONE_PASS、
0,
HSE_HASH_ALGO_SHA2_512、
0x408000U, /* 添付の CMM スクリプトを使用して、このアドレスに 100 万個の 'a' 文字をプログラムします */
1000000, /* データの長さ 100 万 */
ハッシュ結果、
ハッシュ長
);
のために (;;) {
}
}
ハッシュするデータは、外部スクリプトによってフラッシュにプログラムされました。
HASH 関数をどのように試して検証したかの例を共有していただけますか?