36
SD Card Page 1 TRƯỜNG ĐẠI HC BÁCH KHOA HÀ NI ESRC Lab 618 Đề tài: Đọc dữ liu từ SD Card và hi n thlên LCD sử dng Kit DE2 ca ALTERA  Nhóm sinh v iên thc hin: Gr oup 3- K52 Vũ Hữ u T i p  Lê Thái Hư ng  Nguy  ễ n Duy Li nh   Lê Anh V ăn Hà Ni, 1 - 2011

226376 - Tại 123doc.vn

Embed Size (px)

Citation preview

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 1/36

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

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 2/36

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 Ni II 6

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 3/36

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 

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 4/36

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 743Mail: [email protected] 

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 LinhMobile: 0979 468 289

Mail: [email protected] 

Công việc chính: Tìm hiểu cấu trúc bảng

FAT.

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 5/36

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

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 6/36

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.

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 7/36

-  Để 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 ữ l i ệu trong Nios I I 

Macro Cách sử dụngIORD(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:

#d fi IORD ALTERA AVALON PIO DATA(b ) IORD(b 0)

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 8/36

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

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 9/36

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

SRAM

Controler

SDRAM

Controler

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 10/36

3.2.  Khối xử lý Nios IIThự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ânGiao 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)

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 11/36

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.

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 12/36

 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 (LeastSignificant 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.

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 13/36

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

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 14/36

o  Wide width data: 

h d ói d li d li

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 15/36

Đọc nhiều block:

 Hình 4.6. Quy trình đọc nhi 

ều block d 

ữ l i 

ệ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 ữ l i ệu 

Ghi hiề bl k

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 16/36

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 theochu 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ớ ihost (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 SDCard, 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

ầ iê à á í h h khi kh à bắ ầ

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 17/36

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ướ c00h 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 byte05h 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 

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 18/36

0Eh Giống như 06h, nhưng sử dụng LBA1 13h Extensions

0Fh Giống như 05h, nhưng sử dụng LBA1 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ùngmở 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

ế ầ

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 19/36

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 16B ả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 h h ế ã kh 3 b

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 20/36

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 Ý

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 21/36

4.1.2.2.4.  Bảng Root:B ảng 4.8. B ảng Root 

Name Offset Size DescriptionDIR_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 0x08ATTR_DIRECTORY 0x10

ATTR_ARCHIVE 0x20

ATTR_LONG_NAME

ATTR_READ_ONLY|

ATTR_HIDDEN|

ATTR_SYSTEM|

ATTR_VOLUME_IDDIR_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 đươngvớ 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 L A D 18 2 Ch h ể ối ù h

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 22/36

  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 

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 23/36

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ộtDual 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 đã đượ choà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

ố ể

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 24/36

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 đượ cthự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 đathứ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

Từ mã ban đầuthêm 4 bit 0

Từ mã sinh - số chiaKết quả (lại đưa vào phép tính tiếp theo)

Số chia được dịch sang phải cho

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 25/36

  CRC7

CRC7 đượ c sử dụng cho tất cả các Command và tất cả các response ngoại tr ừ kiểuresponse 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

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 26/36

B ảng 4.11. C ấ u trúc m ỗ i Command 

0 1  bit5…bit0   bit31…bit0   bit6…bit0 1Start bit,

always 0

Host Số hiệu cmd Argument CRC7 End bit,

always 1.

4.3.2.3.  Command Classes

Có r ất nhiều Command, chúng đượ c chia thành 11 loại theo bảng sau:

B ảng 4.12. Card Command Classes 

0 1 2 3 4 5 6 7 8 9-11Số hiệuCMD

Basic Reserved BlockRead

Reserved BlockWrite

Erase WriteProtection

LockCard

 ApplicationSpecific

Reserved

CMD0 +

CMD2 +CMD3 +

CMD4 +

CMD7 +

CMD9 +

CMD10 +

CMD12 +

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 27/36

ACMD13 +

ACMD22 +

ACMD23 +ACMD41 +

ACMD42 +

ACMD51 +

4.3.2.4.  Thông tin chi tiết về các Command

Các bảng sau mô ta chi tiết một số lệnh đượ c sử dụng trong đề tài:

B ảng 4.13. Basic Command 

Số hiệu cmd Kiểu Argument Kiểu

rsp

Tóm tắt Mô tả lệnh

CMD0 Bc [31:0] bit đệm

=’0’ - Go_idle_state Reset tất cả các thiết bị về 

tr ạng thái r ỗi

CMD1 Yêu cầu thẻ gửi nội dung thôngtin của thanh ghi OCR 

CMD2 Bcr  [31:0] bit đệm

=’0’ R2 All_send_cid Hỏi mọi thiết bị để gửi số hiệu

card của chúng trên đườ ng

CMD

CMD3 Bcr  [31:0] bit đệm

=’0’ R6

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 28/36

Tất cả các phản hồi đượ c gửi qua đường CMD. Độ dài của mỗi response phụ thuộc vào

kiểu response.

Một response luôn luôn bắt đầu là bit ‘0’, tiế p theo là bit chỉ hướ ng của dòng dữ liệu trên

đường CMD, ‘1’ nếu hướ ng là host-card, ‘0’ là hướng ngượ c lại. Trong những bảng dướ iđây, một giá tr ị đượ c ký hiệu là ‘x’ nếu nó là khu vực biến. Tất cả các response ngoại tr ừ 

kiểu R3 đều đượ c bảo vệ bở i 1 byte CRC. Bit k ết thúc luôn luôn là 1.

Có 5 kiểu response trong SD Card.

4.3.3.1.  R1 (normal response Command)

Độ dài 48 bit. Các bit 45:40 chỉ ra số hiệu CMD tương ứng. Tr ạng thái của Card được lưutrong 32 bit 39:8. Chú ý r ằng nếu việc truyền dữ liệu quá phức tạ p, một tín hiệu báo bận

có thể xuất hiện trên đượ c dữ liệu sau sự truyền 1 block dữ liệu. Host sẽ kiểm tra việc bận

này sau khi truyền 1 block. Tr ạng thái của card sẽ đượ c mô tả sau. 

B ảng 4.14. Response R1 

Vị trí 47 46 [45:40] [39:8] [7:1] 0

Độ r ộng (bits) 1 1 6 32 7 1

Giá tr ị  ‘0’  ‘0’ X X X ‘1’ Mô tả start bit transmission bit command index card status CRC7 end bit

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 29/36

4.3.3.4.  R3 (Thanh ghi OCR)

Độ dài 48 bit. Nội dung của thanh ghi OCR được như là phản hồi cho lệnh ACMD41. B ảng 4.16. Response R3 

Vị trí 47 46 [45:40] [39:8] [7:1] 0

Độ r ộng (bits) 1 1 6 32 7 1

Giá tr ị  ‘0’  ‘0’  ‘111111’ X ‘1111111’  ‘1’ Mô tả start bit transmission bit Reserved OCR Reserved end bit

4.3.3.5.  R6 (Published RCA response)

Độ dài 48 bit. Bit [45:40] chỉ ra số hiệu CMD tương ứng. 16 bit đầu của trương argumentđượ c sử dụng cho Published RCA number.

B ảng 4.17. Response R6 

Vị trí 47 46 [45:40] [39:8] [7:1] 0Độ dài 1 1 6 16 16 7 1

Giá tr ị  ‘0’  ‘0’ x x x x ‘1’ Mô tả start bit transmission

 bit

command

index

Published

RCA[31:16]

mớ i

[15:0] card status

 bit:

23,22,19,12:0

CRC7 End bit

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 30/36

Voltage accepted Value Definition

0000b Không được định nghĩa 

0001b 2.7-3.6 V0010b Bảo vệ cho khoảng điện áp thấ p0100b Reserved

1000b Reserved

Còn lại Không được định nghĩa 

4.4.  Phương pháp truyền nhận dữ liệu4.4.1. Card Initialization and Card Initializatio

Ban đầu, ta khở i tạo cho các chân và chế  độ  cho các đườ ng

command và data

- Gửi lệnh, nhận dữ liệu- Kéo chân CLK, CMD lên cao và DATA xuống thấ p

Lệnh CMD0 – lệnh này không có phản hồi.

- Lệnh này là lệnh Reset mềm có tác dụng set card về 

tr ạng thái Idle.

- Sau lệnh này, đườ ng CMD sẽ ở tr ạng thái chờ lệnh tiế p

Bắt đầu

Khởi tạo các chân

Chế độ gửi lệnh,nhận dữ liệu

Gửi CMD0

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 31/36

0 nếu đang khở i tạo, 1 nếu đã hoàn tất) Host sẽ lặ p lại việc phát lệnh ACMD41

liên tục cho đến khi bit báo bận bằng 1.

-  Bằng việc hiện set thanh ghi OCR (operation conditions register) về 0 trong đối

số của ACMD41, host có thể hỏi và xác định khoảng giá tr ị trước khi đưa cardcó khoảng giá tr ị làm việc không phù hợ  p về tr ạng thái inactive.

-  Sau khi lệnh này đượ c gửi thành công, card chuyển sang tr ạng thái Ready 

Lệnh CMD2 (ALL_SEND_CID )  – ph ản h ồi R2 

-  Khi host gửi lệnh này đi, tất cả các card phải gửi địa chỉ ID về cho host (địa chỉ này được lưu trong thanh ghi CID – card indentification number về host.

-  Sau khi lệnh này đượ c gửi card chuyển sang tr ạng thái Indentification 

Lệnh CMD3 (SEND_RELATI VE_ADDR)  – ph ản h ồi R6 

-  Khi host gửi lệnh này, tất cả các card sẽ gửi các địa chỉ tương đối (RCA) đến cho

host. Địa chỉ này sẽ đượ c sử dụng cho chế độ truyền dữ liệu (data transfer) ở sau.Địa chỉ này ngăn hơn so voi địa chỉ CID. 

-  Một khi địa chỉ RCA đượ c gửi đi, card sẽ chuyển sang tr ạng thái Stand-by. 

-   Nếu muốn gán giá tr ị RCA khác cho SD, host có thể gửi lệnh CMD3 khác tớ icard. Địa chỉ RCA cuối cùng sẽ là địa chỉ RCA của card. 

4.4.2.  Data transfer Mode

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 32/36

Lệnh CMD7 (SEND_CSD)  – ph ản h ồi R1 

-  Lệnh CMD7 đượ c sử dụng để đưa card trong các card đã kết nối đượ c và chuyểnnó thành chế độ Transfer. 

-  Tương tự lệnh CMD9, cần truyền thêm tham số RCA của card đượ c chọn. Ngoài

ra, khi lệnh CMD7 đượ c gửi với địa chỉ RCA=0x0000, thì tất cả card đều đượ cchuyển về tr ạng thái Stand-by 

-  Sau lệnh này, host và card đượ c chọn sẽ k ết nối tr ực tiế p vớ i nhau.

Lệnh CMD16 (SET_BLOCK_LENGTH )  – ph ản h ồi R1 

-  Sau khi gửi 2 lệnh trên, ta có thể gửi thêm các lệnh khác. Song ở mức độ đọc thẻ 

SD ta chỉ cần đề cập đến lệnh này. 

-  Tác dụng của lệnh là xác định độ dài của block truyền phù hợ  p vớ i loại thẻ SD sử 

dụng. 

4.4.3.  Read Data

Ở  đây ta chỉ  xét quy trình đọc dữ liệu của 1 block 512byte. Việc

đọc dữ liệu của 1 file lưu trên thẻ SD tất nhiên sẽ là việc đọc nhiều

liên tiế p

Lệnh CMD17 (BLOCK_READ)  – ph ản h ồi R1 

CMD17

(kèm số thứ tựblock cần đọc)

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 33/36

-  Chờ cho cho đến khi tồn tại dữ liệu trên đườ ng Data.

-  Đọc toàn bộ 512 byte dữ liệu của block. Các byte dữ liệu này được đọc khi chân

clock ở mức cao. 

-  Ta cần sử dụng 1 biến con tr ỏ để lưu 512 byte dữ liệu được đọc vào. Ở đây, dùng biên *buff 

K ết thúc đọc dữ liệu 1 block 

-  Sau khi đọ xong 1 block ta cần gửi 16 xung clock chờ cho tin hiệu trên dây Data

k ết thúc.

4.5.  Đọc ghi một file dữ liệu vào trong SD card

Do thẻ SD chỉ là 1 partion nên khi đọc hay ghi ta chỉ quan tâm đến bảng FAT, Root là đủ.

4.5.1.  Đọc một file

Quy trình việc đọc file như sau: 

-  Tìm kiếm file và header của file trong bảng Root

-  Tìm trong bảng Fat các cluster chứa dữ liệu

-  Đọc các cluster tìm đượ c và lấy dữ liệu

Ở  đây, các chương trình cần thiết cho việc đọc SD_card đượ c ghi trong file FAT16.h.

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 34/36

5. LCD 16x2

Các thủ tục: khở i tạo, hiển thị, tọa độ con tr ỏ đượ c thực hiện theo chuẩn của LCD.

Trong Nios II, ta quan tâm đến các định nghĩa sau: 

// THE REGISTER MAP

//

// 7 6 5 4 3 2 1 0 Offset

// +-----+-----+-----+-----+-----+-----+-----+-----+// RS = 0 | Command Register (WRITE-Only) | 0

// +-----+-----+-----+-----+-----+-----+-----+-----+

// RS = 0 | Status Register (READ -Only) | 1

// +-----+-----+-----+-----+-----+-----+-----+-----+

// RS = 1 | Data Register (WRITE-Only) | 2

// +-----+-----+-----+-----+-----+-----+-----+-----+// RS = 1 | Data Register (READ -Only) | 3

// +-----+-----+-----+-----+-----+-----+-----+-----+

#define LCD_write_cmd(data) IOWR(LCD_16207_0_BASE, 0, data)

#define LCD_read_cmd() IORD(LCD_16207_0_BASE, 1)

#define LCD_write_data(data) IOWR(LCD_16207_0_BASE, 2, data)

#define LCD_read_data() IORD(LCD_16207_0_BASE, 3)

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 35/36

7. Tài liệu tham khảo

-  SD Specifications Part1: Physical Layer Simplified Specification Version 2.00. SDGroup, Matsushita Electric Industrial Co.,Ltd.(Panasonic), SanDick Corporation,

Toshiba Corporation, Techical Committee, SD Card Association.

-  SD Specification Part A2: SD Host Controller Simplified Specification Version

2.00. Techical Committee, SD Card Association.

-  TriFlash with Secure Digital (SD) Interface Product Manual (Preliminary).

Corporate Headquarters. -   Nios II Software Developer’s Handbook. 

-  http://en.wikipedia.org/wiki/Secure_Digital  

-  http://www.sdcard.org/home/  

-   My First Nios II Software Tutorial.pdf 

-  SD_Card_Interface_for_SoPC_Builder.pdf 

-   Datasheet 1602.

8/22/2019 226376 - Tại 123doc.vn

http://slidepdf.com/reader/full/226376-tai-123docvn 36/36

SD Card Page 36

8. Phụ lục A: Các hàm sử dụng trong hệ thống:

Các hàm sử dụng Chức năng Thư viện Các hàm con sử dụng trong hàm nàyvoid Ncr(void); Chuy ển card v ề ch ế  độ nhận dữ liệu SD_Card.hvoid Ncc(void); Tạo m ẫu 8 clock SD_Card.hBYTE response_R(BYTE); Xử lý phản h ồi từ card SD_Card.hBYTE send_cmd(BYTE *); Gửi command đế n card SD_Card.hBYTE SD_read_lba(BYTE *buff, UINT32 lba,UINT32 seccnt);

Đọc dữ liệu của seccnt sector trên SD Card b ắt đầu từ sector thứ lba và lưu

vảo trong buffer 

SD_Card.h  Ncc();Ncr(); send_cmd();

BYTE SD_card_init(void); Khởi tạo giao ti ế p với SD Card SD_Card.  Ncr();Ncc();response_R();send_cmd();

void GetTime(int lsb, int msb, int *sec,int *min, int *hour);

Đọc thời gian khởi tạo của 1 file trên SD Card FAT16.h

void GetDay(int lsb, int msb, int *day, int*mon, int *year);

Đọc ngày tháng năm khởi tạo của 1 file trên SD Card FAT16.h

int GetHeader(fi *entry, BYTE root[]); Đọc thông tin v ề ngày tháng năm khởi tạo, thời gian khởi tạo, địa chỉ, kích

thước của 1 file lưu trong mảng root[]

FAT16.h void GetTime();void GetDay();

void PrintHeader(fi *entry); Hi ển thị thông tin của file len man hinh console FAT16.hvoid GetData(fi *entry, BYTE fat[], BYTEdata[]);

Đọc dữ liệu chứa trong 1 file của SD Card, lưu thông tin về file trong mảng

fat[] và lưu dữ liệu của file trong mảng data[]

FAT16.h SD_read_lba();

void PrintData(fi *entry, BYTE data[]); Hi ển thị dữ liệu của file len man hinh console FAT16.hvoid LCD_Init(); Khởi tạo LCD LCD.hvoid LCD_Show_Text(char* Text); Hi ển thị một chu ỗi kí tự lên LCD LCD.hvoid LCD_GoTo(int x, int y); Hi ển thị tại vị trí tọa độ (x,y) trên LCD LCD.hvoid LCD_Display(char *text1, char *text2) Hi ển thị text 1 tại dòng 1 và text 2 trên dòng 2 của LCD LCD.h LCD_GoTo();LCD_Show_Text();

void LCD_Display2(char *text1, char *text2,int cursor)

Hi ển thị text 1 tại dòng 1 và text 2 trên dòng 2 của LCD, hi ển thị thêm d ấ unháy tại đầu dòng 1

LCD.h LCD_GoTo();LCD_Show_Text();

void buttons_isr( void* context, alt_u32 id  Chương trình con phục vụ ng ắt Interrupt.hvoid btn_int(void) Khởi tạo ng ắt

Duyệt h ế t t ấ t cả các file trên SD Card và trả v ề s ố file tìm được

Interrupt.h

int ScanFile() Duyệt h ế t t ấ t cả các file trên SD Card và trả v ề s ố file tìm được hello_world.c GetHeader();

void BlockData(BYTE data[], BYTE strres[],int i)

L ấ y 16 kí tự của nội dung file b ắt đầu tại block có chỉ s ố I - dung de hien thi

1 dong tren LCD

hello_world.c

void ShowData(int index) Hi ển thị nội dung của file hello_world.c GetData();BlockData();LCD_Display();

void ShowFile() Hi ển thị các file trong SD Card hello_world.c LCD_Display2();ShowData();

int Init() Khởi tạo chương trình, kiểm tra xem có giao ti ế p với SD Card hay không hello_world.c SD_read_lba();LCD_Init();btn_int();alt_irq_register(); SD_card_init()