因為有個構想,想在UEFI Shell 下控制各類的Serial Device,所以對此稍微做了以下研究........
相關資料:
http://en.wikipedia.org/wiki/Serial_port
http://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter
http://en.wikipedia.org/wiki/FTDI
http://www.crashcourse.ca/wiki/index.php/USB/serial_driver_and_pl2303
http://www.intel.eu/content/dam/doc/product-specification/efi-v1-10-specification.pdf
http://www.uefi.org/sites/default/files/resources/UEFI_Shell_Spec_2_0.pdf
Serial Device可能有下列幾種介面:
1. ISA
2. PCI
3. USB
EFI Spec V1.10 "10.12 Serial I/O Protocol" 有定義SerialIO Protocol相關資訊
typedef struct {
UINT32 Revision;
EFI_SERIAL_RESET Reset;
EFI_SERIAL_SET_ATTRIBUTES SetAttributes;
EFI_SERIAL_SET_CONTROL_BITS SetControl;
EFI_SERIAL_GET_CONTROL_BITS GetControl;
EFI_SERIAL_WRITE Write;
EFI_SERIAL_READ Read;
SERIAL_IO_MODE *Mode;
} SERIAL_IO_INTERFACE;
首先,先在UEFI Shell 下, 執行sermode , 得到如下結果 :
( sermode command 請參照 UEFI Shell Spec.)
Shell> sermode
sermode: No serial ports present
Shell>
看來相關的UEFI Driver ,沒有掛起來,得要自己Build ㄧ下code才行........
根據我Mainboard的COM Port設定, 估計得Build IsaSerialIoDxe module , 來源從EDK2。
試了一下,還是不行,仔細再看了ㄧ下code, 還需要Build IsaIoDxe module.......
Build好之後再試試看,結果終於有反應了,顯示如下,但不確定是否會動作正常,需再進一步驗證。
fs0:\Efi\tools> load IsaIoDxe.efi
load Image fs0:\Efi\tools\IsaIoDxe.efi loaded at B84CD000 - Success
fs0:\Efi\tools> load IsaSerialDxe.efi
load Image fs0:\Efi\tools\IsaSerialDxe.efi loaded at B84C4000 - Success
fs0:\Efi\tools> sermode
147(AD548D18) - (115200, N, 8, 1)
fs0:\Efi\tools> sermode 147 9600 N 8 1,
sermode: Mode set on handle AD548D18
fs0:\Efi\tools> sermode
147(AD548D18) - (9600, N, 8, 1)
fs0:\Efi\tools>
在寫個測試程式前,先來找找看UEFI 有沒有Usb serial device driver.
透過Google找到了下列描述:
"Status: Completed (For FTDI). Available at OptionRomPkg/Bus/Usb/FtdiUsbSerialDxe."
再搜尋了一下,發現市售常用的USB-serial 晶片有下列幾款:
1.FT232R
2.PL2303
3.CH340g/340T/340R
4.CP210x
目前我手上有幾款USB serial device, ID資訊如下:
CH340T => ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
PL2303 => ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
FT232R => ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
針對FT232R Driver 修改如下:
測試結果FT232R Usb-Serial 可動作正常,傳輸資料也OK...
硬體不一樣,當然行為模式也不一樣,至於PL2303, CH340 , CP2102 的UEFI Driver 網路上還沒找到現成的,只好等有時間再來嘗試Porting了.........
Download : FtdiUsbSerialDxe.efi (64bits Version)
Download : IsaSerialIoDxe (64bits Version)
Download : IsaIoDxe (64bits Version)
PL2303 => ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
FT232R => ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
針對FT232R Driver 修改如下:
//
// add code to set trigger time based on baud rate
// setting to 0.5s for now
//
gBS->SetTimer (
UsbSerialDevice->PollingLoop,
TimerPeriodic,
EFI_TIMER_PERIOD_MILLISECONDS (100) //從500修改成100
);
測試結果FT232R Usb-Serial 可動作正常,傳輸資料也OK...
硬體不一樣,當然行為模式也不一樣,至於PL2303, CH340 , CP2102 的UEFI Driver 網路上還沒找到現成的,只好等有時間再來嘗試Porting了.........
Download : FtdiUsbSerialDxe.efi (64bits Version)
Download : IsaSerialIoDxe (64bits Version)
Download : IsaIoDxe (64bits Version)
馬克你好 請問一下 如果要在UEFI 下 使用USBtoRS232 Cable的話 是要依據不同的MB來寫code,最後在load Driver嗎?
回覆刪除你好, 不同Usb to Serial Chip 會有不同Driver , 與哪家MB無關, 就我所知UEFI Shell 目前除Onboard ISA Com Port及 FTDI FT232 USBtoSerial 外,其他還無Driver,可能要自己Porting, 畢竟這是小眾市場.......
刪除馬克你好 我從你網站上下載下來FTDI的Driver有load成功了,然後用Drivers和Devices有確定抓到這條cable,但是用Sermode卻是會出現No Serial Parts Present,請問還需要再做甚麼設定嗎?
回覆刪除插拔試試看,我感覺這driver還有些許問題需解決…
刪除若不行,換個USB 2.0 Port 插插,因為各家MB/BIOS RD程度不同,UEFI USB support不盡相同......
回覆刪除有關像我的板子,5個port,有2個port能用,可能是跟接Usb3.0 or Usb2.0 controller有關吧!?
刪除馬克你好 可以請你提供 Drvier的 source code 嗎? 讓我回去自行研究一下 謝謝
回覆刪除這是open source的, 請看: https://github.com/tianocore/edk2/tree/master/OptionRomPkg/Bus/Usb/FtdiUsbSerialDxe
刪除馬克謝謝你 想問一下IsaIoDxe.efi 跟 IsaSerialDxe.efi 這兩個區動程式是不是得在 FT232 驅動程式之前先載入? 如果是的話可以請你提供這兩個檔案嗎?
刪除IsaSerialDxe.efi ,IsaIoDxe.efi 已上載.....
刪除這2個檔案,僅是給傳統Onboard ISA COM Port用的,我還沒測過實際傳輸功能...
馬克謝謝 我現在已經可以Load FTDI的Driver了,也可以使用sermode找到裝置,可是後續要怎麼確認這個comport可以正常傳輸呢?
刪除我是將RX及TX對接,另外寫了個非常簡單的測試程式,若要測試程式及代碼,可留email address,之後若要作應用,可能要開始學習寫UEFI Application了....
刪除馬克你好,這是我的信箱:qwer5527271@gmail.com,感謝你大力幫助我,讓我解決很多的問題
刪除已寄
刪除馬克謝謝 已經收到
刪除馬克您好,可否跟您索取程式及代碼 chiashenyeh@gmail.com 謝謝!!
刪除已寄
刪除作者已經移除這則留言。
回覆刪除作者已經移除這則留言。
回覆刪除馬克您好,
回覆刪除可否跟您索取EFI的RS232測試程式..謝謝您..
qzhk0403@gmail.com
請查收
刪除馬克您好,
回覆刪除可否跟您索取EFI的RS232測試程式..謝謝您..
tasaim19@gmail.com
馬克您好,可否跟您索取程式及代碼 tasaim19@gmail.com 謝謝!!
刪除想研究研究
作者已經移除這則留言。
回覆刪除馬克您好,
回覆刪除是否可以跟您索取RS232測試程式和source code?
virtualce@gmail.com
馬克您好,
回覆刪除是否可以跟您索取RS232測試程式和source code?
謝謝~
cakey0916@gmail.com
Hi Mark, 是否還能提供測試程式及代碼? 謝謝!
回覆刪除kenny616@gmail.com
Hi Mark, 是否還能提供測試程式及代碼? 謝謝!
回覆刪除thundermitch@gmail.com
Please enable download from Google Drive
回覆刪除Hi Mark, 是否還能提供測試程式及代碼? 謝謝! gordontcp@gmail.com
回覆刪除Hi Mark, 是否還能提供測試程式及代碼? 謝謝! chen.a905420@gmail.com
回覆刪除