顯示具有 bootloader 標籤的文章。 顯示所有文章
顯示具有 bootloader 標籤的文章。 顯示所有文章

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)

2015年12月23日 星期三

STM32 Usart Bootloader Test Code(MCU to MCU)

1. 目前大部份的MCU升級韌體的方式大都是透過Linux平台寫入Bin檔, 所以可能比較少人會特
    地去接觸這一塊, 因此本範例使用MCU去升級MCU程式的方式來示範STM32 Usart
    Bootloader該如何使用.

2. 基本上每一顆STM32 MCU的升級方式都有些不同, 因此必須要先透過Datasheet來了解有哪
    幾種升級的方式, 由於本範例是建立在透過STM32F401 Discovery Board去升級其它的STM32
    MCU, 因此我們可以先假設使用STM32F401去升級STM32F401, 從F401 Datasheet上看起來,
    Usart Bootloader只支援Usart1(PA9/PA10), Usart2(PD5/PD6).


3. Hardware Define:

  • Test Platform: stm32f401 discovery board
  • Usart Tx: PA2
  • Usart Rx: PA3
  • Boot0: PA15
  • Reset: PB5    
4. Mode of connection:
  • PA2 ->  Device_Usart_Rx(ex: PA10)
  • PA3 ->  Device_Usart_Tx(ex: PA9)
  • PA15 -> Device_Boot0
  • PB5 -> Devices_Reset     
5. Code flow:
  • Init: Usart2(pa2/pa3) & PA15(boot0) & PB5(reset)  & USB(vcp)  Initialize.

  • Usart Init:  
    • baud rate: 115200.
    • data length: 9bit
    • stop bit: 1bit
    • parity: even         


  • Main Flow:  等待USB(vcp)接收Binary file, 若接收完畢, 則開始將Binary file透過Usart2分                        段送出給Device.

    6. Boot Mode Example(Get Version):
    • 接下來選擇一個Usart Boot Mode的get version範例講解, 從程式上看起來相當地簡單,送出2個bytes, 接著接收5個bytes.
    • 為何要這樣送2bytes又接收5bytes呢? 主要是依照st所提供的文件來做好做滿, 如下圖是Get Version 的流程圖, 可以看到Host送出0x01 + 0xfe後,  並等待device是否有送出ack, 如果有的話, 則連續接收5bytes, 而這5bytes的定義則都定義好了.

    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)