BCH码在物联网存储系统中的应用研究

2023-06-22 02:16荆坤坤汪丹丹朱倩纪启国陈芳
现代信息科技 2023年2期
关键词:物联网

荆坤坤 汪丹丹 朱倩 纪启国 陈芳

摘  要:随着物联网设备对存储容量的需求不断扩大,Nand Flash作为主流的存储设备在物联网系统中应用非常广泛,为了保证数据的准确性,选择一种性能良好的纠错算法至关重要。目前最为常用的是BCH码,由于嵌入式存储系统MCU没有能够实现BCH编解码的硬件控制器,需要用软件来实现,文章通过对BCH码算法和Nand Flash物理特性的研究,为物联网应用场景提供一种软件编/译码方案,从而提高物联网系统存储数据的完整性和可靠性。

关键词:BCH码;Nand Flash;物联网;检错纠错

中图分类号:TP274    文献标识码:A 文章编号:2096-4706(2023)02-0164-03

Application Research of BCH Code in IoT Storage System

JING Kunkun, WANG Dandan, ZHU Qian, JI Qiguo, CHEN Fang

(Anhui Vocational College of City Management, Hefei  230011, China)

Abstract: With the increasing demand for storage capacity of IoT devices, Nand Flash, as a mainstream storage device, is widely used in IoT systems. In order to ensure the accuracy of data, it is very important to select an error correction algorithm with good performance. At present, the most commonly used one is BCH code. Since the embedded storage system MCU does not have a hardware controller which could achieve the BCH coding and decoding, it needs to be implemented by software. Through the research on BCH code algorithm and Nand Flash physical characteristics, this paper provides a software coding/decoding scheme for IoT application scenarios, so as to improve the integrity and reliability of the data stored in the IoT system.

Keywords: BCH code; Nand Flash; IoT; error detection and correction

0  引  言

近年来,物联网技术快速发展,广泛应用在智能家居、工业控制、智慧城市、智能可穿戴等多个领域。随着应用场景日益复杂,功能逐渐多样化,图像、音视频数据不断增大,物联网设备对存储容量的需求不断扩大,传统MCU片内Flash外和少量外部Nor Flash,已经无法满足需求。价格低廉、容量大的Nand Flash成为越来越受青睐的存储方案。

然而,Nand Flash因制造工艺和设计原理的限制,存在电荷漂移、编程干扰、坏块等问题,一旦发生Bit Flip(位翻转),其上存储的数据会发生错误,可靠性无法保障。针对这一问题,业界引入了ECC(Error Correcting Code)机制,对已经发生错误的bit位进行纠正。具体实现上,ECC通常采用汉明码、CRC、RS码、BCH码等。BCH码相比其他编码,检错/纠错能力更强,在Nand Flash中使用更普遍。

虽然物联网应用场景对Nand Flash有强烈的需求,技术上却存在壁垒。Nand Flash需要的BCH码通常是由SoC上的硬件控制器处理的,而MCU没有对应的硬件控制器(通过SPI总线与Nand Flash传输数据)。该问题可借鉴某些SoC的做法来解决,即:采用软件BCH编解码运算。相比SoC、MCU的运算能力弱,采用软件编解码的方法,会导致读写性能变差,影响整个系统的效率,该方案停留在功能打通却难以产品化的境地,亟待解决。

综上,针对上述问题,在MCU有限的资源条件下,通过技术的研究与创新,打破既有的Nand Flash技术壁垒,不带来额外的成本开销,实现Nand Flash存储真正的落地,达到产品化标准,满足物联网应用场景日益增长的需求,具有很大的价值与意义。

1  整体设计

1.1  BCH编码的基本原理

矩阵BCH码是一种能够检错纠错的线性分组码,凭借其较强的纠错检错能力而被广泛应用于存储系统和通信领域中。BCH编码定义如下:给定任一有限域GF(q)及其扩域GF(qm),其中q是素数或者素数的幂,m为某一正整数。若任一码元取自GF(qm)上的循环码(n,k),其中n=2m-1,其生成多项式g(x)具有2t个连续根{a1,a2,…,a2t-1,a2t}时,t为纠正位数,则由生成多项式g(x)生成的循环码称为q进制BCH码,记为(n,k,t)。最常用的BCH码通常为二进制的BCH码,二进制BCH码的码元都是由0和1構成的,可靠性比较高,有利于数据的传输。

本文使用MICRON NAND devices,每页可配置为2 KB+

64 B,并且每页又分为4个子页,即每个子页为512 B+16 B,内部存储结构如图1所示。

1.2  MCU并行处理

为了提高存储系统的运行速度,本设计创新性的提出一种思路,也即是利用IO读写比较耗时的特点,MCU一边进行IO读写,同时对传输的数据进行BCH编解码,充分利用IO读写的时间而不是空等待IO。传统做法是整个页的数据全部传输完成,再进行BCH编解码,相比传统做法,本设计并行地提升了系统的运行速度和性能。下面以读操作为例来讲解算法的过程,本设计是将一页数据分成4段,目前第2段已传输完,正在BCH解码,IO同时在传输第3段,第2段BCH解码完成后会像第1段一样放在缓存中,这样利用MCU并行处理的方式,大大提升了数据传输的速度,数据传输示意图如图2所示。

1.3  Nand Flash存储格式和random access的分段读写技术

为了实现MCU并行处理,系统设计时需要将Nand Flash一页数据的存储格式分成多个小段,本设计是将一页数据分成4份,在读写时需要采用Nand Flash的random acces技术。传统读写操作从页的起始地址开始,分段读写需要从页内的某个偏移地址开始。同时,为了在IO操作时将MCU空闲出来做BCH运算,IO必须采用DMA的方式。利用DMA搬运数据,实现MCU多任务并发处理,使得BCH解码和IO传输数据并行执行,进而提高读写性能。

1.4  依据BCH码的纠错检错能力及时预判转移数据

BCH码有检错和纠错的能力,检错能力大于纠错能力。通常,Nand Flash上存储的数据,由于电荷漂移或写干扰等因素会造成数据位出现错误,随着时间的推移,Nand Flash上存储的数据出错的位数会逐渐增多,当错误位数超过了Nand Flash纠错能力范围时,BCH码将无法把错误的数据位进行纠正,也即是無法将数据恢复正常。利用这一自然变化过程的特性,本文设计的算法会在MCU读操作的BCH解码阶段,判断错误位数的数量,如果快要超过纠错能力范围,提前将其存储在别的物理页上。例如:对于512字节的数据,假设BCH最大纠错能力为1 bit。512字节刚写入Nand存储体中时,其出现的错误位数为0,随着时间的推移,错误位数会逐渐增多,这些错误的数据会在读操作时被BCH码纠正正确。在读操作时BCH码发现有1位错误,如果再放置一段时间错误的位数可能超过BCH码的最大纠错位数1 bit,届时BCH码将无法完全纠正其错误的数据,从而无法保证数据的准确性。

那本文设计的算法可以根据BCH码检错纠错的能力,提前预判数据的错误位数,在错误数据的位数即将超越纠错上限时,及时将数据转移到新的存储单元,让错误位数恢复到0,避免无法纠正数据的情况发生,从而提高系统读写数据的稳定性。

2  设计仿真验证

在PC环境下,对设计的BCH码进行基本功能的仿真和验证。

2.1  BCH码算法的实现

用代码实现BCH码的算法,由于篇幅限制,在这里只针对主要接口做简单介绍:

(1)void bch_generate(const struct bch_def *bch,const uint8_t *chunk, size_t len, uint8_t *ecc);

功能:此函数接口能根据需求和给定的数据,生成校验码。

参数:bch定义了BCH码的细节,如纠错能力等;chunk指针指向原始数据;len是数据长度;ecc用于存放生成的校验码。

(2)int bch_verify(const struct bch_def *bch,const uint8_t *chunk, size_t len, const uint8_t *ecc);

功能:此函数接口能根据给定的数据和校验码,验证数据是否发生了错误,该接口函数只能检错,不负责纠错。

参数:bch定义了BCH码的细节,如纠错能力等;chunk指针指向原始数据;len是数据长度;ecc用于存放生成的校验码。

返回值:0代表成功,-1代表失败(表示有错误位存在)。

(3)void bch_repair(const struct bch_def *bch,const uint8_t *chunk, size_t len, uint8_t *ecc);

功能:此函数接口能根据给定的数据和校验码,将数据中存在的错误位进行纠正;

参数:bch定义了BCH码的细节,如纠错能力等;chunk指针指向原始数据;len是数据长度;ecc用于存放生成的校验码。

2.2  BCH码算法的测试

根据优化的BCH码算法,设计针对性的测试方案,具体的流程如图3所示。

首先,当测试数据为全0xFF时,判断BCH码能否校验通过。注意,在这里有一种特殊情况,即当Nand Flash块全擦除后,数据为全0xFF,此时无需生成校验码,数据也能正常校验通过。

接下来,当BCH码能否校验通过后,系统会生成随机数据。用随机数据再生成校验码,为后续对数据的检错和纠错做好准备。

最后,在数据的随机位置,人为制造错误,通过调用BCH码算法进行数据的检错和纠错。

以上就是BCH码检错和纠错的整个流程,为了得到更精确的结果,我们在设计时进行了多次循环测试,以充分验证功能的稳定性。

2.3  BCH码算法的仿真结果分析

在仿真阶段,本文将PC上很大的RAM空间(或磁盘文件)模拟成Nand Flash存储介质,根据上述设计的测试方案,将优化后的BCH码算法在PC上运行,使其满足项目的需求。

由于物联网存储系统对数据的处理和响应的时间要求很高,所以本阶段的仿真实验,我们通过对纠错1 bit、2 bit、3 bit和4 bit所需要的纠错时间进行对比验证,为了得到更精确的时间,测试时每组数据进行循环测试10次,具体的每一次测试中进行20次循环测试,相当于每组数据重复测试200次,最后取平均值,得到每纠错1 bit、2 bit、3 bit和4 bit所需要的时间,具体的测试结果如表1所示。

通过测试,我们发现纠错能力为1 bit时,所需要的纠错时间、检错时间和生成校验码的时间都是最短的,很好的满足物联网存储系统对速度的要求,同时也节省了存储空间。

所以通过上述实验仿真验证,在本系统设计时,我们选取的纠错位为t=1位,校验码的长度为:14×1=14 bit,由此可得到该系统中BCH码的参数为:

(1)码元长度:n=512×8×4+14=16 398 bit

(2)检验位长度:r=14×1=14 bit

(3)纠错能力:t=1 bit

(4)信息位長度:k=n-r=16 398-14=16 384 bit

因此BCH 码为(2 062,2 048,1),其中校检码长度为14 bit。这样既节省存储的空间,又可以降低算法的复杂度,后续在解码过程中来提升传输的速率。

3  结  论

本文通过研究BCH码的原理,在算法上进行优化,满足物联网存储系统并行、高效的应用需求,降低MCU计算负载,结合Nand Flash存储介质的具体特点,用软件实现BCH码的编码和解码过程,通过反复的仿真实验验证,最终选择BCH 码为(2062,2048,1)的结构,力求实现过程中纠错速度最快、响应最快。下一步将PC环境下实现的优化BCH码算法移植到MCU平台上进行实际测试,对实际出现的问题进行细化,以满足实际应用场景中的各项指标。

参考文献:

[1] 王莞,魏敬和,于宗光.基于BCH纠错算法的编解码器设计与实现 [J].电子技术应用,2022,48(5):42-46.

[2] 杨舒天,任勇峰,刘东海.基于可纠错BCH码的HOTLink的数据传输方案设计 [J].电子测量技术,2021,44(3):27-31.

[3] 陈昭林,张晋宁,沈辉.基于BCH码的NAND Flash纠错算法设计与实现 [J].电子测量技术,2017,40(3):127-132.

[4] 雷水艳,焦继业,陈亚南.一种优化的BCH编解码器的设计与实现 [J].计算机与数字工程,2019,47(9):2335-2338.

[5] 杨修.一种BCH类型纠错算法的设计与实现 [D].成都:电子科技大学,2019.

作者简介:荆坤坤(1987—),女,汉族,安徽颍上人,讲师,硕士研究生,研究方向:嵌入式系统。

收稿日期:2022-09-02

基金项目:2020年安徽城市管理职业学院自然科学研究项目(2020zkzd01);2021年安徽城市管理职业学院自然科学研究项目(2021zrkx09)

猜你喜欢
物联网
基于高职院校物联网技术应用人才培养的思考分析
基于LABVIEW的温室管理系统的研究与设计
论智能油田的发展趋势及必要性
中国或成“物联网”领军者