2011年2月28日 星期一

LPC1100 Senondary Bootloader via I2C






LPC1100 Senondary Bootloader via UART Xmodem
上回測試這個AN,是因為工作上關係,需要寫一段透過I2C更新LPC1114上的Flash內的code.所以就先測試這份AN.
研究一下發現有幾個訣竅,掌握住應該不難完成.
1. Interface的處理,我會啟動Hardware I2C salve,採用interrupt處理(也可以用polling方式).
  • 所以我會利用一套LPC1343 ( Host and I2C Master ) + LPC1114 ( Client and I2C Slave).
2. Protocol, Host 端與 Clinet端的協定,包含hand shaking , check sum 等.
  • 這個要設計一下state machine 與 command .
3. Application bin如何弄進Host端之中.
  • LPC1343中建table,將Application compile 得到bin file之後,轉成c source code.
4. Application 與 Boot Loader 的 Interrupt Vectort處理,這點AN說明中有提到.



更新2013/1/10 NXP也有AN介紹  an11258-i2c-secondary-boot-loader

8 則留言:

  1. 版大您好,
    請問您有LPC1114的i2c的sample code嗎?我有個疑問關於i2c寫EEPROM,因為只呼叫i2cEngine();就可以直接寫資料,似乎怪怪的

    回覆刪除
  2. Lin 您也好,(我也是Lin)
    在呼叫 I2CEngine(); 之前需要先準備一些資料.從example code中的i2c project可看到. 如果是要master write,至少還要先 寫入資料到 I2CMasterBuffer[]中
    舉例eeprom 若 address為 0xa0
    寫入位址為 0x0020 ,將寫入資料為0x79,0x97.則以下你要這樣做:
    1.
    I2CMasterBuffer[0] = 0xa0;
    I2CMasterBuffer[1] = 0x00;
    I2CMasterBuffer[2] = 0x20;
    I2CMasterBuffer[3] = 0x79;
    I2CMasterBuffer[4] = 0x97;

    2.
    I2CWriteLength = 5; //上填入 I2CMasterBuffer的bytes數量.

    I2CReadLength = 0;

    3.接著就可以呼叫 I2CEngine();

    真的做事的那段function會是在 i2c.c 中的 I2C_IRQHandler .由硬體家中斷處理.
    ~MCU diy~

    回覆刪除
  3. Okay,感謝板大,我去try try看

    回覆刪除
  4. Lin ,
    用力踹踹看吧..
    若有問題再來討論

    ~MCU diy~

    回覆刪除
  5. Lin 大,
    請問您的I2C Bootloader code size 多大呢?
    會超過4kB 嗎?

    謝謝您.

    回覆刪除
  6. 謝謝Lin大大的回覆.
    後來發現是使用到不同的redlib 讓code size 變大.

    需再請問您.
    有沒有用過 second bootloader 載入內含 rtos 的 code 過.
    我用 second bootloader 載入 timer 的 blinky code 可以跑的起來. 但載入 rtos 的 blinky code 卻跑不起來..

    感謝. ^_^
    Kevin 敬上

    回覆刪除
    回覆
    1. Hi Kevin,
      我猜rtos blindly project內的設定可以參考能成功的那project看看flash的設定。

      刪除

Related Posts Plugin for WordPress, Blogger...