1. Nội dung thiết kế tốt nghiệp:
4.3.3 Câu lệnh đọc ghi thẻ nhớ và hàm định dạng FATFS
Cấu trúc lệnh của SD Card: Một khung lệnh có độ dài 6 bytes gồm các trường sau:
Bảng 4. 1 Khung lệnh của SD Card
Vị trí bit 47 46 [45- 40] [39 – 8] [7 – 1] 0 Kíchthước 1 1 6 32 7 1 Giá trị 0 1 x x x 1 Mô tả Start bit Transmittion bit Command index
argument CRC7 End bit
Một số lệnh thường gặp khi giao tiếp với Micro SD Card
Bảng 4. 2 Một số lệnh thường gặp của SD Card
Mã lệnh Ký hiệu Mô tả
CMD0 GO_IDLE_STATE Reset thẻ về trạng thái idle
CMD1 SEND_OP_CODE Yêu cầu thẻ gửi nội dung thông tin của
Operating Condition Regiters Condition Regiters
CMD8 SEND_EXT_CSD Yêu cầu thẻ gửi thông tin các thanh ghi
CSD(Card Specific Data) dưới dạng block dữ liệu.
CMD9 SEND_CSD Yêu cầu thẻ gửi thông tin cụ thể của
Đồ Án Tốt Nghiệp
Trang 61
CMD10 SEND_CID Yêu cầu gửi các thông tin CID(Card
Information Data).
CMD12 STOP_TRANSMISSION Ngưng trao đổi dữ liệu
CMD16 SET_BLOCKLEN Thiết lập độ lớn tính theo byte của một
block dữ liệu, giá trị mặc này được lưu trong CSD
CMD17 READ_SINGLE_BLOCK Đọc một block dữ liệu
CMD18 READ_MULTIPLE_BLOCK Đọc nhiều block dữ liệu. Số lượng block
được thiết lập bởi lệnh CMD23
CMD23 SET_BLOCK_COUNT Thiết lập số lượng block dữ liệu để ghi
hoặc đọc.
CMD24 WRITE_BLOCK Ghi một block dữ liệu.
CMD25 WRITE_MULTIPLE_BLOC
K
Ghi nhiều block dữ liệu. Số lượng block được thiết lập bởi lệnh CMD23
MD55 APP_CMD Thông báo cho thẻ nhớ lệnh tiếp theo là
lệnh riêng của ứng dụng chứ không phải là lệnh chuẩn
Câu lệnh gửi tới thẻ nhớ: Khi hoạt động ở chế độ SPI, các lệnh điều khiển và dữ liệu được truyển chung trên 2 tín hiệu DI và DO
Khi đọc dữ liệu từ thẻ :
Hình 4. 12 Đọc dữ liệu từ thẻ nhớ [5]
Khi ghi dữ liệu xuống thẻ :
Hình 4. 13 Ghi dữ liệu xuống thẻ nhớ [5] Chuẩn giao tiếp SD:
Đọc thanh ghi CID trong thẻ sử dụng lệnh READ_CID. Trạng thái của thẻ:
Card status: Được lưu trong 1 thanh ghi trạng thái 32-bit . Nó sẽ gửi như là 1 trường dữ liệu card respond tới host command. Thanh ghi status cung cấp thông tin về trạng thái hiện thời của thẻ và sự hoàn thành lệnh sau cùng cho host command. Lệnh truy vấn :
Trang 62
Sd_status: Được lưu trong 512-bit và được gửi như là một dữ liệu single block ngay sau khi được truy vấn bởi host bằng sử dụng lệnh SD_STATUS
Thanh ghi CSD:
Tất cả thông tin cấu hình của thẻ SD đều được lưu trên thanh ghi này.
Những bytes MSB của thanh ghi này chứa thông tin về nhà sản xuất và 2 bytes Least Significant chứa dữ liệu về host được điều khiển, thẻ sao lưu, write protection, định dạng file người dùng.
Host có thể đọc thông tin và thay đổi dữ liệu trên thanh ghi CSD bằng lệnh SEND_CSD và PROGRAM_CSD.
Giao tiếp thông qua SD bus cơ bản là thông qua các chuỗi bit data hay command, chúng đều bắt đầu bằng một start bit và một stop bit:
Command: Một lệnh thể hiện bắt đầu một hành động. Một lệnh được gửi từ host tới từng thẻ riêng biệt hay tới tất cả các thẻ được kết nối. Một lệnh được truyền tuần tự trên dây CMD.
Response: Một response được truyền tới host để trả lời một lệnh được nhận từ trước đó. Response này cũng được truyền trên dây CMD.
Data: Dữ liệu có thể truyền từ host tới thẻ hoặc ngược lại, dữ liệu được truyền trên dây data.
Dữ liệu truyền đi hoặc tới thẻ được đóng gói trong các block. Các data block luôn kèm theo các CRC bit. Có hai loại block dữ liệu là: single block và multi block. Chú ý rằng multi block tốt hơn cho việc ghi dữ liệu nhanh hơn. Kết thúc việc truyền một multi block khi có một stop command trên CMD. Dữ liệu truyền được thiết lập bởi host là sử dụng single hay multi.
Hành động đọc một multi block:
Hình 4. 14 Đọc một multi block [18]
Đồ Án Tốt Nghiệp
Trang 63
Hình 4. 15 Viết một multi block [18]
Định dạng một command:
Hình 4. 16 Định dạng một command [18]
Định dạng response: Có 4 kiểu response trả về tùy thuộc nội dung kèm theo độ dài có thể là 48 hoặc 136 bit. Thuật toán bảo vệ cho block data là CRC-16-CCITT
Hình 4. 17 Định dạng response [18] FATFS :
FatFS là bộ mã nguồn miễn phí hỗ trợ định dạng FAT(File Allocation Table) được sử dụng rộng rãi trong hệ điều hành Windows. Tổ chức của FATFS được mô tả như sau:
Trang 64
Hình 4. 18 Tổ chức FATFS [4]
FATFS sẽ cung cấp giao diện các hàm cơ bản để thực thi các thao tác file trên thẻ MMC/SD tương tự như lập trình file trên máy tính.
FatFS hỗ trợ các kiểu format FAT12, FAT16, FAT32.
Các hàm giao diện lập trình: f_mount, f_open, f_close, f_read, f_write,f_lseek, f_sync, f_opendir, f_readdir, f_getfree, f_stat, f_mkdir, f_untrnk, f_chmod, f_rename, f_mkfs.
FatFS gồm 2 phần chính là phần FAT bao gồm các hàm liên quan đến File Allocation Table, và phần ATA liên quan đến xử lý các lệnh ATA để giao tiếp với thẻ nhớ.
Tổ chức file chính của FatFs gồm:
file ff.c: gồm các hàm hỗ trợ FAT.
file ata.c: gồm các hàm giao tiếp ATA command.
Để giao tiếp với phần điều khiển (driver) của thẻ MMC/SD, FatFS yêu cầu 5 hàm giao diện
disk_initialize: hàm khởi tạo kết nối tới thẻ MMC/SD, đồng thời kích hoạt cho thẻ ở trạng thái sẵn sàng hoạt động.
disk_write: ghi dữ liệu vào một vùng sector nhất định.
disk_read: đọc dữ liệu từ một vùng sector cho trước.
disk_status: lấy trạng thái của thẻ.
disk_ioctl: các hàm xử lý các yêu cầu khác sẽ được bố trí xử lý ở đây. Kiến trúc của FatFS đơn giản do đó rất tiện cho việc “port” sang một hệ nhúng khác. Người dùng không cần có kiến thức sâu về FAT vẫn có thể sử dụng FatFS vào hệ thống của mình.
Đồ Án Tốt Nghiệp
Trang 65
Chương 5: Chế tạo thử nghiệm