ここでは、python-bchlib モジュールを使って BCH 符号の計算を行う方法を紹介します。
紹介する内容は、以下の環境で実行しています。
python | v3.10.4 |
bchlib | v0.14.0 |
python の bchlib とは
概要
python の bchlib は、BCH符号データの計算やデータのビット化け(bitflips)を修復する機能を提供する
python のモジュールです。GitHub で公開されています。
BCH 符号とは、データ化けが発生しやすい NAND メモリに書き込む ECC(Error Check and Correct)等、
誤り検出・訂正を行うことが可能なデータの符号技術です。
参考
NAND Flash メモリについては、「今さら聞けないNANDフラッシュ入門」をご覧ください。
環境構築
pip
command
$ pip install bchlib
ソースコード
GitHub から任意のソースコード一式をダウンロードして、以下を実行します。
command
$ pip install .
ライセンス
現在は、GPLv2(GNU General Public License v2.0)が適用されています。
bchlib を使って ECC を計算
ECC を計算するために、以下のメソッド・プロパティを使用します。
コンストラクタ:BCH(polynomial, t [, reverse])
bchlib を扱うオブジェクトを生成します。
polynomial | 原子BCH符号の値 |
t | 誤り訂正可能なビット数 |
reverse | 扱うデータのビット反転(True or False) |
メソッド:encode(data [, ecc])
入力した data の BCH 符号を行います。計算された ecc の値を返します。
data | バイナリデータ |
ecc | 指定された ECC の値から計算 |
プロパティ:ecc_bytes
計算された ecc のバイト数を示します。
サンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import bchlib import os # create a bch object BCH_POLYNOMIAL = 0x402B BCH_BITS = 8 bch = bchlib.BCH(BCH_POLYNOMIAL, BCH_BITS) # create random data data = bytearray(os.urandom(512)) # encode ecc = bch.encode(data) print('ecc size = ', bch.ecc_bytes) print('ecc = ', ecc) |
原子BCH符号
Polynomial には、0x25、0x43、0x83、0x11d、0x211、0x409、0x805、
0x1053、0x201b、0x402b、0x8003 などを使用することが多いようです。
実行結果
(PY310_BCH) D:\bchlib\sample>python test.py
ecc size = 14
ecc = bytearray(b'h\x8bgd:_\xe9B\xfb\xdd\x08\x1e\xb4?')