cancel
Showing results for 
Search instead for 
Did you mean: 

Knowledge Base Articles

Linux MTD SPIドライバでE_ERR/P_ERRステータス エラーを確認する方法– KBA220225- Community Translated (JA)

ChaitanyaV_61
Employee

Linux MTD SPIドライバでE_ERR/P_ERRステータス エラーを確認する方法– KBA220225- Community Translated (JA)

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);

0 Likes
Version history
Revision #:
1 of 1
Last update:
‎Jul 15, 2020 06:53 AM
Updated by:
 
Contributors