顯示具有 boot mode 標籤的文章。 顯示所有文章
顯示具有 boot mode 標籤的文章。 顯示所有文章

2015年12月24日 星期四

STM32 I2C Bootloader Test Code(MCU to MCU)

1. 與前一篇STM32 Usart Bootloader Test Code(MCU to MCU)相同, 只是將Usart的升級方式
    改為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     

 5. Code flow:
  • 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:
  • 將硬體按照上面所述的與Device接好後, 則可以搭配tera term來接收binary file.

  • 需特別注意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)