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

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.

pdf36 trang | Chia sẻ: ngtr9097 | Lượt xem: 4034 | Lượt tải: 5download
Bạn đang xem trước 20 trang tài liệu Đề tài Đọc dữ liệu từ SD Card và hiển thị lên LCD sử dụng Kit DE2 của ALTERA, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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: vuhuutiep@gmail.com 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: linhnd89@gmail.com 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: hung.kstn.k52@gmail.com 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: vanla3190@gmail.com 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 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 LBA1 13h Extensions SD Card Page 18 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ù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