2016年6月21日 星期二

MinGW+MSYS 使用 libusb-win32 使PC與MCU通信

本篇文章將介紹如何使用libusb-win32來撰寫USB開發程式

準備軟體:
libusb-win32(1.2.6.0)
MinGW&MSYS: http://www.mingw.org/

MinGw教學:
http://shunyuan-chou.blogspot.tw/2010/02/2-mingw-windows-gnu.html

範例程式:
Usblib-win32-HID

下載libusb-win32-bin-1.2.6.0.zip解壓縮後,可以看到如下圖中有多個目錄。
當編譯程式告知缺少libusb0.sys或是libusb0.dll時,可至bin資料夾中選擇符合你環境的設定檔。

lib目錄下有不同compiler可以使用的library,由於本實驗使用gcc,所以將gcc下的libusb.a複製到撰寫程式的目錄下。


首先在C:\MiGW 下建立Project\HID,將libusb-win32-bin-1.2.6.0中的example與include複製到HID目錄下,libusb.a & libusb0.dll複製到example目錄下。



將bulk.c中定義的MY_VIDMY_PID更改為你要測試USB device 的參數。

編譯指令:
gcc -l ../include -g -c bulk.c -o bulk.o
gcc -g bulk.o libusb.a -o USB.exe

編譯完後可以執行USB.exe,測試是否有抓到USB device。

成功開啟USB裝置後,就可以使用lusb0_usb.h中的function來與MCU溝通拉。

int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);
int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);
int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size, int timeout);

int usb_control_msg(usb_dev_handle *dev, int requesttype, int request, int value, int index, char *bytes, int size, int timeout);

沒有留言:

張貼留言