Nand Flash และ Bad block คืออะไร?
Oct 25, 2022
1 NAND FLASH
1.1 การแนะนำหน่วยความจำ NAND FLASH
หน่วยความจำแฟลช NAND, หน่วยความจำแฟลชชื่อภาษาจีน ได้ชื่อมาจากความเร็วในการลบที่รวดเร็ว
NAND FLASH ถูกคิดค้นโดยคุณ Fujio Masuoka จาก Toshiba Group ของญี่ปุ่น แตกต่างจากอุปกรณ์จัดเก็บข้อมูลอื่นๆ สายข้อมูล NAND FLASH และบรรทัดที่อยู่เป็นแบบมัลติเพล็กซ์ และไม่สามารถใช้บรรทัดที่อยู่สำหรับการกำหนดแอดเดรสแบบสุ่ม ดังนั้น NAND FLASH จึงใช้เพจเพจเป็นหน่วยการอ่าน (โดยทั่วไปเพจเดียวคือ 2K Bytes) และบล็อกเป็นหน่วยการลบ (โดยทั่วไปบล็อกเดียวคือ 128KB หรือ 256KB) หลังจากส่งคำสั่งลบ NAND FLASH จะลบบล็อกทั้งหมดเป็น 1 บล็อกในแต่ละครั้ง และเนื้อหาทั้งหมดภายในจะกลายเป็น 0xFF เพราะเวลาลบสั้นมาก เร็วเท่าฟ้าแลบ ดังนั้นเราจึงเรียกหน่วยความจำนี้ว่าหน่วยความจำแฟลช
1.2 กลไกการใช้งานฮาร์ดแวร์ของ NAND FLASH
หน่วยพื้นฐานของ NAND FLASH คือ MOSFET ที่มีเกทลอย
ข้อมูลถูกจัดเก็บในรูปแบบของประจุไฟฟ้าในเซลล์หน่วยความจำแฟลช จำนวนประจุที่เก็บไว้ขึ้นอยู่กับแรงดันไฟฟ้าที่ใช้กับประตูภายนอก การแสดงข้อมูลแสดงโดยว่าแรงดันไฟฟ้าของประจุที่เก็บไว้เกินเกณฑ์ Vth ที่กำหนดหรือไม่ และหากประจุที่เก็บไว้เพียงพอและเกินเกณฑ์ Vth แสดงว่าเป็น 1 สำหรับการเขียน 0 จะเป็นการคายประจุ และค่าใช้จ่ายจะลดลงเหลือน้อยกว่า Vth ซึ่งหมายถึง 0
2 Bad Block
2.1 คำจำกัดความของ Bad block
เนื่องจากกระบวนการของ NAND Flash ไม่สามารถรับประกันความน่าเชื่อถือของประสิทธิภาพของ NAND Memory Array ได้ตลอดวงจรชีวิต การบล็อกที่เสียหายจะเกิดขึ้นระหว่างการผลิตและการใช้ NAND ลักษณะของบล็อกที่ไม่ดีคือ: เมื่อตั้งโปรแกรม/ลบบล็อกนี้ บิตบางบิตไม่สามารถดึงสูงได้ ซึ่งจะทำให้เกิดข้อผิดพลาดในการดำเนินการโปรแกรมเพจและการลบบล็อก
2.2 การจำแนกประเภทของบล็อกที่ไม่ดี: โรงงานบล็อกที่ไม่ดี FBB และใช้บล็อกที่ไม่ดี GBB
(1) FBB: Factory Bad Block, โรงงาน Bad Block, Bad Block ที่เพิ่งออกจากโรงงาน เรียกว่า Masked bad block หรือ initial bad/invalid block เมื่อ NAND Flash ออกจากโรงงาน จะมีบล็อกเสียหายจำนวนหนึ่งเนื่องจากกระบวนการผลิต ในเวลาเดียวกัน โรงงานเดิมจะทดสอบ NAND FLASH ก่อนออกจากโรงงาน และบล็อกที่ใช้สำหรับการทดสอบอาจถูกทำเครื่องหมายว่าเป็นบล็อกเสียโดยโรงงานเดิม
ก่อนออกจากโรงงานโรงงานเดิมจะทำเครื่องหมายบล็อกเสีย เครื่องหมายเฉพาะคือสำหรับ NAND Flash ทั่วไปที่มีขนาดหน้า 2K สำหรับแฟลช NAND โดยทั่วไปแล้ว เครื่องหมายบล็อกที่ไม่ถูกต้องจะอยู่ที่หน้าแรกของแต่ละบล็อก ไบต์แรกของพื้นที่ว่างของเพจ โดยเฉพาะอย่างยิ่ง คุณสามารถสอบถามแผ่นข้อมูลของผลิตภัณฑ์ต่างๆ ได้ หากไม่ใช่ 0xFF แสดงว่าเป็นบล็อกที่ไม่ดี ตามลําดับ บล็อกปกติ บล็อกที่ดี และข้อมูลทั้งหมดในนั้นคือ 0xFF
(2) GBB: Grown Bad Block โดยใช้บล็อกที่ไม่ดี ระหว่างการใช้ NAND Flash เนื่องจากอายุการลบและการเขียนของ NAND Flash มีจำกัด (โดยทั่วไปไม่เกิน 100,000 ครั้ง) การบล็อกที่ไม่ดีจะเกิดขึ้นหลังจากใช้งานไปช่วงหนึ่ง . หากพบข้อผิดพลาด Block Erase หรือ Page Program บล็อกนั้นจะถูกทำเครื่องหมายว่าเป็นบล็อกที่ไม่ดี เพื่อให้สอดคล้องกับข้อมูลบล็อกที่ไม่ดีโดยธรรมชาติ ไบต์แรก (ไบต์) ของพื้นที่สำรองจะถูกทำเครื่องหมายด้วยค่าอื่นที่ไม่ใช่ 0xFF ด้วย
2.3 ตารางบล็อกไม่ดี:
บล็อกแรกของแฟลชจะต้องดีเมื่อออกจากโรงงาน มิฉะนั้น แสดงว่าไม่สามารถใช้แฟลชทั้งหมดได้ เพราะโดยทั่วไปบล็อกแรกจะถูกใช้เพื่อบันทึกตารางบล็อกที่ไม่ดี (BBT, Bad Block Table) เนื่องจากกลไกการทำงานของการจัดการบล็อกที่ไม่ดี (Bad Block Management) ในไดรเวอร์ NAND Flash ภายใต้สถาปัตยกรรม Linux kernel MTD และไดรเวอร์ NAND Flash ของ UBOOT หลังจากโหลดไดรเวอร์แล้ว หากคุณไม่เพิ่มพารามิเตอร์ คุณขอข้ามไปอย่างแข็งขัน การสแกนบล็อกที่ไม่ดี ถ้าเป็นเช่นนั้น มันจะสแกนหาบล็อกที่ไม่ดีและสร้าง BBT ที่จำเป็นสำหรับการจัดการบล็อกที่ไม่ดีในภายหลัง
2.4 จำนวนและตำแหน่งของบล็อกที่ไม่ดี
โรงงาน NAND FLASH ดั้งเดิมจะมีมาตรฐานสำหรับจำนวนและตำแหน่งของบล็อกที่ไม่ดี โดยทั่วไปโรงงานเดิมสัญญาว่าจำนวนบล็อกเสียไม่เกิน 2 เปอร์เซ็นต์ แต่ไม่รับประกันตำแหน่งของบล็อกเสีย (แต่บล็อกแรกต้องดีเมื่อออกจากโรงงาน เพราะอันแรกจะใช้ เก็บ BTT) ตัวอย่างเช่น ชิป NAND มี 2048 บล็อก, 2048*0.02=40.96 ดังนั้นจำนวนบล็อกที่เสียหายจะไม่เกิน 40 แต่บล็อกที่เสียหายจะปรากฏขึ้น ไม่ว่าจะต่อเนื่องกันหรือไม่ หรือสุ่มก็ไม่มีประกัน
2.5 ผลกระทบของบล็อคที่ไม่ดีต่อบล็อคที่ดี
บล็อกเสียไม่ส่งผลต่อประสิทธิภาพของบล็อกที่ดี เนื่องจากแยกจากบรรทัดบิตโดยเกทที่เลือก)
2.6 การตรวจจับบล็อกที่ไม่ดี
การดำเนินการ "ลบ" จะดำเนินการกับบล็อกเหล่านี้ที่ทำเครื่องหมายว่าเป็น "บล็อกที่ไม่ดี" หากเกิดข้อผิดพลาด Block Erase แสดงว่าบล็อกนั้นเป็นบล็อกที่ไม่ดีจริง
2.7 หมายเหตุเกี่ยวกับการดำเนินการลบ
อันที่จริง เราสามารถลบบล็อกที่ไม่ดีที่ทำเครื่องหมายไว้ได้ หลังจากบังคับลบด้วยวิธีนี้ ข้อมูลบล็อกที่ไม่ถูกต้องจะไม่มีอยู่อีกต่อไป สำหรับบล็อกเสียจากโรงงาน โดยทั่วไปไม่แนะนำให้ลบข้อมูลที่ทำเครื่องหมายไว้
มีคำสั่งใน UBOOT ที่เรียกว่า "nand scrub" ซึ่งจะลบเนื้อหาทั้งหมดในบล็อก รวมถึงเครื่องหมายบล็อกที่ไม่ดี ไม่ว่าจะเป็นโรงงานหรือเครื่องหมายใหม่ที่ปรากฏในขั้นตอนการใช้งานในภายหลัง โดยทั่วไปไม่แนะนำให้ใช้สิ่งนี้ เมื่อมีการผลิตโรงงาน NAND FLASH บล็อกที่ไม่ดีของ NAND จะได้รับการทดสอบและทำเครื่องหมายในช่วงอุณหภูมิและแรงดันไฟฟ้าที่ค่อนข้างกว้าง บล็อกเสียเหล่านี้ยังคงทำงานภายใต้อุณหภูมิหรือแรงดันไฟฟ้าที่กำหนด แต่อาจเปลี่ยนแปลงได้ในเวลาอื่นเมื่อเงื่อนไขเปลี่ยนแปลง ความล้มเหลวกลายเป็นระเบิดเวลาที่อาจเกิดขึ้นได้ หากบล็อกเสียที่ทำเครื่องหมายโดยโรงงานเดิมถูกลบ จะเป็นเรื่องง่ายที่จะพบปัญหาข้อมูลสูญหายเมื่อเขียนและบันทึกข้อมูล
ควรใช้ "nand delete" เพื่อลบเฉพาะบล็อกที่ดีเท่านั้น สำหรับบล็อกที่ทำเครื่องหมายว่าบล็อกที่ไม่ดีแล้ว ห้ามลบ
3 การจัดการบล็อกที่ไม่ดี
ผู้ควบคุมอุปกรณ์หรือ FLASH จะจัดการบล็อกที่ไม่ดี ซึ่งก็คือ BBM (Bad Block Management) เราจะเพิ่มสิ่งนี้ในภายหลัง
ข้อสังเกต
1 เหตุใดบล็อกที่ดีจึงทำเครื่องหมายด้วย 0xff: เนื่องจากการลบ Nand Flash คือการเปลี่ยนบิตทั้งหมดของบล็อกที่เกี่ยวข้องเป็น 1 ระหว่างการดำเนินการเขียน ชิปแต่ละบิตสามารถเปลี่ยนจาก 1 ได้เท่านั้น ถึง 0 แต่ไม่ใช่ เปลี่ยนจาก 0 เป็น 1 0XFF หมายความว่าสามารถลบทั้งหมดเป็น 11111111 ได้ แสดงว่าสามารถลบได้สำเร็จและเป็นบล็อกที่ดี
———————————————
คำชี้แจงลิขสิทธิ์: บทความนี้เป็นบทความต้นฉบับโดยบล็อกเกอร์ CSDN "Alexander{0}}Lai" และเป็นไปตามข้อตกลงลิขสิทธิ์ CC 4.0 BY-SA โปรดแนบลิงค์ต้นฉบับและคำชี้แจงนี้สำหรับการพิมพ์ซ้ำ







