(https://img5.pic.in.th/file/secure-sv1/imagebb820ed0640d4c80.png)
CSD (Card-Specific Data) ใน eMMC (embedded MultiMediaCard) เป็นชุดข้อมูลเฉพาะที่ใช้เพื่ออธิบายคุณสมบัติและความสามารถของการ์ดหน่วยความจำ. CSD เป็นหนึ่งในหลาย ๆ รีจิสเตอร์ที่ใช้ใน eMMC เพื่อตั้งค่าและจัดการกับการ์ดหน่วยความจำอย่างเหมาะสม. ต่อไปนี้คือรายละเอียดสำคัญของ CSD ใน eMMC:
โครงสร้างของ CSDCSD ประกอบด้วยหลายฟิลด์ที่มีข้อมูลต่าง ๆ เช่น:
- CSD_STRUCTURE: ระบุเวอร์ชันของโครงสร้าง CSD
- TAAC (Data Read Access-Time 1): เวลาที่ใช้ในการเข้าถึงข้อมูล
- NSAC (Data Read Access-Time 2): เวลาที่ใช้ในการเข้าถึงข้อมูลเพิ่มเติม
- TRAN_SPEED: ความเร็วในการถ่ายโอนข้อมูล
- CCC (Card Command Classes): คลาสของคำสั่งที่การ์ดสามารถรองรับได้
- READ_BL_LEN (Max Read Data Block Length): ความยาวสูงสุดของบล็อกข้อมูลที่สามารถอ่านได้
- WRITE_BL_LEN (Max Write Data Block Length): ความยาวสูงสุดของบล็อกข้อมูลที่สามารถเขียนได้
- C_SIZE (Device Size): ขนาดของหน่วยความจำ
- ERASE_BLK_EN (Erase Single Block Enable): ความสามารถในการลบข้อมูลบล็อกเดียว
- SECTOR_SIZE: ขนาดของเซกเตอร์
- WP_GRP_SIZE (Write Protect Group Size): ขนาดของกลุ่มที่มีการป้องกันการเขียน
- R2W_FACTOR (Write Speed Factor): ตัวคูณความเร็วในการเขียน
- COPY: ระบุว่าการ์ดเป็นสำเนาหรือไม่
- PERM_WRITE_PROTECT: ระบุว่ามีการป้องกันการเขียนอย่างถาวรหรือไม่
- TMP_WRITE_PROTECT: ระบุว่ามีการป้องกันการเขียนชั่วคราวหรือไม่
- CRC: การตรวจสอบความถูกต้องของข้อมูล
การใช้งาน CSDCSD ถูกใช้งานในการตั้งค่าขั้นต้นและการตรวจสอบความสามารถของ eMMC ในขณะที่เชื่อมต่อกับคอนโทรลเลอร์ โดยทั่วไปแล้ว CSD จะถูกอ่านโดยคอนโทรลเลอร์เพื่อกำหนดวิธีการสื่อสารกับ eMMC อย่างมีประสิทธิภาพ. ข้อมูลที่เก็บอยู่ใน CSD จะช่วยให้คอนโทรลเลอร์รู้ว่า eMMC รองรับคำสั่งใด ความเร็วในการถ่ายโอนข้อมูลเป็นเท่าไร และขนาดของบล็อกข้อมูลที่สามารถอ่านหรือเขียนได้
เพื่อให้หายงง มากขึ้น ต่อไปนี้เรามาลอง ถอดรหัสกันดู EMMC CSD: D02701320F5903FFF6DBFFEF8E40400D
การถอดรหัสค่า CSD:
1.CSD_STRUCTURE (2 bits):
ค่า: D0 (ไบต์แรก)
ค่า 2 บิตที่สำคัญที่สุด (MSB) คือ 11
หมายถึง CSD Version 1.1 (SDHC, SDXC)
2.TAAC (8 bits):
ค่า: 27
เป็นการเข้าถึงข้อมูลอ่าน ใช้ค่าหน่วยต่างๆ ที่ระบุ
3.NSAC (8 bits):
ค่า: 01
ระยะเวลาเข้าถึงข้อมูลเพิ่มเติม
4.TRAN_SPEED (8 bits):
ค่า: 32
ความเร็วในการถ่ายโอนข้อมูล
5.CCC (Card Command Classes) (12 bits):
ค่า: 0F59
คำสั่งที่การ์ดรองรับ
6.READ_BL_LEN (4 bits):
ค่า: 0
ความยาวบล็อกข้อมูลสูงสุดที่สามารถอ่านได้
7.READ_BL_PARTIAL (1 bit):
ค่า: 1
รองรับการอ่านบล็อกแบบบางส่วน
8.WRITE_BLK_MISALIGN (1 bit):
ค่า: 1
การเขียนบล็อกไม่ตรงกัน
9.READ_BLK_MISALIGN (1 bit):
ค่า: 1
การอ่านบล็อกไม่ตรงกัน
10.DSR_IMP (1 bit):
ค่า: 1
รองรับการตั้งค่าลงทะเบียนข้อมูล
11.C_SIZE (12 bits):
ค่า: 03FF
ขนาดของหน่วยความจำ
12.VDD_R_CURR_MIN (3 bits):
ค่า: 6
การใช้งานปัจจุบันต่ำสุด
13.VDD_R_CURR_MAX (3 bits):
ค่า: DB
การใช้งานปัจจุบันสูงสุด
14.VDD_W_CURR_MIN (3 bits):
ค่า: FF
การใช้งานปัจจุบันต่ำสุดขณะเขียน
15.VDD_W_CURR_MAX (3 bits):
ค่า: EF
การใช้งานปัจจุบันสูงสุดขณะเขียน
16.C_SIZE_MULT (3 bits):
ค่า: 8
ขนาดตัวคูณของหน่วยความจำ
17.ERASE_BLK_EN (1 bit):
ค่า: 1
การลบข้อมูลบล็อกเดียว
18.SECTOR_SIZE (7 bits):
ค่า: E4
ขนาดของเซกเตอร์
19.WP_GRP_SIZE (7 bits):
ค่า: 04
ขนาดของกลุ่มที่มีการป้องกันการเขียน
20.R2W_FACTOR (3 bits):
ค่า: 0
ตัวคูณความเร็วในการเขียน
21.COPY (1 bit):
ค่า: 0
ระบุว่าการ์ดเป็นสำเนาหรือไม่
22.PERM_WRITE_PROTECT (1 bit):
ค่า: 0
การป้องกันการเขียนถาวร
23TMP_WRITE_PROTECT (1 bit):
ค่า: 0
การป้องกันการเขียนชั่วคราว
24.CRC (7 bits):
ค่า: 0D
การตรวจสอบความถูกต้องของข้อมูล