2015年11月9日 星期一

How to get code version from binary file on IAR EWARM?

1. 當在與客戶開發專案的時候, 雙方的hex或是bin檔案可能都會來來回回寄個幾十個版本,
    而大部分皆是直接在檔名上修改個版號(ex: 001.bin....), 或是在程式中修改版號, 當程式跑
    起來後, 透過類似I2C/UART/SPI....等的溝通得到目前的版號.

2. 而往往出錯的皆是類似像上述的方式, 可能忘了改檔名或是為了快點修改Bug,而忘了修改
    程式中的版號, 導致許多問題產生, 因此如果有可以直接從build出來的binary來得到版號的
    話,應該可以減少一些無謂的時間浪費.

3. 現在要介紹的是利用vector_table中的reserved area來放版本號的方式:


  • 開啟IAR Project後, 先在程式中新增一個CodeVersion.h檔案.

  • 先輸入一個預設的版號, ex: 0x12345678. 
  • 開啟startup_stm32f401xx.s檔案, 並include CodeVersion.h, 且在reserved area中放入我們預設的版號.
  • 若是直接build code的話, 一定會有error, 因為我們在組語的部份加入CodeVersion.h的路徑給程式知道.
  • 輸出檔案的部份, 可以先使用binary來輸出.

  • 當程式編譯過後, 可以在輸出的目錄下找到Template.bin
4. 我們可以使用可以開啟binary檔案的編譯器來觀察, 例如使用Ultraedit來開啟Template.bin, 開
    啟後可以看到我們之前設定的版號0x12345678, 且位置均固定, 因此再也不需要等待程式跑
    起來後才能去得知版本號了.


5. Test Platform: STM32F401 Discovery Board.

6. 完整測試檔案連結如下:













2015年11月6日 星期五

How to run ble_app_uart project with IAR Debugging Mode?

1.     最近發現有時候在使用IAR EWARM Debug Mode進行Nordic Ble相關開發的時候, 會有程
    式跑不起來或是跑飛的情況發生, 但如果將build出來的檔案透過mergehex or nRFgo studio直
    接燒錄進去又可以正常執行.最後查了一下原來主要是需要在IAR的Option下需要新增一項
    Extra Option才會正常.

2.    This can be worked around by adding this line under "Options > Debugger > Extra Options > Command line options": --drv_vector_table_base=0x0


3. Linker configuration:



2015年10月23日 星期五

nRF52832 BLE_App_Uart example code(IAR EWARM Version)

1. 本範例主要是參考Nordic原廠Keil MDK範例中的ble_app_uart project, 將其修改為IAR  
    EWARM的版本, 但在內容上有稍微修改一下, 之後在main.c流程介紹時, 再行說明.

2. 完整範例下載連結:
    ble_app_uart_iar_version

3. 需先下載及安裝相關Tool等前置作業, 本範例才能正常執行:

  • 下載 S132 nRF52 SoftDevice, 主要原因是需要裡面的ble library hex, 否則程式無法正常執行.

  • 下載完畢解壓縮後, 可以看到s132_nrf52_1.0.0-3.alpha_softdevice.hex在資料匣底下.

  • 安裝nRF5x-Tools-Win32, 主要原因是需要裡面的mergehex.exe執行檔, 需要此檔案才能將ble library hex與我們自行產生出的hex打包在一起.


  • 安裝完畢後, 可以在安裝目錄底下找到mergehex.exe.

  • 在下載及安裝完畢後, 需要將s132_nrf52_1.0.0-3.alpha_softdevice.hex 和 mergehex.exe這兩個檔案複製到Projects/Template/EWARM/Debug/Exe底下去, 方便直接將我們自行build出來的hex一起打包.


4. main.c 流程簡介:

  • 跟原先Keil MDK版本的範例相比, 有以下幾點差異:
    • uart baud rate 提升到1000000.
    • 取消uart flow control.(RTS/CTS).

    • 原先範例是PC先透過uart傳送字元給nRF52832, 然後nRF52832再將收到的字元透過BLE傳送出去, 現在改為nRF52832固定每100msec透過BLE送出特定字串出去.


  • 當程式編譯完成後, 在Projects/Template/EWARM/Debug/Exe底下會產生出nRF52832_Template.hex, 代表程式編譯正常, 那接下來就是進行merge hex的動作了.

5. merge hex流程簡介:

  • 當我們完成上述步驟後, 在Projects/Template/EWARM/Debug/Exe底下應該會有如下圖的檔案, 若都有的話, 便可進行merge hex的步驟.
  • 開啟命令提示字元, 且切換到Projects/Template/EWARM/Debug/Exe路徑底下.



  •  輸入: mergehex.exe -h , 便可以得知mergehex.exe的使用方法.



  • 由於我們是要將ble library hex 以及IAR Project產生的hex merge 在一起, 因此我們輸入以下的語法: (bt_uart.hex代表的是merge完成後的檔案)
    mergehex.exe -m s132_nrf52_1.0.0-3.alpha_softdevice.hex nRF52832_Template.hex -o bt_uart.hex

  • merge成功時, 會出現以下訊息, 且Projects/Template/EWARM/Debug/Exe目錄底下會出現bt_uart.hex.





  • 至此merge流程已全部結束, 接下來將把bt_uart.hex燒錄至nRF52832內並進行BLE測試.

6. 燒錄流程:

  • 將nRF52832使用USB Cable與PC連線, 此時會出現JLINK Disk.


  • 開啟資料夾.
  • 將merge完成的bt_uart.hex檔案複製到JLINK Disk, 複製完成後, nRF52832會自動進行燒錄並重啟.


  • 此時應該會看到LED1以間隔1秒左右的速度在閃爍, 表示BLE程式正在等待連線, 代表燒錄流程執行成功.

7. 測試流程:

  • 在手機上安裝nRF UART v2.0(android) or nRF UART(iOS).

  • 接下來使用nRF UART v2.0當作範例測試, 開啟app後, 選擇Connect.


  • 此時選擇Nordic_UART.



  • 連線成功後, 便可以看到main.c中我們所定義的格式輸出, 且LED1停止閃爍.
    sprintf(PrintBuffer, "Hello,Nordic,%d\r\n", counter++);


  • 若再按下Disconnect, 則停止傳送資料, LED1開始恢復閃爍.

8. 完整測試影片如下:













2015年10月22日 星期四

PHILIPS 19DP6QJNS 極簡開箱


1. 工作上長久以來都是用NB+外接螢幕來進行Coding, 但由於年紀的增長, 面對筆電的螢幕, 眼
    睛越來越不能夠長時間的注視.

2. 在PChome上剛好看到特價, 從15888 下殺到 9988, 因此就決定下標了.

3. 盒子超大一箱的, 都超過我的桌子了.


4. 架設好之後, 真的蠻方便的, 可以一邊寫程式, 一邊用Google查資料, 不用像以前一樣, 頭一直
    左右來回地看螢幕.



5. 可以一邊發廢文, 一邊查Datasheet了......XD


---------------------------------------------------------------------------------------------------------------------
2016-03-08補照片(可以點圖看原始檔案)

1. 兩邊螢幕皆設定亮度為100.



2. 單邊螢幕來一張(亮度為100)


3. 兩邊螢幕亮度比較(左邊亮度為100, 右邊亮度為0)



4. 非常多人在問的一個問題, 是否可以把兩個螢幕合併為一個, 若你的電腦顯卡支援拼貼的話, 就
   可以合併為一個螢幕.


5. 以下是合併螢幕的一些應用照片.

 win10開機畫面


看股票.....XD


寫Code


看YouTube影片測試



nRF52832 + 9axis Fusion


1. 使用Processing這套軟體寫的測試Tool.

2. Processing相關連結:
    https://processing.org/



2015年10月19日 星期一

How To Enable CMSIS-DSP On STM32F4

1. 在IAR官網上有看到介紹CMSIS-DSP的內容, 本文主要是根據其內容進行測試的sample code.
     硬體上是使用STM32F401 Discovery Board + Logic Analyzer


2. IAR官網的CMSIS-DSP連結如下:
    IAR CMSIS-DSP Link

3. CMSIS-DSP Library Enable Flow:

  • Copy CMSIS folder into your project.
  • Set the CMSIS-DSP Library option in the General Option->Library Configuration page.
  • Define the appropriate Preprocessor MACRO depending on the target processor in the application.
    • ARM_MATH_CM4
    • ARM_MATH_MATRIX_CHECK
    • ARM_MATH_ROUNDING
    • __FPU_PRESENT
    • __FPU_USED


    4.main.c程式流程及量測方法:

    • 在需要使用到CMSIS-DSP Library的程式裡面需要include <arm_math.h>
    • 從範例程式中可以看到主要是比較有無使用CMSIS-DSP Lib在做square function的時間差異
    • 本範例是利用GPIOD13搭配Logic Analyzer來量測兩者的時間差異


    • 從Logic Analyzer的波形上可以看到:
      • 使用CMSIS-DSP Library的sqrt function的執行時間為0.5usec.
      • 不使用CMSIS-DSP Library, 使用內建math.h的執行時間為8usec(A1-A2).
      • 兩者之間的時間差異倍數: 8usec/0.5usec = 16.

    5. 完整測試範例下載連結如下:
        STM32F401-DiscoveryBoard-CMSIS-DSP-Example








    2015年10月14日 星期三

    nRF52832 + FreeRTOS v8.2.2 + LED Toggle example (Keil MDK Version)

    1. 總共創建4個Task.

    2. 每個Task分別去Toggle不同的LED.

    3. 測試用的Keil MDK版本為v5.16a.

    4. 程式的開啟位置為\Nrf52832_KeilMDK_FreeRTOS_v8.2.2_LED_Toggle\examples\peripheral\blinky\pca10036\blank\arm5_no_packs\blinky_blank_pca10036.uvprojx

    5. 測試影片如下:
        
    6. 完整範例下載連結:
       
    Nrf52832_KeilMDK_FreeRTOS_v8.2.2_LED_Toggle

    nRF52832 + FreeRTOS v8.2.2 + LED Toggle example (IAR EWARM Version)

    1. 總共創建4個Task.
    2. 每個Task分別去Toggle不同的LED.
    3. 測試影片如下:
       
    4. 完整範例下載連結:
        nRF52832_FreeRTOSv8.2.2_LED_Toggle

    如何在STM32F407 Discovery Kit上移植FreeRTOS

    1. 移植步驟可以參考 如何在STM32F429 Discovery Kit上移植FreeRTOS.
    2. 總共創建4個Task, 並分別Toggle 4個LED.
    3. 測試影片如下:
     
    4. 完整範例下載連結:
        STM32F407-Discovery-RTOS_v8.0.1

    2015年10月13日 星期二

    nRF52832 LED blinky example (IAR EWARM Version)

    1. 根據Nordic提供的Keil MDK版本的example code (nRF52_SDK_0.9.1_3639cc9) 當作基礎, 創       建一個新的IAR Project移植LED blinky example.

    2. 在使用IAR之前, 需先安裝Nordic原廠提供的nRF5x-MDK-IAR Patch, 否則IAR無法認到    
         nRF52832這顆MCU.
     
         Patch請至底下連結下載:
         nRF5x-MDK-IAR-Patch
         

     

    3. 完整範例請使用底下連結下載:
        nRF52832_IAR_LED_Toggle





    傳說中的 nRF52832 Preview DK


        最近收到了一塊nRF52832的開發板, 由於Nordic原廠目前只有提供Keil MDK的範例,
    因此接下來會試試看把一些範例轉換成IAR EWARM的版本來進行測試.