Lập trình STM32 USB MSC Host đọc dữ liệu từ USB

stm32 usb msc host

Trong bài này chúng ta sẽ cùng tìm hiểu STM32 USB MSC Host để biến STM32 thành 1 chiếc máy tính có thể đọc ghi dữ liệu từ USB hay các thiết bị MSC khác.

Bài 5 phần STM32F407 trong Serie Học STM32 từ A tới Z

USB MSC Host là gì?

MSC (Mass Storage Class) là lớp thiết bị lưu trữ của chuẩn USB, ví dụ như USB flash, ổ cứng gắn ngoài, đầu đọc thẻ nhớ. USB MSC Host chính là biến STM32 thành 1 chiếc máy tính để có thể giao tiếp với các thiết bị MSC thông qua cổng USB.

USB MSC Host có rất nhiều ưu thế như:

  • Có thể sử dụng các thiết bị MSC như 1 bộ nhớ bên ngoài, khắc phục nhược điểm bộ nhớ ít của vi điều khiển
  • Có thể trực tiếp đọc, ghi dữ liệu từ các thiết bị MSC khác
  • Nâng cao khả năng tương thích với các thiết bị trên thị trường hiện nay
  • Có thể nạp chương trình mới (qua bootloader tự viết) trực tiếp từ file trong USB

USB MSC Host cũng làm việc theo quy trình: khởi tạo, đọc/ghi, kết thúc. Giống như bạn đi thư viện: đăng ký thẻ (nhận diện thiết bị), mượn hoặc ghi sổ (đọc/ghi file), rồi trả sách (đóng file) trước khi ra về.

msc inline mscgraph 11

 

Lập trình STM32 USB MSC Host đọc dữ liệu từ USB

Chuẩn bị

Phần cứng gồm KIT STM32F4 Discovery, 1 cáp OTG (micro USB sang USB-A cái) và 1 chiếc USB flash.

day usb

 

Thiết lập trên CubeMx

Cấu hình USB_OTG_FS ở chế độ Host_Only và Middleware USB_HOST với Class Mass Storage Host Class như các hình sau:

STM32 MSC HOST

STM32 USB MSC HOST config 1

Để thiết bị Host nhận ra việc có thiết bị cắm vào cổng USB và cấp nguồn cho thiết bị, chúng ta cấu hình chân VBUS như sau:

usb msc

Tiếp theo cấu hình các phần còn lại như hình:

STM32 USB MSC HOST config 2 STM32 USB MSC HOST config 3

 

Sau khi Gen code, chúng ta copy thư viện xử lý file vào project, thêm file vào cây Project, thêm đường dẫn thư viện và include vào code như các hình dưới đây:

STM32 USB MSC HOST config copy file

STM32 USB MSC HOSTthem file

STM32 USB MSC HOST them duong dan

STM32 USB MSC HOST them duong dan 2

STM32 USB MSC HOST include

Lập trình STM32 USB MSC ghi dữ liệu

Để lập trình USB Host MSC, chúng ta tìm trong file usb_host.c hàm USBH_UserProcess.

Chúng ta viết code vào case HOST_USER_CLASS_ACTIVE, nghĩa là khi USB đã kết nối thành công và class MSC đã được khởi động.

STM32 USB MSC HOST lap trinh 1

Để ghi dữ liệu, chúng ta sử dụng các hàm được định nghĩa trong file thư viện đã include:

  • Tạo folder
  • Tạo file và ghi file

STM32 USB MSC HOST lap trinh 2

Lưu ý: Thư viện FatFs mặc định chỉ đọc được USB định dạng FAT/FAT32, không đọc được exFAT hay NTFS (định dạng mặc định của nhiều USB dung lượng lớn khi format trên Windows). Nếu chương trình báo lỗi mount, hãy format lại USB sang FAT32. Ngoài ra luôn đóng file bằng f_close sau khi ghi, rút USB khi file chưa đóng sẽ làm mất dữ liệu hoặc hỏng file.

Chúng ta có thể kết nối mạch USB-UART vào UART2 để debug và xem dữ liệu được in ra.

Sau đó cắm USB vào mạch.

Kết quả: sau khi cắm USB, cổng Serial sẽ in ra các dòng text thông báo.

Sau đó tháo USB và cắm vào máy tính, ta thấy file và folder đã được tạo trên USB.

STM32 USB MSC HOST ket qua

Lập trình STM32 USB MSC đọc và sửa dữ liệu

STM32 USB MSC HOST lap trinh 3

Để đọc dữ liệu, sử dụng lệnh Readfile và truyền vào đường dẫn của file.

Để sửa file (ghi thêm nội dung), sử dụng lệnh Update_File và truyền vào đường dẫn.

Kết

STM32 USB MSC Host rất tiện dụng khi các bạn lập trình các ứng dụng dùng USB để đọc/ghi dữ liệu, ví dụ như máy CNC đọc các lệnh G-code lưu trong USB để thực thi.

Vậy là các bạn đã biết cách sử dụng STM32 USB MSC Host, hãy chuyển tới bài tiếp theo. Đừng quên gia nhập Hội Anh Em Nghiện Lập trình để giao lưu và học hỏi nhé!!!

5/5 - (2 bình chọn)

1 những suy nghĩ trên “Lập trình STM32 USB MSC Host đọc dữ liệu từ USB”

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *