Tải bản đầy đủ (.pdf) (36 trang)

đọc dữ liệu từ sd card và hiển thị lên lcd sử dụng kit de2 của altera

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.63 MB, 36 trang )

SD Card Page 1


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
ESRC Lab 618






Đề tài:
Đọc dữ liệu từ SD Card và hiển thị lên
LCD sử dụng Kit DE2 của ALTERA

Nhóm sinh viên thực hiện: Group 3- K52
Vũ Hữu Tiệp
Lê Thái Hưng
Nguyễn Duy Linh
Lê Anh Văn

Hà Nội, 1 - 2011


SD Card Page 2

SD Card
Group 3 – K52
Contents
1. Giới thiệu 4
1.1. Giới thiệu thành viên 4


1.2. Tổng quan hệ thống 5
1.3. Phần việc cụ thể 5
1.4. Kết quả đạt được 5
2. Giới thiệu công nghệ sử dụng 5
2.1. Phần cứng 5
2.1.1. SD Card 5
2.1.2. Kit DE2 5
2.2. Phầm mềm 6
2.2.1. Quatus II 6
2.2.2. Nios II 6
3. Sơ đồ khối của hệ thống 9
3.1. SD Card 9
3.2. Khối xử lý Nios II 10
3.3. Khối hiển thị 10
4. SD Card 10
4.1.1. Sơ đồ chân và các chế độ của SD Card 10
4.1.2. Định dạng lưu trữ trong SD Card 16
4.2. Các thanh ghi trong SD Card 22
4.2.1. OCR (operation conditions register) 23
4.2.2. CID 23
4.3. Cách gửi lệnh và nhận phản hồi 24
4.3.1. CRC 24
SD Card Page 3

4.3.2. Command 25
4.3.3. Response 27
4.4. Phương pháp truyền nhận dữ liệu 30
4.4.1. Card Initialization and Card Initializatio 30
4.4.2. Data transfer Mode 31
4.4.3. Read Data 32

4.5. Đọc ghi một file dữ liệu vào trong SD card 33
4.5.1. Đọc một file 33
4.5.2. Ghi một file 33
5. LCD 16x2 34
6. Kết luận 34
7. Tài liệu tham khảo 35
8. Phụ lục A: Các hàm sử dụng trong hệ thống: 36


SD Card Page 4

1. Giới thiệu
1.1. Giới thiệu thành viên
Thông tin cá nhân của các thành viên Nhóm 1

Vũ Hữu Tiệp (Nhóm trưởng)
Mobile: 0975 936 743
Mail:
Công việc chính : ngắt nút bấm và hiển thị
LCD, cấu trúc bảng FAT.

Nguyễn Duy Linh
Mobile: 0979 468 289
Mail:
Công việc chính: Tìm hiểu cấu trúc bảng
FAT.

Lê Thái Hưng
Mobile: 0972 186 249
Mail:

Công việc chính: Viết các thủ tục đọc dữ
liệu trong SD Card.

Lê Anh Văn
Mobile: 0936 845 488
Mail:
Công việc chính: Tìm hiểu các chế độ,
thanh ghi, thủ tục đọc thẻ SD.




SD Card Page 5

1.2. Tổng quan hệ thống
Đề tài lớn: Đọc dữ liệu từ SD card ( file ảnh, âm thanh) dung Kit DE2 và hiển thị lên
màn hình VGA.
Công việc của nhóm: Giao tiếp giữa Kit DE2 va SD card. Đọc file text trong SD card và
hiển thị lên màn hình LCD.
1.3. Phần việc cụ thể
- Tìm hiểu về cấu trúc SD card, cấu trúc bảng FAT, các thanh ghi, cách nhận và
gửi lệnh, phương pháp truyền nhận dữ liệu.
- Xây dựng hệ thống NIOS II điều khiển, thực hiện lệnh giao tiếp với SD card.
- Giao tiếp và hiển thị lên màn hình LCD.
1.4. Kết quả đạt được
Giao tiếp với SD card dung SD Mode, đọc file txt và hiển thị lên màn hình LCD. Dùng
phím bấm để tìm file và chọn file cần hiển thị.
2. Giới thiệu công nghệ sử dụng
2.1. Phần cứng
2.1.1. SD Card

SD card là thiết bị lưu trữ rất phổ biến hiện nay được sử dụng cho nhiều mục đích khác
nhau như ảnh, film, dữ liệu…trên nhiều thiết bị khác nhau ( máy ảnh số, máy quay phim,
máy nghe nhạc, điện thoại…).
Trong đề tài này, chúng tôi sử dụng 1 SD Card có dung lượng 2G, định dạng FAT16.
2.1.2. Kit DE2
DE2 ( Development and Education ) la một công cụ cho việc thiết kế nâng cao các thiết
bị đa phương tiện, lưu trữ và mạng.
DE2 sử dụng công nghệ state-of- the-art trong cả phần cứng và các công cụ thiết kế nhờ
máy tính giúp mở rộng phạm vi ứng dụng. DE2 có nhiều tính năng phù hợp với cả việc
sử dụng trong các phòng lab và các hệ thống số tinh vi. Altera cung cấp các công cụ hỗ
SD Card Page 6

trợ phù hợp cho DE2, gồm có các hướng dẫn, các bài lab trên DE2, và các bài minh
họa…
2.2. Phầm mềm
2.2.1. Quatus II
Trong đề tài, chúng tôi sử dụng SOPC Builder của Quatus II để tạo ra 1 vi xử lý mềm.
2.2.2. Nios II
Để hiểu Nios II là chương trình dùng để làm gì, chúng ta hãy làm một phép so sánh.
Chẳng hạn, với vi điều khiển PIC, IC(phần cứng) được so sánh với công việc mà SOPC
Builder tạo ra còn PICC(chương trình lập trình cho PIC) sẽ được so sánh với Nios II.
Vậy, Nios II chính là chương trình lập trình cho vi xử lý mềm mà SOPC tạo ra.

Hình 2.1. Tổng quan về SOPC và Nios II
Khi học một vi điều khiển mới, chúng ta sẽ quan tâm đến một số vấn đề:
- Điều khiển vào ra
- Trễ
- Ngắt
Bây giờ chúng ta sẽ đi vào từng vấn đề.
2.2.2.1. Điều khiển vào ra trong Nios II

Trong mục này, chúng ta sẽ quan tâm đến việc đọc và ghi dữ liệu vào các thanh ghi như
thế nào.
SD Card Page 7

- Để tìm địa chỉ của các thanh ghi, chúng ta tìm các định nghĩa của chúng trong file
system.h trong thư mục /projectname_syslib[system_0]/Debug/system_desciption
Ví dụ
#define BUTTON_PIO_BASE 0x00681090 //Định nghĩa địa chỉ cho các nút
bấm
#define LED_GREEN_BASE 0x00681080 //Định nghĩa địa chỉ cho các LED
GREEN
#define LED_RED_BASE 0x00681070
- Tiếp theo, chúng ta quan tâm đến 2 macro đọc / ghi dữ liệu từ / vào các thanh ghi.
Bảng 2.1. Macro đọc ghi dữ liệu trong Nios II
Macro
Cách sử dụng
IORD(BASE, REGNUM)
Đọc giá trị của thanh ghi tại Offset REGNUM
trong 1 device có địa chỉ cơ sở là BASE.
IOWR(BASE, REGNUM, DATA)
Ghi giá trị DATA vào thanh ghi tại địa chỉ offset
REGNUM trong 1 device có địa chỉ BASE.

BUTTON, SWITCH, LEDR, LEDG có REGNUM = 0 và được định nghĩa lại trong thư viện
altera_avalon_pio_regs.h cho dễ sử dụng:
#define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0)
#define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data)
2.2.2.2. Hàm trễ
Trong Nios II có 2 hàm trễ được xây dựng sẵn là msleep và usleep


SD Card Page 8

2.2.2.3. Xử lý ngắt trong Nios II
Ngắt trong Nios II khá giống với ngắt trong PIC. Với phạm vi của đề tài, chúng tôi chỉ
thực hiện ngắt nút bấm. Xét đoạn code sau:
#include "altera_avalon_pio_regs.h"
#include "system.h"
#include <stdio.h>
volatile int button = 0;

void buttons_isr( void* context, alt_u32 id)
{
volatile int *value = (volatile int*) context;
*value = IORD_ALTERA_AVALON_PIO_EDGE_CAP( BUTTON_PIO_BASE );
IOWR_ALTERA_AVALON_PIO_EDGE_CAP( BUTTON_PIO_BASE, 0 );
}
void buttons_interrupt_enable()
{
IOWR_ALTERA_AVALON_PIO_EDGE_CAP( BUTTON_PIO_BASE, 0 ); //kiem tra
//status xem ngat nao xay ra va ghi 0x0 de tai thiet lap ngat
alt_irq_register( BUTTON_PIO_IRQ, (void *) &button, buttons_isr );
IOWR_ALTERA_AVALON_PIO_IRQ_MASK( BUTTON_PIO_BASE, 0x3 ); //Cho
//phep ngat 2 phim cuoi
}
Đoạn code trên thực hiện công việc ngắt nút bấm, khi bấm 1 trong 4 nút KEY0-KEY3.
- Hàm void buttons_isr( void* context, alt_u32 id) là chương trình con
phục vụ ngắt. Khi có ngắt nút bấm xảy ra, nút được bấm sẽ tương ứng với giá trị
trả về của value, cụ thể:
Bảng 2.2. Giá trị tương ứng với các nút bấm khi khởi tạo ngắt
Key is pressed

Value
KEY0
0x01
KEY1
0x02
KEY2
0x04
KEY3
0x08
- Hàm void buttons_interrupt_enable() là hàm khởi tạo ngắt.
Ta quan tâm tới một hàm quan trọng:
SD Card Page 9

alt_irq_register( BUTTON_PIO_IRQ, (void *) &button, buttons_isr );
Câu lệnh này thực hiện công việc:
Khi có ngắt nút bấm, thực hiện công việc được mô tả trong chương trình con phục vụ
ngắt void buttons_isr( void* context, alt_u32 id), giá trị trả về của hàm này
được lưu trong biến toàn cục button.
Để xác định nút bấm nào được enable ngắt, ta xét câu lệnh cuối cùng:
IOWR_ALTERA_AVALON_PIO_IRQ_MASK( BUTTON_PIO_BASE, DATA );
Theo thứ tự từ KEY3 đến KEY0, để enable ngắt, ta cho bit thứ 4, 3, 2, 1 của DATA bằng 1.
3. Sơ đồ khối của hệ thống
Avalon bus
NIOS II Core
LCD
Controler
SRAM
Controler
SD card
Controler

SDRAM
Controler
SD Card LCD Key

Hình 3.1. Sơ đồ khối của hệ thống
3.1. SD Card
SD Card có dung lượng 2G, có chứa sẵn một vài file text.

SD Card Page 10


3.2. Khối xử lý Nios II
Thực hiện công việc điều khiển, giao tiếp với thẻ và LCD.
3.3. Khối hiển thị
LCD 1602 là LCD có sẵn trong kit DE2

4. SD Card
4.1.1. Sơ đồ chân và các chế độ của SD Card
4.1.1.1. Sơ đồ chân
Giao tiếp trong SD Card dựa trên giao tiếp bằng 9 chân ( Clock, Command, 4 chân Data,
3 chân nguồn) có tần số làm việc lớn nhất là 50MHz sử dụng điện áp thấp. Khối điều
khiển giao tiếp SD Card cũng hỗ trợ giao tiếp với thẻ Multimedia ( thực chất khác biệt
giữa SD Card và Multimedia Card là quá trình khởi tạo)

Hình 4.1. Sơ đồ chân thẻ SD
SD Card Page 11

Bảng 4.1. Các chân trong 2 chế độ của SD Card
Pin
SD mode

SPI mode
Name
Desciption
Name
Description
1
CD/DAT3
Card detect/Data line[Bit 3]
CS
Chip Select
2
CMD
Command/Response
DI
Data in
3
VSS1
Supply voltage ground
VSS
Supply voltage ground
4
VDD
Supply voltage
VDD
Supply voltage
5
CLK
Clock
SCLK
Clock

6
VSS2
Supply voltage ground
VSS2
Supply voltage ground
7
DAT0
Data line[Bit 0]
DO
Data out
8
DAT1
Data line[Bit 1]


9
DAT2
Data line[Bit 2]



4.1.1.2. Các chế độ của SD Card
 SD mode
SD mode có 4 đường truyền dữ liệu Data[0]- Data[4] và 1 đường truyền lệnh CMD.
Giao tiếp qua SD bus chủ yếu dựa trên các lệnh và tín hiệu phản hồi , khởi tạo bằng bit
bắt đầu và bit kết thúc.
 Lệnh (command) : là tín hiệu điều khiển việc giao tiếp được host truyền đi tới các
SD card. 1 command gồm 48bits chứa mã lệnh, các đối số và mã CRC(7).
Comand được truyền trên đường CMD.
 Phản hồi (response): là tín hiệu do Card gửi trả lại host sau mỗi command nhận

trước đó. Cấu trúc của Response thường gồm 48 hoặc 136 bits bao gồm nội dung
phản hồi và mã CRC( 7 hoặc 16). Tín hiệu phản hồi cũng được truyền qua đường
CMD.

SD Card Page 12


Hình 4.2. Định dạng gói Respones
 Dữ liệu (data): dữ liều được truyền hai chiểu từ card đến host và ngược lại. Host
trong chế độ SD sử dụng 1 hoặc cả 4 đường Data để truyền dữ liệu. Dữ liệu luôn
được truyền theo từng khối (block), kết thúc mỗi block là mã CRC. SD Card hỗ
trợ truyền từng block và truyền nhiều block trong một lượt.
Có 2 dạng gói dữ liệu được sử dụng trong SD mode
o 8 bit-width: dữ liệu được truyền theo từng byte, trong đó byte LSB (Least
Significant Byte) được gửi trước, MSB cuối cùng. Tuy nhiên trong từng
byte , MSB (Most significant bit) lại được gửi trước và LSB cuối cùng.
SD Card Page 13


Hình 4.3. Định dạng gói dữ liệu – dữ liệu thông thường

SD Card Page 14

o Wide width data:

Hình 4.4. Định dạng gói dữ liệu – độ rộng dữ liệu
 Quá trình đọc: bắt đầu khi host gửi yêu cầu đến card, card sẽ gửi trả bằng tín hiệu
Response sau đó dữ liệu sẽ được card gửi (tùy vào lệnh mà dữ liệu sẽ gồm nhiều
block hay chỉ 1 block) , cuối cùng host phát lệnh dừng đọc


Hình 4.5. Quy trình đọc một block dữ liệu

SD Card Page 15

Đọc nhiều block:
Hình 4.6. Quy trình đọc nhiều block dữ liệu
 Quá trình ghi: tương tự như quá trình đọc, sau khi host gửi command , nếu card
gửi response chấp nhận và host sẽ gửi dữ liệu

Hình 4.7. Quy trình ghi một block dữ liệu
Ghi nhiều block:

Hình 4.8. Quy trình ghi nhiều gói dữ liệu
 SPI mode:
Chế độ SPI sử dụng một đường dữ liệu và 1 đường tín hiệu CS nên có nhược điểm là
tốc độ chậm hơn chế độ SD mode.
Chế độ SPI trong giao tiếp với SD Card được thực hiện dựa trên chế độ SD Mode (
sử dụng phương thức giao tiếp và một số lệnh). Khác với chế độ SD Mode dựa trên
SD Card Page 16

lệnh (command) và chuỗi bit truyển, dùng bit khởi đầu và kết thúc; SPI Mode chủ
yếu dựa trên cơ sở byte .Mỗi lệnh hay khối dữ liệu đều tạo bởi các byte và căn theo
chu kì của 8 xung clock (tín hiệu CS). Giao tiếp giữa host và card được điều khiển bới
host (host điều khiển xung CS).
Qua trình đọc và ghi trong chế độ SPI giống như trong chế độ SD.
4.1.2. Định dạng lưu trữ trong SD Card
Trong project ta chỉ quan tâm đến FAT16 do dung lượng thẻ nhớ nhỏ hơn 2GB.Với SD
Card, ta chỉ dùng 1 phân vùng partion (tức là chỉ dùng mục 1.1.2.2)
Đơn vị lưu trữ nhỏ nhất trên đĩa là sector gồm 512 byte. Ta chỉ thao tác trên đơn vị này
mà không thể đọc ghi dữ liêu từng đơn vị byte một. Để quản lí đĩa và theo dõi sector nào

đã sử dụng và sector nào còn trống có thể cấp phát cho các file mới, DOS sử dụng một
cấu trúc gọi là bảng FAT. FAT là viết tắt của "File Allocation Table" tạm dịch là "Bảng
cấp phát tập tin". FAT được giới thiệu lần đầu tiên vào năm 1977 với phiên bản FAT12.
Sau đó là các phiên bản FAT16 và FAT32.
4.1.2.1. Cấu trúc ổ đĩa cứng sử dụng FAT16
4.1.2.1.1. Master Boot Record:
Nằm ở sector đầu tiên của đĩa cứng ở cylinder 0, Head 0, Sector 1. Nó chứa đoạn code
đầu tiên mà máy tính chạy sau khi khởi động và bắt đầu quản lý các chương trình trong
đĩa cứng. Nó còn chứa bảng phân vùng để xác định các phân vùng khác nhau trong đĩa
cứng. Nếu có lỗi xảy ra ở 512 byte này thì nguy cơ thay ổ cứng mới là rất lớn !
Bảng 4.2. Master Boot Record
Offset
Mô tả
Kích thước
000h
Mã thực thi ( boots computer)
446 bytes
1BEh
Chỉ mục phân vùng đầu tiên
16 byte
1Ceh
Chỉ mục phân vùng thứ hai
16 byte
1Deh
Chỉ mục phân vùng thứ ba
16 byte
1Eeh
Chỉ mục phân vùng thứ tư
16 byte
1Feh

2 byte đánh dấu ( 55h AAh)
2 byte


SD Card Page 17

4.1.2.1.2. Chỉ mục phân vùng (Partion)
Bảng 4.3. Chỉ mục phân vùng
Offset
Mô tả
Kích thước
00h
Trạng thái hiện thời của phân vùng( 00h= không hoạt
động, 80h= hoạt động)
1 byte
01h
Bắt đầu của phân vùng( Head)
1 byte
02h
Bắt đầu của phân vùng( Cylinder/ Sector) (bảng dưới)
1 word
04h
Loại phân vùng(bảng dưới)
1 byte
05h
Kết thúc của phân vùng(Head)
1 byte
06h
Kết thúc của phân vùng( Cylinder/ Sector)
1 word

08h
Số sector giữa MBR và sector đầu tiên của phân vùng
1 double word
0Ch
Số sector trong phân vùng
1 double word

4.1.2.1.3. Mã hóa cylinder/Sector
Để lấy được Sector từ mục trên ta thực hiên phép AND với 3Fh ( lấy 6 bit cuối)
Để lấy được số Cylinder ta lấy byte cao thực hiện phép OR với byte thấy đã được dịch
trái 2 lẩn sau khi AND với C0h
Bảng 4.4. Cấu trúc Cylinder/Sector
15
14

9
8
7
6
5

1
0
Cylinder bit 7 -> 0
Cylinder bit
9+8
Sector bit 5->0

4.1.2.1.4. Loại Phân vùng
Bảng 4.5. Loại phân vùng

Giá trị
Mô tả
00h
Không sủ dụng
01h
FAT12
04h
FAT16 (phân vùng nhỏ hơn 32MB)
05h
Phân vùngMS-DOS mở rộng
06h
FAT 16( phân vùng lớn hơn 32MB)
0Bh
FAT32
0Ch
Giống như 0Bh, nhưng sử dụng LBA
1
13h Extensions
SD Card Page 18

0Eh
Giống như 06h, nhưng sử dụng LBA
1
13h Extensions
0Fh
Giống như 05h, nhưng sử dụng LBA
1
13h Extensions

4.1.2.1.5. Đọc nhiều phân vùng:

Vì FAT 16 giới hạn 2GB cho mỗi partion, vì vậy nên đĩa cứng thường phải quản lý nhiều
phân vùng . Phân vùng đầu tiên là phân vùng chính( primary partion) và các phân vùng
còn lại được lưu trong phân vùng mở rộng ( Extended Partition). Chỉ mục phân vùng đầu
tiên chỉ đến phân vùng chính, chỉ mục thứ hai trong bảng lưu địa chỉ phân vùng mở rộng.
Để đọc các phân vùng này đầu tiên phải đọc sector đầu tiên của các phân vùng mở rộng,
Sector này giống hệt như MBR nhưng không có các đoạn code. Và trong bảng chỉ mục
phân vùng, chỉ mục phân vùng đầu tiên sẽ chỉ đến phân vùng mở rộng thứ hai, chỉ mục
phân vùng tiếp theo sẽ chỉ đến phân vùng mở rộng khác giống như trên. Trong phân vùng
mở rộng, địa chỉ sẽ được tính lại từ bảng MBR mới
 MBR của đĩa cứng:
o Chỉ mục thứ nhất: Chỉ đến phân vùng 1
o Chỉ mục thứ hai: Chỉ đến phân vùng mở rộng
 MBR của phân vùng mở rộng:
o Chỉ mục thứ nhất: Chỉ đến phân vùng 2
o Chỉ mục thứ hai: Chỉ đến các phân vùng khác sau phân vùng 2
Tại đây ta có Giá trị giữa MBR đến sector đầu tiên của phân vùng ( lưu tại địa chỉ offset
08h trong bảng Chỉ mục phân vùng) và Số Sector của phân vùng (lưu tại địa chỉ offset
Och) sẽ được tính từ bảng MBR mới mà không phải từ MBR của đĩa cứng
Nếu muốn đọc phân vùng tiếp theo ta lại đến bảng MBR kế
 MBR của các phân vùng tiếp:
o Chỉ mục thứ nhất: Chỉ đến phân vùng 3
o Nếu không có phân vùng nào nữa thì để trống


SD Card Page 19

4.1.2.2. Cấu trúc của Partion sử dụng FAT16
4.1.2.2.1. Mô tả đĩa cứng FAT 16
Bảng 4.6. Loại phân vùng
Offset

Mô tả
Bắt đầu của phân vùng
Boot Sector
Bắt đầu + số sector được định trước (reserved
sector)
Bảng FAT
Bắt đầu + số sector được định trước + ( Số
sector trong bảng FAT*2)
Bảng Root (Root
Directory Entry)
Bắt đầu + số sector được định trước + ( Số
sector trong bảng FAT*2) + ((Số Root Directory
Entry lớn nhất*32)/ Số byte trong 1 Sector)
Vùng dữ liệu
(Bắt đầu tại
cluster thứ 2)

4.1.2.2.2. FAT16 Boot Record
Nằm ở sector đầu tiên của tất cả các partion
Bảng 4.7. FAT16 Boot Record
Offset
Ý nghĩa
Kích thước
00h
Lệnh nhảy đến mã khởi động
3 bytes
03h
Tên hãng sản xuất
8 bytes
0Bh

Số byte trong sector
1 word
0Dh
Số sector trong 1 cluster
1 byte
0Eh
Sector được bảo vệ
1 word
10h
Số bản copy của bản FAT
1 byte
11h
Số chỉ mục trong phần root
1 word
13h
Số sector trong phân vùng nhỏ hơn 32MB
1 word
15h
Mô tả phương tiện lưu trữ ( f8h cho đĩa cứng)
1 byte
16h
Số sector cho bảng FAT
1 word
18h
Số sector trong 1 track cho ngắt 13h
1 word
1Ah
Số head
1 word
1Ch

Số sector ẩn trong phân vùng
1 double word
20h
Số sector trong phân vùng
1 double word
24h
Số ổ luận lý trong phân vùng
1 word
26h
Extended signature(29h)
1 byte
SD Card Page 20

27h
Số serial của phân vùng
1 double word
2Bh
Tên của phân vùng
11 byte
36h
Tên loại FAT ( FAT12 hoặc FAT 16)
8 byte
3Eh
Code
448 byte
1FEh
2 byte đánh dấu ( 55h AAh)
2 byte

4.1.2.2.3. Bảng FAT - Ý nghĩa của Cluster

Một Cluster là một tập hợp các Sector chứa thông tin trong đĩa cứng.Một Cluster 16K
chứa 32 Sector (512*32=16384). Mỗi một Cluster được biểu diễn bằng một ô trong bảng
FAT. Khi nhìn vào số của các ô trong bảng FAT ta có thế biết được cluster đó đã có dữ
liệu hay chưa, dữ liệu đã kết thúc hay chưa, nếu chưa thì ở cluster nào sau nó. Tất cả dữ
liệu trong 1 phân vùng đều bắt đàu từ cluster thứ hai (ngay sau Root Directory). Nếu ô có
giá trị 0 thì cluster ứng với nó không có dữ liệu, nếu ô có giá trị FFFFh thì đó là ô cuối
cùng trong chuỗi dữ liệu.
Mỗi một file trong thẻ SD phải được lưu bắt đầu từ 1 cluster. Ngoài ra file có thể trải dài
trên nhiều cluster khác nhau (không nhất thiết liên tục) Bảng FAT lập ra để chỉ ra khi đọc
1 file, chương trình cần đọc ở những cluster nào.
Bảng 4.8. Ý nghĩa của các mã FAT
Mã FAT
Ý nghĩa
0000h
Cluster trống
0002h-FFEFh
Cluster đã có dữ liệu, chỉ đến cluster tiếp theo của file
FFF0h-FFF6h
Cluster định trước ( reserved cluster)
FFF7h
Cluster lỗi
FFF8h-FFFFh
Cluster đã có dữ liệu, Cluster cuối cùng của file

Ví dụ: bảng FAT có 2 file, 1 file ở cluster (2,3,6), file còn lại ở (4,7)
2
3
4
5
6

7
8
9
10
0003
0006
0007
0000
FFFF
FFFF
0000
0000
0000


SD Card Page 21

4.1.2.2.4. Bảng Root:
Bảng 4.8. Bảng Root
Name
Offset
Size
Description
DIR_Name
0
11
Tên của file
DIR_Attr
11
1

Mô tả file
ATTR_READ_ONLY 0x01
ATTR_HIDDEN 0x02
ATTR_SYSTEM 0x04
ATTR_VOLUME_ID 0x08
ATTR_DIRECTORY 0x10
ATTR_ARCHIVE 0x20
ATTR_LONG_NAME
ATTR_READ_ONLY|
ATTR_HIDDEN|
ATTR_SYSTEM|
ATTR_VOLUME_ID
DIR_NTRes
12
1
Luôn khởi tạo là 0
DIR_CrtTimeTenth
13
1
Có giá trị hợp lệ từ 0 – 200. Tương đương
với 2 giây (10 milisecond – một đơn vị).
Chứa giá trị giây của thời điểm tạo file
DIR_CrtTime
14
2
Chứa thời điểm tạo file
DIR_CrtDate
16
2
Chứa ngày tạo file

DIR_LstAccDate
18
2
Chứa thời điểm cuối cùng truy nhập
DIR_FstClusHI
20
2
Chứa 2 byte đầu của địa chỉ file (hay 2
byte đầu tiên của số thứ tự của sector đầu
tiên chứa file). Luôn luôn là 0 đối với
FAT16
DIR_WrtTime
22
2
Chứa thời gian cuối cùng ghi thẻ
DIR_WrtDate
24
2
Chứa ngày cuối cùng ghi thẻ
DIR_FstClusLO
26
2
Chứa 2 byte thấp của địa chỉ file.
DIR_FileSize
28
4
Kích thước file.

DIR_Name[0]:
Nhận giá trị 0x00, 0xE5: Entry này rỗng. Nếu tên file bắt đầu là 0xE5 thì DIR_Name[0]

= 0x05.
DIR_Name[0] không thể là 0x20. Kí tự ‘.’ Không được biểu diễn trong trường này
Ngoài ra, DIR_Name không có các kí tự sau:
SD Card Page 22

 Giá trị nhỏ hơn 0x20 ngoại trừ kí tự đăc biệt 0x05 như nói ở trên
 0x22, 0x2A, 0x2B, 0x2C, 0x2E, 0x2F, 0x3A, 0x3B, 0x3C, 0x3D,
0x3E, 0x3F, 0x5B, 0x5C, 0x5D, 0x7C
Date and Time:
Ngày: gồm có 2 byte (tức 16 bit) dựa trên cơ sở ngày 01/01/1980 như sau
 Bit 0 – 4: Ngày: giá trị 1 – 31
 Bit 5 – 8: Năm: giá trị từ 1 – 12
 Bit 9 – 15: Sô lượng năm tính từ 1980. Khoảng giá trị 0 – 127 (tức là
từ 1980 – 2107)
Thời gian: gồm có 2 byte (16 bit)
 Bit 0 – 4: cứ 2 giây / đơn vị. Giá trị hợp lệ 0 – 29 (tức là 0 – 58 giây)
 Bit 5 – 10: Phút: giá trị từ 0 – 59
 Bit 11 – 15: Giờ: giá trị hợp lệ từ 0 –23
Như vậy, giá trị có thể biểu diễn được từ 00:00:00 đến 23:59:58
4.2. Các thanh ghi trong SD Card
Bảng 4.9. Các thanh ghi của SD Card
Tên
Độ rộng
Mô tả
CID
128
Chỉ số của Card; nếu có nhiều Card, mỗi Card sẽ có một
CID khác nhau.
RCA
16

Relative card address; địa chỉ hệ thống của một Card.
DSR
16
Driver Stage Register; để cấu hình driver đầu ra của Card
CSD
128
Card Specific Data; thông tin về điều kiện hoạt động của
Card.
SCR
64
SD Configuration Register;
OCR
32
Thanh ghi điều kiện hoạt động
SSR
512
SD Status; thông tin về các tính chất của Card.
CSR
32
Card Status;

Ta chỉ quan tâm tới 2 thành ghi đặc biệt: OCR và CID.

SD Card Page 23

4.2.1. OCR (operation conditions register)
Là 1 thanh ghi 32 bit lưu thông tin về điện áp của card. Thêm vào đó, thanh ghi này còn
bao gồm cả các bit thông tin trạng thái (status information bits). 1 bit trạng thái được set
nếu thủ tục khởi tạo card được hoàn thành. Thanh ghi này còn bao gồm 1 bit trạng thái
khác chỉ ra trạng thái lưu trữ của card sau khi (set power up status bit).

 Lưu thông tin điện áp
Bit 7 của OCR được định nghĩa cho Dual Voltage Card và mặc định đặt tới 0. Nếu một
Dual Voltage Card không nhận CMD8, bit 7 OCR trong response sẽ là 0 và ngược lại.
 2 bit trạng thái (status information bits)
Bit 31: bit trạng thái cấp điện của card . Bit này = 1 nếu thủ tục cấp điện cho card đã được
hoàn thành.
Bit 30: bit lưu trạng thái lưu trữ (CCS). =1 nếu card là High Capacity SD Memory Card
và ngược lại. bit này là hợp lệ nếu card được cấp điện và bit 30 = 1. Sở dĩ có bit này vì có
1 chuẩn riêng cho High Capacity SD Memory Card.
4.2.2. CID
Là 1 thanh ghi 128 bit. Nó chưa thông tin để nhận dạng card (card indentification
information) được sử dụng trong pha card identification. Mỗi card (trong hệ thống có thể
có nhiều card) sẽ có một chỉ số duy nhất. Cấu trúc của thanh ghi CID được định nghĩa
trong bảng sau
Bảng 4.10. Các trường CID
Tên
Trường
Độ rộng
CID slice
Manufacturer ID
MID
8
[127:120]
OEM/Application
ID O
OID
16
[119:104]
Product name
PNM

40
[103:64]
1 vài trường khác





SD Card Page 24

4.3. Cách gửi lệnh và nhận phản hồi
4.3.1. CRC
CRC được dùng làm mã chống lỗi cho 1 từ mã cần truyền đi. Chúng được tính toán và
thêm vào cuối từ mã cần truyền. Khi nhận, máy thu sẽ tính toán kiểm tra có lỗi không.
Nếu có, có thể dừng thao tác hoặc yêu cầu đầu thu gửi lại. Việc tính toán mã CRC được
thực hiện như sau:
- Xét 1 từ mã sinh độ dài m. Xét đa thức sinh tương ứng G(x) có bậc m-1.
- Với mỗi từ mã cần truyền đi có độ dài n. Viết đa thức từ mã tương ứng M(x).
- Đa thức CRC là đa thức dư R(x) trong phép chia 



 

, là một đa
thức bậc m-2.
- Từ được truyền đi là từ tương ứng với đa thức 




 





 


 
- Khi kiểm tra, nếu không có lỗi trong khi truyền, đa thức T(x) sẽ chia hết cho G(x).
Ta làm một ví dụ đơn giản để tính mã CRC trong trường hợp m = 4.
10010001110000
1011
00100001110000
1011
001101110000
Từ mã ban đầuthêm 4 bit 0
Từ mã sinh - số chia
Kết quả (lại đưa vào phép tính tiếp theo)
Số chia được dịch sang phải cho
tới khi gặp bit 1 đầu tiên(màu đỏ)
……

Hình 4.9. Ví dụ về mã CRC
Kết quả của phép tính thứ nhất lại được đưa vào làm số bị chia cho phép tính tiếp theo.
Lúc này ta dịch số chia sang trái cho đến khi gặp bit 1 đầu tiên tương ứng của số bị chia
như trong ví dụ trên. Quá trình được dừng lại khi tất cả các bit từ bit thứ 4 trở về trước
của kết quả bằng 0. Chúng ta có thể nhận thấy đây cũng chính là cách thực hiện phép chia
đa thức trong hệ module 2.

Trong SD Card, CRC được sử dụng để bảo vệ Command, respones và việc truyền dữ liệu
khỏi lỗi trên bus SD Card. CRC được tạo ra cho mọi Command và kiểm tra cho mọi
response trên đường CMD. Đối với khối dữ liệu (data blocks), mỗi khi chuyển 1 khối dữ
liệu thì một CRC cũng được sinh ra và kèm vào cuối của đoạn Command, response hoặc
đoạn dữ liệu đó. Có 2 loại mã CRC được sử dụng trong SD Card là:
SD Card Page 25

 CRC7
CRC7 được sử dụng cho tất cả các Command và tất cả các response ngoại trừ kiểu
response R3. CRC7 là một giá trị 7-bit và được tính như sau:
Đa thức sinh: G(x) = 

 

 
Đa thức từ mã: M(x) =



 





 

  




 


CRC[6…0] = phần dư



 


 CRC16
Trong trường hợp 1 đường DAT được sử dụng, CRC16 được sử dụng để bảo vệ 1 khối
dữ liệu được chuyển đi. CRC16 là một giá trị 16-bit và được tính như sau:
Đa thức sinh: G(x) = 

 

 

 
Đa thức từ mã: M(x) =



 






 

  



 


CRC[15…0] = phần dư



 


4.3.2. Command
Để điều khiển SD Card, Vi xử lý sẽ gửi các Command đến SD Card qua đường CMD
trong chế độ SD. Đối với SD Card, có rất nhiều Command được sử dụng, tuy nhiên, trong
giới hạn đề tài, chúng ta chỉ xét một vài Command được sử dụng. Chúng ta sẽ đi vào tìm
hiểu các kiểu Command.
4.3.2.1. Command Types (Các kiểu Command)
Có 4 kiểu Command được định nghĩa để điều khiển SD Card:
 Broadcast Command (bc), không có response.
 Broadcast Commands with Response (bcr)
 Addressed (point-to-point) Commands (ac): không truyền dữ liệu trên đường DAT
 Addressed (point-to-point) Data Transfer Commands (adtc): có truyền dữ liệu trên
đường DAT.
4.3.2.2. Command Format

Độ dài của mỗi Command là 48 bit. Cấu trúc của mỗi Command như sau:

×