改為I2C.
2. 假想的被升級MCU為STM32F401, 因此我們一樣先去觀察stm32f401 datasheet, 從boot
mode章節可以看到支援I2C升級的有哪幾根GPIO.
3. Hardware Define:
- Test Platform: stm32f401 discovery board
- I2C SCL: PB6
- I2C SDA: PB9
- Boot0: PA15
- Reset: PB5
4. Mode of connection:
- PB6 -> Device_I2C_SCL(ex: PA8)
- PB9 -> Device_I2C_SDA(ex: PB4)
- PA15 -> Device_Boot0
- PB5 -> Devices_Reset
- GND -> GND
- Init: I2C1(pb6/pb9) & PA15(boot0) & PB5(reset) & USB(vcp) Initialize.
- Main Flow: 等待USB(vcp)接收Binary file, 若接收完畢, 則開始將Binary file透過I2C1分段送出給Device.
6. Boot Mode Example(Get Version):
- 接下來選擇一個I2C Boot Mode的get version範例講解, 從程式上看起來相當地簡單,送出2個bytes(0x01,0xfe)後, 接著確定是否有收到Ack.
- 若是有收到Ack後, 便在讀取1byte version info, 並於讀取後, 再次檢查是否有收到Ack.
- 為何要做這樣的流程呢? 主要是依照st所提供的文件來做好做滿, 如下圖是Get Version 的流程圖, 可以看到Host送出0x01 + 0xfe後, 並等待device是否有送出ack, 如果有的話, 則讀取1byte, 而這1byte便是bootloader version.
7. Test Flow:
- 需特別注意tera term在執行send file時候, 需記得勾選binary option.
8. Test Code Download Link:
9. Logic Analyzer Signal:
LA (Please use Saleae Logic 1.2.5 Beta to Open)