Hướng dẫn giao tiếp đọc ghi thẻ nhớ SD sử dụng vi điều khiển MSP430G2553

CHIA SẺ VỀ CHƯƠNG TRÌNH ĐỌC/GHI THẺ SD BẰNG VI ĐIỀU KHIỂN MSP430 G2553 PHỤC VỤ LƯU TRỮ

  1. Tổng quan về chương trình

Chương trình sử dụng vi điều khiển chính là MSP430G2553 (có thể sử dụng vi điều khiển khác cùng họ MSP430) kết nối với module đọc/ghi thẻ nhớ SD card là MODULE MICRO SD CARD để lưu trữ dữ liệu, đọc dữ liệu…

Phần mềm sử dụng: IAR for MSP430

  1. Tiến hành
  1. Chuẩn bị

1 KIT MSP430G2553, 1 Module SD Card, 1 Thẻ nhớ SD card : Micro SD <= 2GB hoặc Micro SDHC <= 32GB

 

Và 1 hoặc nhiều file (nếu bạn cần ghi vào nhiều file) định dạng .txt (khác với file tự tạo) có trong thẻ nhớ SD card sẽ có sẵn trong file chia sẽ, các bạn có thể sao chép đổi tên để sử dụng đúng mục đích.

  1. Nối dây

Ở đây chúng ta dùng giao tiếp SPI (các bạn có thể lên google search là sẽ rõ) giữa MSP430G2553 và Module SD card

Ở thẻ nhớ có tổng cộng 6 chân nối tương ứng với MSP như sau

  • VCC nối với VCC 5V của MSP
  • GND nối với GND của MSP

Các bạn lấy lược đực hàn vào 2 cái lỗ như hình dưới để cắm dây đúng nguồn 5V

 

CS (Chip Select) nối với chân P2.0 (có thể nối xuống chân GND của MSP).

  • SCK nối với chân P1.5 của MSP.
  • MISO/SOMI nối với chân P1.6 của MSP.
  • MOSI/SIMO nối với chân P1.7 của MSP.
  1. Chương trình:

(Trong file đính kèm chia sẻ)

Ở đây mình giải thích một số hàm do mình tự viết, các bạn có thể điều chỉnh cho phù hợp (phần khai báo có sẵn trong file)

  1. Hàm kết nối với SD card

void connectSD()                //Connect to SD Card filename: SDcard.txt

  {        

    pf_mount(&fs);

    rc = pf_open(“SDcard.txt”);

    if(rc) dieSPI(rc);

  }

Hàm này để kết nối tới file có trong thẻ nhớ SD (mình lấy tên là SDcard.txt, các bạn có thể chỉnh sửa)

pf_mount(&..): để mở thẻ SD và khi chạy lần 2 để đóng thẻ SD

pf_open(“file name”): để kết nối tới file cần ghi dữ liệu.

  1. Hàm đọc 1 dòng từ thẻ nhớ

void Read_Line(int dong, char ReadLine[30]) // Read any line from SD Card

                    {

         br = 0;

        AccStringR = (dong-1)*1024;

        pf_lseek(AccStringR);

        if(rc) dieSPI(rc);

        pf_read(ReadLine, 30, &br);

​                    uart1Print(ReadLine);

                    __delay_cycles(1000000);

  }

Hàm này để đọc 1 dòng bất kì từ thẻ nhớ SD và ghi vô biến kiểu mảng char ReadLine[30]

pf_lseek(…), đưa con trỏ tới vị trí… để bắt đầu đọc

pf_read(ReadLine, 30, &br):

+ ReadLine : ghi ra biến ReadLine

+ 30: đọc 30 kí tự bắt đầu từ con trỏ

  1. Hàm ghi 1 dòng vào thẻ nhớ

void WRITESD(char *string) //Write String to SDCard

  {     

    bw = 0;                     /* Pointer to number of bytes written */                

    StringLength = 25;

    AccStringW = 1024*line;                      //Con trỏ tới chỗ cần viết

    pf_lseek(AccStringW);

    if(rc) dieSPI(rc);

    pf_write(string, StringLength, &bw);    //Đọc vào chuỗi string

    if(rc) dieSPI(rc);

    pf_write(0,0,&bw);                                //Kết thúc ghi

    if(rc) dieSPI(rc);

    __delay_cycles(100000);

}

Lưu ý: Tất cả các dòng cách nhau trong 1024 (như ta nhìn trong máy tính)

  1. Kết luận:

Ở trên là cách ghi một chuỗi dữ liệu vào thẻ nhớ SD Card bằng vi điều khiển MSP430G2553, các bạn có thể sử dụng vào nhiều mục đích như:

  • Truyền một gói tin đi xa mà bị đứt kết nối, ta có thể ghi lại và lần kết nối sau ta có thể lấy ra và truyền lại.
  • Ghi dữ liệu đo đạc được theo thời gian ở những nơi không có kết nối mạng

Cảm ơn các bạn đã theo dõi, nếu gặp vấn đề gì trong quá trình thực hiện cứ liên hệ mình, chúc các bạn thành công!
Thái Thiên