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

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

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:

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

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

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

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

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

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

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:

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ố 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

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

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]

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).

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 




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[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


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status