You are on page 1of 33

BỘ 

GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA­ĐHQG TPHCM
KHOA ĐIỆN – ĐIỆN TỬ
NGÀNH ĐIỆN TỬ ­ VIỄN THÔNG

       BÁO CÁO ĐỒ ÁN 2

ĐỀ TÀI:   

TRUYỀN DỮ LIỆU QUA 
BLUETOOTH 

 .................................... ....................................      

1
MỤC LỤC
PHẦN 1: GIỚI THIỆU KHÁI QUÁT VỀ ĐỀ TÀI
1 ­ Mô tả về đề tài

2 ­ Sơ đồ khối

3 ­ Các phần cứng sử dụng

PHẦN 2: GIỚI THIỆU TỔNG QUAN VỀ BLUETOOTH VÀ MODULE 
HC ­ 05

1 ­ Giới thiệu khái niệm về bluetooth

2 ­ Một số thuật ngữ dùng trong bluetooth

3 ­ Các ứng dụng nổi bật của Bluetooth

4 ­  Sơ lược về các “thế hệ” Bluetooth

5­ Module HC­05

PHẦN 3 : VI ĐIỀU KHIỂN STM32F100C6T6

1 ­ Giới thiệu về vi xử lý ARM –Cortex M3

2 ­ Dòng vi điều khiển STM32

3 ­ Vi điều khiển STM32F100C6T6

PHẦN 4: MMC SD CARD

1 ­ Cấu trúc lưu trữ file của SD card

2 ­ Cấu trúc file của mỗi phân vùng

3 ­ Giao tiếp với Micro SD Card

2
4 ­ Khởi tạo SD Card

5 ­ Cấu hình giao diện SPI để giao tiếp với Micro SD Card

6 ­ Quá trình truyền dữ liệu giữa Host và SD Card

PHẦN 5: KHỐI HIỂN THỊ VÀ PHÍM NHẤN

1 ­ Sơ đồ kết nối LCD với vi điều khiển                                              

2 ­ Cấu hình chân của LCD

3 – sơ đồ kết nối phím nhấn

PHẦN 6: TÀI LIỆU THAM KHẢO VÀ CODE LẬP TRÌNH

1 – Tài liệu tham khảo……………………………………………....trang 36

2 – Code chương trình phần phát ………………………………...trang 37

3 – Code chương trình phần thu …………………………………..trang 44

3
PHẦN 1:GIỚI THIỆU KHÁI QUÁT VỀ ĐỀ TÀI
1)Mô tả đề tài
  ­  Truyền một file bất kì đọc từ thẻ nhớ SD card đến thiết bị thu thông qua 
giao tiếp Bluetooth.
  ­ File đọc từ thẻ nhớ bằng vi điều khiển thông qua giao tiếp SPI.
  ­ Giao tiếp Bluetooth với thiết bị thu bằng module HC­05.
  ­ Vi điều khiển giao tiếp module HC­05 thông qua UART.
2)Sơ đồ khối

  

         KHỐI HIỂN THỊ

   BỘ NHỚ    MODULE
   DỮ LIỆU KHỐI ĐIỀU KHIỂN BLUETOOTH

    PHÍM NHẤN BLUETOOT
H

      KHỐI THU

 
3)Phần cứng sử dụng
  ­ Bộ nhớ dữ liệu : MMC –SD card có dung lượng 512 MB.
 
  ­ Khối hiển thị sử dụng LCD 16x2 với 4 đường data.

  ­ Khối điều khiển : vi điều khiển STM32F100C6T6.

  ­ Phím nhấn : sử dụng 4 button.

4
  ­ Module Bluetooth : module HC­05

  ­ Khối thu : các thiết bị có hỗ trợ giao tiếp Bluetooth như điện thoại di động , 
laptop …

PHẦN 2:GIỚI THIỆU TỔNG QUAN VỀ BLUETOOTH

1 ) Giới thiệu khái niệm về bluetooth
   Bluetooth là công nghệ dựa trên tần số vô tuyến sử dụng để tạo kết nối giao 
tiếp giữa hai loại thiết bị khác nhau trong một cự li nhất định. Có rất nhiều các 
thiết bị sử dụng công nghệ bluetooth như: điện thoại di động, máy tính và thiết 
bị hổ trợ cá nhân (PDA) 

   Bluetooth được thiết kế để thay thế dây cable giữa máy tính và các thiết bị 
truyền thông cá nhân, kết nối vô tuyến giữa các thiết bị điện tử với nhau.
   Bluetooth khi kích hoạt có thể tự định vị những thiết bị khác có chung công 
nghệ trong vùng xung quanh và bắt đầu kết nối với chúng.
   Bluetooth có thể đạt được tốc độ truyền dữ liệu 1Mb/s. Bluetooth hỗ trợ tốc 
độ truyền tải dữ liệu lên tới 720 Kbps trong phạm vi 10 m–100 m
Sử dụng dải tần 2.4 – 2.48GHz
Một số đặc điểm nổi trội của bluetooth:
­ Tương thích cao
­ Tiêu thụ năng lượng thấp
­ Dễ dàng phát triển ứng dụng
­ An toàn và bảo mật

5
2 ) Một số thuật ngữ dùng trong bluetooth
­ Piconet là tập hơp các thiết bị được kết nối thông qua kỹ thuật bluetooth theo 
mô hình Ad­hoc (xây dựng 1 mạng kết nối (chủ yếu là vô tuyến) giữa các thiết 
bị đầu cuối mà không cần phải dùng các trạm thu phát gốc (BS).)
­ Scatternet là 2 hay nhiều Piconet độc lập và không đồng bộ kết hợp lại truyền 
thông với nhau
­ Master unit: master thiết lập bộ đếm xung, quyết định số kênh truyền thông và 
kiểu bước nhảy để đồng bộ tất cả các thiết bị trong cùng piconet à nó đang 
quản lý
­ Slaver unit là các thiết bị còn lại trong piconet mà không phải là master
Có 4 trạng thái chính của 1 thiết bi bluetooth trong piconet
­ Inquiring device: đang phát tín hiệu tìm thiết bị
­ Inquiring scanning device: nhận tín hiệu inquiring và trả lời
­ Paging device: phát tín hiệu yêu cầu kết nối
­ Page scanning device: nhận yêu cầu kết nối
Chế độ kết nối
­ Active mode: thiết bị bluetooth tham gia vào hoạt động của mạng
­ Sniff mode: là 1 chế độ tiết kiệm năng lượng của thiết bị đang ở trong trạng 
thái active, thiết bi slave nhận tín hiệu từ mạng với tần số giảm hay nói cách 
khác là giảm công suất
­ Hold  mode: là 1 chế độ tiết kiệm năng lượng của thiết bị đang ở trong trạng 
thái active, đây là chế độ tiết kiệm năng lượng trung bình
­ Park mode: là chế độ tiết kiệm năng lượng của thiết bị vẫn còn trong mạng 
nhưng không tham gia vào quá trình trao đổi dữ liệu (inactive), đây là chế độ 
tiết kiệm năng lượng nhất

3)Các ứng dụng nổi bật của Bluetooth:
­ Điều khiển và giao tiếp không giây giữa một điện thoại di động và tai nghe 
không dây.
­ Mạng không dây giữa các máy tính cá nhân trong một không gian hẹp đòi hỏi ít 
băng thông.
­ Giao tiếp không dây với các thiết bị vào ra của máy tính, chẳng hạn 
nhưchuột, bàn phím và máy in.
­ Truyền dữ liệu giữa các thiết bị dùng giao thức OBEX (dùng trao đổi các dữ 
liệu vật lý như tập tin, hình ảnh và cả các dạng nhị phân).
­ Thay thế các giao tiếp nối tiếp dùng dây truyền thống giữa các thiết bị 
đo, thiết bị định vị dùng GPS, thiết bị y tế, máy quét mã vạch, và các thiết bị 
điều khiển giao thông.

6
­ Thay thế các điều khiển dùng tia hồng ngoại.
­ Gửi các mẩu quảng cáo nhỏ từ các pa­nô quảng cáo tới các thiết bị dùng 
Bluetooth khác.
­ Điều khiển từ xa cho các thiết bị trò chơi điện tử như Wii ­ Máy chơi trò chơi 
điện tử thế hệ 7 của Nintendo[1] vàPlayStation 3 của Sony.
­ Kết nối Internet cho PC hoặc PDA bằng cách dùng điện thoại di động 
thay modem.
4 ) Sơ lược về các “thế hệ” Bluetooth

   Theo Wikipedia, thuật ngữ “Bluetooth” (có nghĩa là “răng xanh”) được đặt theo 
tên của một vị vua Đan Mạch, vua Harald Bluetooth, người Viking nổi tiếng về 
khả năng giúp mọi người có thể giao tiếp, thương lượng với nhau. Bluetooth 
được phát triển đầu tiên bởi Ericsson (hiện nay là Sony Ericsson và Ericsson 
Mobile Platforms), và sau đó được chuẩn hoá bởi Bluetooth Special Interest 
Group (SIG). Chuẩn được phát hành vào ngày 20 tháng 5 năm 1999. Ngày nay 
được công nhận bởi hơn 1800 công ty trên toàn thế giới. Được thành lập đầu 
tiên bởi Sony Ericsson, IBM, Intel, Toshiba và Nokia, sau đó cùng có sự tham gia 
của nhiều công ty khác với tư cách cộng tác hay hỗ trợ. Bluetooth có chuẩn là 
IEEE 802.15.1.

Bluetooth 1.0. Tháng 7/1999, phiên bản Bluetooth 1.0 đầu tiên được đưa ra thị 
trường với tốc độ kết nối ban đầu là 1Mbps. Tuy nhiên, trên thực tế tốc độ kết 
nối của thế hệ này chưa bao giờ đạt quá mức 700Kbps. Phiên bản này còn khá 
nhiều lỗi và các nhà sản xuất đã rất khó khăn khi tích hợp nó với các sản phẩm 
công nghệ.

Bluetooth 1.1. Năm 2001, phiên bản Bluetooth 1.1 ra đời, đánh dấu bước phát 
triển mới của công nghệ Bluetooth trên nhiều lĩnh vực khác nhau với sự quan 
tâm của nhiều nhà sản xuất mới. Cũng trong năm này, Bluetooth đươc bình 
chọn là công nghệ vô tuyến tốt nhất năm.

Bluetooth 1.2. Ra mắt vào tháng 11/2003, Bluetooth 1.2 bắt đầu có nhiều tiến 
bộ đáng kể. Chuẩn này hoạt động dựa trên nền băng tần 2.4 Ghz và tăng cường 
kết nối thoại. Motorola RARZ là thế hệ di động đầu tiên tích hợp Bluetooth 1.2.

Bluetooth 2.0 + ERD. Một năm sau, vào tháng 11/2004, công nghệ Bluetooth 2.0 
+ ERD đã bắt đầu nâng cao tốc độ và giảm thiểu một nửa năng lượng tiêu 
thụ so với trước đây. Tốc độ của chuẩn Bluetooth lên đến 2.1 Mbps với chế độ 
cải thiện kết nối truyền tải – ERD (enhanced data rate), song  ERD vẫn chỉ là 
chế độ tùy chọn, phụ thuộc vào các hãng sản xuất có đưa vào thiết bị hay 

7
không. Năng lượng sử dụng của kết nối Bluetooth chỉ còn tiêu hao một nửa so 
với trước. Các thiết bị tiêu biểu ứng dụng Bluetooth 2.0 + ERD là: Apple 
iPhone, HTC Touch Pro và T­Mobile’s Android G1.

Bluetooth 2.1 + ERD. Đây chính là thế hệ nâng cấp của Bluetooth 2.0. Bluetooth 
2.1 có hiệu năng cao hơn và tiết kiệm năng lượng hơn. Chuẩn này chủ 
yếu đã được sử dụng trong trong điện thoại, máy tính và các thiết bị di động 
khác. Tuy nhiên, Bluetooth 2.1 không cho phép truyền các file lớn với tốc độ 
cao. Do đó, nếu người dùng muốn chuyển các file dung lượng lớn đến 1­2GB 
từ máy tính sang điện thoại thì chỉ có thể kết nối hai thiết bị này bằng dây cắm 
USB hoặc bằng thẻ nhớ .

Bluetooth 3.0 + HS:  Tháng 4/2009, Bluetooth 3.0 ­ thế hệ "siêu tốc" chính thức 
ra mắt. Bluetooth 3.0 có tốc độ truyền dữ liệu đạt mức 24Mbps – bằng sóng 
Bluetooth – High Speed, tương đương chuẩn Wi­Fi thế hệ đầu tiên. Chuẩn này 
giúp các thiết bị tương tác tốt hơn, tăng cường năng lực kết nối giữa các cá 
nhân với nhau và tiết kiệm pin nhờ chức năng điều khiển năng lượng nâng cao. 
Đặc biệt, nó có thể dò tự động các thiết bị gần kề và chuyển trực tiếp sang 
mạng Wi­Fi nếu các thiết bị đó có kết nối Wi­Fi. Tuy nhiên, phạm vi hiệu quả 
nhất chỉ trong vòng 10m.
 
Bluetooth 4.0: Đây là phiên bản mới nhất của Bluetooth vừa được tổ chức SIG 
thông qua. Bluetooth 4.0 có nhiều đặc điểm chung với chuẩn 3.0, nhưng ngoài 
khả năng truyền dữ liệu tốc độ cao lên tới 25 Mb/giây, Bluetooth 4.0 còn bổ 
sung thêm khả năng truyền dữ liệu dung lượng nhỏ trong phạm vi ngắn (8­27 
byte tốc độ 1Mbps) với mức tiêu thụ điện năng rất thấp giúp tiết kiệm năng 
lượng so với chuẩn cũ. 

    Bluetooth 4.0 nhiều khả năng sẽ dành cho các ứng dụng trong lĩnh vực y tế, 
chăm sóc sức khỏe và an ninh, chẳng hạn như đồng hồ đeo tay theo dõi sức 
khỏe, hoặc trang bị cho các bộ cảm biến nhiệt độ, nhịp tim, thể thao, và các 
thiết bị sử dụng tại gia. Tổ chức Continua Health Alliance đã đồng ý chọn lựa 
Bluetooth 4.0 làm công nghệ truyền dữ liệu cho những thiết bị y tế di động 
tương lai. Dự kiến các thiết bị sử dụng chuẩn bluetooth 4.0 sẽ ra mắt trong quý 
IV năm nay. 

   Tuy nhiên, cũng có nghiên cứu cho rằng, quá lạm dụng thiết bị Bluetooth sẽ 
gây ảnh hưởng không tốt tới sức khoẻ do sóng radio gây ra.
5) Module HC­05

8
a)Thông số kĩ thuật module HC­05
  ­Điện thế hoạt động của UART 3.3 – 5V.
 ­Dòng điện khi hoạt động: khi Pairing 30 mA, sau khi pairing hoạt động truyền  
nhận bình thường 8 mA.
  ­Baudrate UART có thể  chọn  được: 1200, 2400, 4800, 9600, 19200, 38400,  
57600, 115200.
 ­Kích thước của module chính: 28 mm x 15 mm x 2.35 mm
 ­Dải tần sóng hoạt động: 2.4GHz.
 ­Bluetooth protocol:  Bluetooth Specification v2.0+EDRo
 ­Kích thước: 26.9mm x 13mm x 2.2 mm
 ­Thiết lập mặc định:
  Baud rate: 9600, N, 8, 1.
  Pairing code: 1234.

b) Chế độ hoạt động
+ Ở chế độ SLAVE: bạn cần thiết lập kết nối từ smartphone, laptop, usb 
bluetooth để dò tìm module sau đó pair với mã PIN là 1234. Sau khi pair thành 
công, bạn đã có 1 cổng serial từ xa hoạt động ở baud rate 9600.
+ Ở chế độ MASTER: module sẽ tự động dò tìm thiết bị bluetooth khác (1 
module bluetooth HC­06. HC05, usb bluetooth, bluetooth của laptop…) và tiến 
hành pair chủ động mà không cần thiết lập gì từ máy tính hoặc smartphone.
Module bluetooth HC05 có nhiều chức năng

9
Module bluetooth HC05 được điều khiển bằng tập lệnh AT để thực hiện các 
tác vụ mong muốn. Để bluetooth module chuyển từ chế độ thông thường qua 
điều khiển bằng lệnh AT, ta có 2 cách như sau:
+ Cấp nguồn cho module bluetooth (Vcc và Gnd) đồng thời cấp mức điện áp 
cao (=Vcc) cho chân KEY của module bluetooth. Khi đó giao tiếp bằng tập lệnh 
AT với module bằng cổng Serial (Tx và Rx) với baud rate là 38400. (khuyên 
dùng)
+ Cấp nguồn cho module bluetooth trước, sau đó cấp mức điện áp cao cho chân 
KEY của module bluetooth. Lúc này bạn có thể giao tiếp với module bằng tập 
lệnh AT với baud rate là 9600.
Sau khi pair thành công với thiết bị bluetooth khác, đèn trên module bluetooth 
HC05 sẽ nhấp nháy chậm cho thấy kết nối Serial đã được thiết lập.

PHẦN 3 : VI ĐIỀU KHIỂN STM32F100C6T6

1 ) Giới thiệu dòng ARM – Cortex M3
    Cortex là bộ xử lý thế hệ mới đưa ra một kiến trúc chuẩn cho nhu cầu đa 
dạng về công nghệ. Không giống như các dòng ARM khác, dòng Cortex là một 
lõi xử lý hoàn thiện đưa ra một chuẩn CPU và kiến trúc hệ thống chung.
     Dòng Cortex gồm 3 nhánh: dòng A dành cho các ứng dụng cao cấp, dòng R 
dành cho các ứng dụng thời gian thực và dòng M dành cho các ứng dụng điều 
khiển và chi phí thấp. 
    Lõi ARM Cortex M3 là sự cải tiến của ARM7, từng mang lại thành công 
vang dội cho công ty ARM.  Cortex­M3 đưa ra một lõi vi điều khiển chuẩn 
nhằm cung cấp phần tổng quát, quan trọng nhất của vi điều khiển bao gồm hệ 
thống ngắt( Interrupt system), SysTick timer ( được thiết kế cho hệ điều hành 
thời gian thực), hệ thống kiểm lỗi ( Debug system), memory map và nhiều tính 
năng cải tiến khác. Các chip ARM7 và ARM9 có hai tập lệnh ( tập lệnh ARM 
32­bit và tập lệnh Thumb 16­bit), trong khi đó dòng Cortex được thiết kế hỗ trợ 
tập lệnh ARM Thumb­2, là sự phối hợp giữa 2 tập lệnh trên để đạt được sự 
tương nhượng giữa dung lượng code và thời gian xử lý.

2) Dòng STM32

    Dòng STM32 do ST sản suất, vi điều khiển dựa trên lõi ARM Cortex M3. 
Dòng STM32 thiết lập các tiêu chuẩn mới về hiệu suất, chi phí cũng như các 
ứng dụng đòi hỏi tiêu thụ năng lượng thấp và đòi hỏi khắt khe về điều khiển 
thời gian thực. 

10
     Các dòng STM32 được ST tích hợp thêm nhiều ngoại vi thích hợp cho các 
ứng dụng điều khiển đa dụng. Thành phần chính của STM32 là nhân Cortex 
M3, dùng I­Bus và D­Bus để kết nối với FLASH cũng như các ngoại vi. Ngoài 
ra thành phần quan trọng khác là DMA. Các ngoại vi được chia làm 2 nhóm kết 
nối đến hai giao diện khác nhau AHB­APB1 và AHB­APB2( có tốc độ tối đa 
lớn hơn AHB­APB1)
3 ) Vi điều khiển STM32F100C6T6
     STM32F100C là dòng “high density” của STM32 với các đặc điểm sau:  
ARM 32­bit Cortex­M3 Microcontroller, 24MHz, 32kB Flash, 4kB SRAM, PLL, 
Embedded Internal RC 8MHz and 32kHz, Real­Time Clock, Nested Interrupt 
Controller, Power Saving Modes, JTAG and SWD, 4 Synch. 16­bit Timers with 
Input Capture, Output Compare and PWM, 2 16­bit Advanced Timer, 2 16­bit 
Basic Timer, 2 16­bit Watchdog Timers, SysTick Timer, 3 SPI/I2S, 2 I2C, 2 
USART, CAN 2.0B Active,  12­bit A/D Converter, 2 12­bit D/A Converter, 
SDIO, Fast I/O Ports 

Sơ đồ nguyên lý kết nối vi điều khiển :

11
 

PHẦN 4 : MMC SD Card

1 ) Cấu trúc lưu trữ file của SD Card
   Hầu như tất cả các ổ đĩa cứng đều có cấu tạo tương tự nhau: mỗi ổ đĩa được 
chia thành các phân vùng ( partition), số lượng phân vùng tùy vào dung lượng 
của ổ đĩa, tối đa là 4 phân vùng. Mỗi phân vùng chứa nhiều Cluster, mỗi Cluster 
chứa nhiều Sector. 
   Khi một file được lưu vào ổ đĩa thì nó sẽ được lưu vào các Cluster, nếu một 
Cluster đã dùng để lưu một file nào đó thì nó không thể dùng để lưu 1 file khác 
mặc dù có thể file đó vẫn chưa chiếm hết Cluster đó, điều này gây ra lãng phí 
bộ nhớ.

12
                                                      Cấu trúc của thẻ nhớ
   Sector đầu tiên của ổ đĩa là MBR, nó chứa Executable Code và thông tin của 4 
phân vùng (partition) như bên dưới:

Thông tin của mỗi phân vùng được chứa trong 16 bytes , bao gồm các trường :

     Thông tin quan trọng ở đây là Starting sector of the partition, nó cũng chính là 
địa chỉ của Boot Sector của mỗi phân vùng.

13
2 ) Cấu trúc file của mỗi phân vùng
      Phân vùng là nơi mà ta cần tìm ra để có thể giao tiếp đọc­ghi file lên SD 
card. Mỗi phân vùng có cấu trúc lưu trữ thông tin chung như bên dưới:

  ­  Cấu trúc file của phân vùng được tổ chức theo dạng FAT ( File Allocation 
Table). Bao gồm 4 phần: 
a. Reserved sectors:   nằm ở vùng đầu tiên của một phân vùng. Sector đầu tiên 
của Reserved sectors là Boot sector, nó chứa tất cả các thông tin về phân vùng. 
b. FAT Region: nó gồm hai bản copy của File Allocation Table, bản thứ hai rất 
hiếm khi dùng đến. Nó được định vị tới vùng dữ liệu.( Data Region) , sẽ đề cập 
ở phần sau 
c. Root Directory Region: nó là một bảng thư mục( directory table)  chứa thông 
tin về các files và các thư mục trong thư mục gốc. 
d. Data Region: đây là vùng thật sự chứa các files dữ liệu và các thư mục con.
  ­ Chi tiết về các vùng quan trọng cần nắm rõ :

   + Boot sector : Có kích thước 1 sector, nằm đầu tiên của mỗi phân vùng 
( không phải là sector đầu tiên của ổ đĩa), chứa các thông tin quan trọng về phân 
vùng.  Bao gồm các trường như bảng dưới:

14
     Như nói ở trên Boot sector này chứa tất cả các thông tin ta cần phải biết để 
giao tiếp với SD card như: số sector dự trữ, số byte trong 1 sector, số sector 
trong 1 cluster, số bảng FAT copy ( thường là 1)…

  +File Allocation Table

     Là một danh sách các mục nhập ánh xạ đến mỗi Cluster trong vùng dữ liệu. 
Khi ghi một file vào SD Card, trường hợp dung lượng file lớn hơn 1 cluster thì 
file sẽ được lưu trong nhiều cluster và chú ý là các cluster này có thể không liên 
tiếp nhau; do đó bảng FAT này giúp ta tìm ra cluster tiếp theo chứa file. 

Nó gồm các mục nhập mỗi mục nhập chứa một trong 5 thông tin sau:

1. Số của Cluster tiếp theo trong dãy Cluster của file dữ liệu. 

15
2. Kết thúc chuỗi các Cluster trong file dữ liệu. 

3. Mục nhập đánh dấu một Cluster xấu. 

4. Mục nhập đánh dấu một Cluster dự trữ. 

5. Một giá trị 0 chỉ ra một Cluster chưa sử dụng.

Hai mục nhập đầu tiên chứa hai giá trị đặc biệt 

Mục nhập thứ nhất chứa bản copy của Media Decriptor.   

 Mục nhập thứ hai chứa end­of­cluster­chain marker 

    Bởi vì hai Cluster đầu tiên chứa giá trị đặc biệt thành ra không có Cluster 0 và 
1. Cluster đầu tiên theo sau Root directory là Cluster 2.

                                            Giá trị các mục nhập trong Fat

  + Root Directory Regio

    Là một loại đặc biệt của file dùng để trình bày một thư mục, có cấu tạo theo 
dạng bảng. Mỗi thư mục hay file lưu trữ trong nó được tạo thành bởi một mục 
nhập 32 bytes chứa các thông tin như tên, phần mở rộng, thuộc tính…

16
Thông tin cần thiết ở đây là cluster bắt đầu của file hay thư mục con.

  + Data Region :Chứa dữ liệu cùa file, bao gồm nhiều cluster. Chú ý là mỗi 
cluster chỉ chứa dữ liệu của một file, không có trường hợp một cluster chứa dữ 
liệu của nhiều file khác nhau.

3 ) Giao tiếp với Micro SD Card

     Trong SPI mode, hướng của dữ liệu trên đường tín hiệu được cố định, dữ 
liệu truyền đồng bộ nối tiếp theo từng byte .

Lệnh từ SPI đến Card có độ độ dài cố định ( 6 bytes) như bên dưới:

Trong đó: SCLK : SPI2_SCK        

DI : SPI2_MOSI        

DO : SPI2_MISO                

17
NCR: thời gian đáp ứng của lệnh ( tùy vào từng loại Card mà có thời gian khác 
nhau )

      Khi một khung lệnh được truyền đến Card, một đáp ứng tương ứng cho 
lệnh đó ( R1, R2,R3 ) có thể được đọc từ Card. Vì việc chuyển dữ liệu được lái 
bằng xung clock của SPI do đó sau khi truyền xong khung lệnh SPI cần tiếp tục 
cấp xung clock cho Card thì mới có thể nhận được đáp ứng từ Card ( bằng cách 
gửi liên tục giá trị 0xFF và đọc giá trị trả về cho tới khi nhận được đáp ứng 
đúng).

a)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 như bên dưới:

Một số lệnh thường gặp khi giao tiếp với Micro SD Card :

18
b) Đáp ứng của SD Card

Có 3 dạng đáp ứng, tùy vào lệnh được gửi mà ta có dạng R1, R2 và R3. Trong 
đó đáp ứng R1 là cho phần lớn các lệnh .

19
Đáp ứng R1: có độ dài 8 bit, gồm 7 bit trạng thái. Khi một lỗi xuất hiện thì bit 
tương ứng sẽ được đặt lên 1. Giá trị 0x00 nghĩa là thành công .

Đáp ứng R3: gồm R1 cộng với 32 bit OCR, chỉ dành cho lệnh CMD58. 

Ngoài ra còn có một số dạng đáp ứng khác nhưng ứng ít gặp .

4 ) Khởi tạo SD Card

    Ở trạng thái Idle, SD Card chỉ chấp nhận CMD0, CMD1, ACMD41và 
CMD58, mọi lệnh khác sẽ bị từ chối.

Các bước khởi tạo Card:

 1) Gửi lệnh CMD1 đưa Cadr rời trạng Idle (gửi lệnh CMD1 và đợi nhận 
Response thích hợp, Response thay đổi từ 0x01 sang 0x00).

 2) Nếu muốn thay đổi độ dài của khối dữ liệu thì gửi lệnh CMD16 ( mặc 
định là 512 bytes).

5 ) Quá trình truyền dữ liệu giữa Host và SD Card
     Trong quá trình trao đổi dữ liệu, một hoặc nhiều khối dữ liệu sẽ được gửi 
hoặc nhận sau đáp ứng của lệnh.
     Một khối dữ liệu được vận chuyển giống như một gói dữ liệu bao gồm 3 
trường: Data Token, Data Block, CRC.

20
      

Quá trình đọc một khối dữ liệu: 

 Tham số ( argument) trong lệnh CMD17 xác định địa chỉ bắt đầu của khối dữ 
liệu cần đọc. 

 Khi lệnh CMD17 được chấp nhận, hoạt động đọc dữ liệu bắt đầu diễn ra, dữ 
liệu sẽ được gửi đến Host.  

 Sau khi Host nhận được một Data Token thích hợp, bộ điều khiển sẽ bắt đầu 
nhận dữ liệu và 2 bytes CRC theo sau Data token. 

Host phải nhận 2 bytes CRC mặc dù có thể không dùng đến nó. 

 Nếu có lỗi xuất hiện, thì Error token sẽ được nhận thay vì Data packet.

Quá trình đọc nhiều khối dữ liệu
Tham số trong lệnh CMD18 xác định địa chỉ bắt đầu của một dãy khối dữ liệu 
liên tiếp. 
 Khi lệnh CMD18 được chấp nhận, hoạt động đọc dữ liệu sẽ diễn ra, dữ liệu 
sẽ được gửi đến Host. 
 Sau khi Host nhận được Response thích hợp, bộ điều khiển sẽ bắt đầu nhận 
dữ liệu. 

21
Hoạt động nhận dữ liệu chỉ kết thúc khi gửi lệnh CMD12, dữ liệu nhận được 
theo sau lệnh CMD12 không có ý nghĩa, do đó nó cần được bỏ qua trước khi 
nhận Respose cho lệnh CMD12.

6 ) Giao diện SPI
a) Giới thiệu giao diện SP
   Trong ARM Cortex M3 dòng “ high density”, giao diện SPI có thể thực hiện 
chức năng như là một giao thức SPI hay là giao thức âm thanh I2S. Chức năng 
mặc định là SPI.
     Giao diện SPI ( serial peripheral interface) phép truyền dữ liệu nối tiếp đồng 
bộ ở cả hai chế độ : haff duplex và full duplex với thiết bị ngoài.
    Ngoài ra nó còn được sử dụng cho nhiều mục đích khác như Simplex transfer 
hay reliable communication sử dụng mã kiểm tra CRC.
    Khi SPI cấu hình ở giao thức I2S, nó cung cấp một giao diện truyền dữ liệu 
nối tiếp đồng bộ, có thể cấu hình ở các tiêu chuẩn âm thanh khác nhau bao gồm 
I2S Philips standard, MSB­justified standard, LSB­ justified standard và PCM 
standard.
b) Đặc điểm của giao diện SP
  ­Truyền đồng bộ Ful duplex trên 3 đường. 
  ­Truyền đồng bộ Simplex trên 2 đường.
  ­Dữ liệu có thể truyền dưới dạng khung 8 bit hay 16 bit. 
  ­Có thể cấu hình ở Master hoặc Slave Mode. 
  ­Có khả năng hoạt động ở Multimaster Mode. 
  ­Có thể hoạt động ở nhiều tốc độ khác nhau, lớn nhất lên đến 18 Mhz.
  ­Có thể lập trình cực tính và pha của xung clock. 
  ­Có thể truyền MSB hay LSB trước. 
  ­Cung cấp hai cờ chuyên dụng cho việc truyền và nhận dữ liệu kèm với ngắt. 
  ­Cờ báo hiệu Bus SPI bận. 
  ­Tích hợp Hardware CRC cho truyền thông tin cậy. 
  ­Hỗ trợ DMA cho việc truyền dữ liệu tốc độ cao.
c) SPI hoạt động ở chế độ Master
      Khi cấu hình SPI hoạt động  ở  Master, giao diện SPI cung cấp xung Clock  
cho thiết bị Slaver gắn với nó ( Ở đây là Micro SD Card).
    Việc truyền dữ  liệu được thực hiện khi dữ  liệu được ghi vào thanh ghi bộ 
đệm gửi Tx buffer.
    Dữ liệu sau đó được chuyển song song vào thanh ghi dịch trong khi truyền bit  
đầu tiên và sau đó được dịch nối tiếp đến chân MOSI có thể  MSB hay LSB  

22
trước tùy vào cấu hình. Cờ TXE được đặt lên 1 khi dữ liệu được chuyển từ Tx  
bufer sang thanh ghi dịch và một ngắt được tạo ra.
    Khi nhận xong, dữ liệu được chuyển từ thanh ghi dịch sang bộ đệm nhận Rx 
buffer, cờ RXNE được đặt lên 1 và một ngắt  được tạo ra.
d) Cấu hình giao diện SPI để giao tiếp với Micro SD Card

Micro SD Card kết nối với giao diện SPI2 qua 3 chân 
1) SPI2_SCK ( PB13): xung clock SPI2 cấp cho SD Card.
2) SPI2_MOSI ( PB15): dữ liệu từ SPI2 đến SD Card. 
3) SPI2_MISO (PB14): dữ liệu từ SD Card đến SPI2
 Ngoài ra còn có chân SD_SC ( PA3): cho phép SD Card hoạt động
Cấu hình giao diện SPI
Sử dụng giao diện SPI2. 
 ­SPI1 hoạt động ở Master Mode. 
 ­Full duplex.
 ­Dữ liệu truyền dưới dạng khung 8 bit.
 ­MSB trước. 
 ­ Không dùng DMA để truyền dữ liệu. 
 ­Tốc độ :    
   gửi lệnh 36 MHz / 128 = 281 KHz 
  đọc dữ liệu  36 MHz / 2 = 18 MHz 
     Trạng thái clock tĩnh như bên dưới ( CPHA =0 : việc truyền và nhận 
xảy ra ở cạnh đầu tiên của xung clock, CPOL =0: trạng thái tĩnh của clock 
là âm) ( hay còn gọi là SPI Mode 0)

23
PHẦN 5:  Khối hiển thị
 Sử dụng LCD 16x2 là một LCD rất thông dụng trên thị trường hiện nay .

Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển bên trong lớp
vỏ và chỉ đưa các chân giao tiếp cần thiết. Sơ đồ kết nối LCD như hình :

24
 ­ Ý nghĩa các chân của LCD :

25
26
3)Sơ đồ kết nối phím nhấn

27
­ SW1 : chọn file trước đó
­ SW2 : chọn file tiếp theo.

­ SW3 : truyền file.

­ SW4 : Dừng quá trình truyền file.

PHẦN 6: TÀI LIỆU THAM KHẢO VÀ CODE LẬP TRÌNH
1)Tài liệu tham khảo 
 ­ wikipedia.org
 ­ Một số đồ án về Bluetooth
 ­ Pay It Forward Câu lạc bộ Nghiên Cứu Khoa Học Khoa Điện ­ Điện tử ­ 
Bách Khoa TP. HCM
 ­ http://www.st.com
2)Code lập trình 
sbit LCD_RS at GPIOB_ODR.B9;
sbit LCD_EN at GPIOB_ODR.B7;
sbit LCD_D4 at GPIOB_ODR.B6;
sbit LCD_D5 at GPIOB_ODR.B5;
sbit LCD_D6 at GPIOA_ODR.B8;
sbit LCD_D7 at GPIOA_ODR.B11;

sbit Mmc_Chip_Select           at GPIOb_ODR.B0;

const LINE_LEN = 43;
char j;
char err_txt[20]             = "FAT16 not found";
char filename[9]            = "aaa.wav";
char filenome[9]              = "bbb.txt";
unsigned long  i, size;
unsigned short loop, loop2;
char           Buffer[512];
char txt3[] = "bbb.txt";
char txt4[] = "aaa.wav";
char f=0;
void UART1_Write_Line(char *uart_text) {

28
  UART1_Write_Text(uart_text);
  UART1_Write(13);
  UART1_Write(10);
}

void Move_Delay() {
  Delay_ms(750);
}

void M_Open_File_Read() {
  char character;

  if(f==1){
  Mmc_Fat_Assign(&filenome, 0);
  Mmc_Fat_Reset(&size);
  for (i = 1; i <= size; i++) {
    Mmc_Fat_Read(&character);
    UART1_Write(character);

  }
  }
  if(f==2){
  Mmc_Fat_Assign(&filename, 0);
  Mmc_Fat_Reset(&size);
  for (i = 1; i <= size; i++) {
    Mmc_Fat_Read(&character);
    UART1_Write(character);
  }
}

 void mo_file() {
 char status;
 char name;

29
    status = Mmc_Fat_Exists("bbb.txt");

     if (1 == status) {
     f = 1 ;
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Out(1,1,txt3);

      //M_Open_File_Read();
     }
     else{
     Lcd_Cmd(_LCD_CLEAR);
      Lcd_Out_Cp("no file");
     }
}

 void mo_file2() {
 char status;
 char name;

    status = Mmc_Fat_Exists("aaa.wav");

     if (1 == status) {
     f = 2;
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Out(1,1,txt4);

      //M_Open_File_Read();
     }
     else{
     Lcd_Cmd(_LCD_CLEAR);
      Lcd_Out_Cp("no file");
     }
}

      unsigned long clk;
/*­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­MAIN­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­*/
void main() {

30
  UART1_Init(9600);
  Delay_ms(10);
  GPIO_Digital_Input(&GPIOB_IDR, _GPIO_PINMASK_15);
  GPIO_Digital_Input(&GPIOB_IDR, _GPIO_PINMASK_14);
  GPIO_Digital_Input(&GPIOB_IDR, _GPIO_PINMASK_13);
  GPIO_Digital_Output(&GPIOB_BASE, _GPIO_PINMASK_8 );
  GPIOB_ODR.B8=0;
  Lcd_Init();
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Out(1,4,txt1);
  Lcd_Out(2,4,txt2);
  SPI1_Init_Advanced(_SPI_FPCLK_DIV4, _SPI_MASTER | _SPI_8_BIT |
                     _SPI_CLK_IDLE_LOW | 
_SPI_FIRST_CLK_EDGE_TRANSITION |
                     _SPI_MSB_FIRST | _SPI_SS_DISABLE | 
_SPI_SSM_ENABLE | _SPI_SSI_1,
                     &_GPIO_MODULE_SPI1_PA567);

  Delay_ms(10);
   do {
   
   if ( Button(&GPIOB_IDR, 14, 100, 0)) {
  if (!Mmc_Fat_Init()) {
    SPI1_Init_Advanced(_SPI_FPCLK_DIV4, _SPI_MASTER | _SPI_8_BIT 
|
                       _SPI_CLK_IDLE_LOW | 
_SPI_FIRST_CLK_EDGE_TRANSITION |
                       _SPI_MSB_FIRST | _SPI_SS_DISABLE | 
_SPI_SSM_ENABLE | _SPI_SSI_1,
                       &_GPIO_MODULE_SPI1_PA567);

        mo_file2();

     }
  else {

31
    UART1_Write_Line(err_txt);
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Out_Cp("no SDCARD");
      }

    }
   
  if ( Button(&GPIOB_IDR, 15, 100, 0)) {
  if (!Mmc_Fat_Init()) {
    SPI1_Init_Advanced(_SPI_FPCLK_DIV4, _SPI_MASTER | _SPI_8_BIT 
|
                       _SPI_CLK_IDLE_LOW | 
_SPI_FIRST_CLK_EDGE_TRANSITION |
                       _SPI_MSB_FIRST | _SPI_SS_DISABLE | 
_SPI_SSM_ENABLE | _SPI_SSI_1,
                       &_GPIO_MODULE_SPI1_PA567);

        mo_file();

     }
  else {
    UART1_Write_Line(err_txt);
    Lcd_Cmd(_LCD_CLEAR);
     Lcd_Out_Cp("no SDCARD");
      }

    }

  if ( Button(&GPIOB_IDR, 13, 100, 0)) {
  if (!Mmc_Fat_Init()) {
    SPI1_Init_Advanced(_SPI_FPCLK_DIV4, _SPI_MASTER | _SPI_8_BIT 
|
                       _SPI_CLK_IDLE_LOW | 
_SPI_FIRST_CLK_EDGE_TRANSITION |

32
                       _SPI_MSB_FIRST | _SPI_SS_DISABLE | 
_SPI_SSM_ENABLE | _SPI_SSI_1,
                       &_GPIO_MODULE_SPI1_PA567);

        M_Open_File_Read();

     }
  else {
    UART1_Write_Line(err_txt);
    Lcd_Cmd(_LCD_CLEAR);
     Lcd_Out_Cp("no SDCARD");
      }

    }
  }

 while(1)   ;
}

33

You might also like