Linux MTD SPIドライバでE_ERR/P_ERRステータス エラーを確認する方法– KBA220225- Community Translated (JA)
- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
Community Translated by HiOm_1802421 Version: **
Translation - English: How to Check E_ERR/P_ERR Status Errors in the Linux MTD SPI Driver – KBA220225
質問:
Linux MTD SPIドライバにフラッシュ プログラム/消去 失敗ステータスの確認を追加するにはどうすればよいですか?
回答:
Linuxマスターコードは、SPIドライバのプログラム/消去 失敗を確認しません。次の手順は、このエラーチェック機能をドライバに追加します。
1. E_ERRおよびP_ERRビット フィールド定義をFL-SおよびFS-SのSPIドライバーに追加します。(FL-Lの場合は、ステータス レジスタ-1ではなくステータス レジスタ-2を使用します)
- include/linux/mtd/spi-nor.hを開きます
- ステータス レジスタ ビットの定義を探し、以下を置き換えます。
#define SR_TB BIT(5) /* Top/Bottom protect */
以下へ置き換え: #define SR_E_ERR BIT(5) /* Erase error occurred */
#define SR_P_ERR BIT(6) /* Programming error occurred */
- Flash opcodesセクションを探し、Clear Status Register opcodeを追加します
#define SPINOR_OP_CLSR 0x30 /* Clear status register */
2. E_ERRおよびP_ERRステータス ビット確認をステータス レディ確認サブ ルーチンに追加します。
- drivers/mtd/spi-nor/spi-nor.cを開きます。
clear_st()
サブ ルーチンを追加します。
/*
* Clear status register
* Returns negative if error occurred.
*/
static inline int clear_sr(struct spi_nor *nor)
{
return nor->write_reg(nor, SPINOR_OP_CLSR, NULL, 0);
}
- 消去またはプログラム失敗が発生したときのユーザー通知サブルーチンを追加します。例:
user_error_handler()
static inline int spi_nor_sr_ready(struct spi_nor *nor)
を探します。- 次のコードを変更します。
int sr = read_sr(nor);
if (sr < 0)
return sr;
else
return !(sr & SR_WIP);
以下へ変更:
int sr = read_sr(nor);
if (sr < 0)
return sr;
else if ((sr & SR_E_ERR) || (sr & SR_P_ERR))
{
user_error_handler();
write_enable(nor);
clear_sr(nor);
}
return !(sr & SR_WIP);