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)

2 則留言:

  1. 大大~
    很棒的分享, 最近需要驗證, 但Test code link 失效的, 方便重新設定嗎, 謝謝

    回覆刪除
    回覆
    1. Hello Eric:

      連結已修復, 感謝告知, 原來我放錯檔案了....xD

      刪除