發表文章

目前顯示的是 5月, 2020的文章

GNU Arm Embedded Toolchain can not execute on Mac Catalina

圖片
How to install GNU Arm Embedded Toolchain on Mac Catalina? One way is go to the web site  to download this tool, and follow the install instruction written in readme.txt. For the Mac, readme.txt is in the share/doc/gcc-arm-none-eabi folder. But Mac Catalina would stop GNU Arm Embedded Toolchain to execute. Sure, you can manually permit this tool (e.g. arm-none-eabi-gcc) to execute by open the System Preferences and then open the Security & Privacy pane to allow it to run. Just like this paper described. But you must do this every time. This is too annoying. The second way would be better. Using Homebrew to install GNU Arm Embedded Toolchain for us. See this page to do it. And no more can not execute problems. After install this Toolchain by using Homwbrew. We need to know where these tools are installed. % which arm-none-eabi-gcc /usr/local/bin/arm-none-eabi-gcc % sudo find / -name arm-none-eabi-gcc Password: /usr/local/bin/arm-none-eabi-gcc /usr/local/var/homebrew

LEGO 76112 Batman Part III - 自製蝙蝠車搖桿3

圖片
  終於要把這個系列的貼文做個結束了, 因為工作忙, 加上有一些技術問題要解決, 所以從今年初抽空慢慢做, 到最近才完工。簡單的說, LEGO 76112 Batmobile這台車是由手機透過BLE來控制的, 但是媽媽不給小孩碰手機! 我只好想辦法自己做一個搖桿來搖控這台車。   這系列貼文的前兩篇: 1.  自製蝙蝠車搖桿1 2.  自製蝙蝠車搖桿2   經過考慮, 決定只用一個BLE晶片來做和batmobile溝通的工作, 這是最直接省錢的。當然另外還要有一個搖桿, 本來想用兩個搖桿的, 因為這台車是有兩個馬逹, 官方手機APP的操作界面也是設計兩個按鈕來控制這兩個馬逹。但後來, 硬體的工作弄得有點累, 就先偷懶一下了。 圖1. 正面   圖1, 可見一個BLE晶片的板子, 左上角有Nordic字樣的藍色板子, 這是nRF52840 Dongle。右邊則是搖桿, 基本上和PS2搖桿或XBOX搖桿上所採用的搖桿零件是一模一樣的。不信, 自己拆解看看, 也可以看iFix it的網站資料, 真的是一樣的零件哦! 這個搖桿在電子賣埸都找得到, 有不同價位, 便宜的台幣25元, 貴的100+, 200+, 我用起來, 發覺都一樣! 建議可以買最便宜的就好! 至於最大塊的綠色洞洞板, 只是用來當骨架, 方便固定零件。因為可能日後還要把零件拿下來, 所以都只是用電線假固定。 圖2. 側面 圖2, 側面可以看到nRF52840 Dongle, 焊接了3個藍色的排針和3個黃色的排針, 從上面往下: P0.02 P0.29 P0.31 GND VDD OUT VBUS 用到了P0.02, P0.29, GND, VDD OUT; 另2支針腳沒有使用! nRF52840 Dongle板子後面的SB2要切斷 (open), SB1要焊起來 (close)。P0.02, P0.29用來連接搖桿的類比輸出。GND接地, VDD OUT則接電池正極3V。 圖3. 背面   圖3, 將CR電池座用雙面膠固定; 這樣的組裝, 我試了, 剛好適合右手單手握持。接線, 沒有幾條, 電池, 搖桿, nRF52840 Dongle的電源接在一起(VCC接VCC, GND接GND); 然後就只有搖桿的兩軸類比輸出接到nRF52840 Don

Nordic nRF52 BLE firmware programming tutorial

圖片
開始使用Nordic nRF52系列晶片,弄清楚如何開發這個平台的firmware,也有數周了。當然Nordic官網有提供許多的文件,包括開發板的手冊,nRFSDK的文件,softDevice的文件,晶片SoC的規格書,還有開發者論檀。其實文件數量多的驚人! 但到現在我個人覺得最適合給入門者看的文件是: 1.  ble-advertising-a-beginners-tutorial 2.  ble-services-a-beginners-tutorial 3.  ble-characteristics-a-beginners-tutorial 這3篇文章在2015,2016年間寫的,後來也有幾度小修改,目前大概維持在nRFSDK 15.0.0,可現在2020/5, Nordic nRFSDK已經出到16.0.0了。 個人看文件的習㥜是從前往後看,結果在下載範例程式後,一編譯就出現許多錯誤訊息,試著去解,發現根本解不完。後來想想,文章裡說範例程式是由examples/ble_peripherial/ble_app_template修改簡化而來,那麼同樣由nRFSDK 16.0.0裡的這個ble_app_template範例程式複製一個出來再改成其他名字,當然也是可以正常編譯的。然後試著把文章的範例裡的main.c複製過去取代原本的main.c,結果可以正常編譯了!這樣就可以往下繼續閱讀和試著依文件改程式看BLE的行為如何變化了。結果一路順利看到文章結束。沒想到文章後的留言也很有看頭! 有人抱怨範例程式不能編譯,但也有人說可以解,而解法就和我想的一樣!所以其實文章真的不要只從前往後看,這種貼文,因為常有更新,也許先看看後文或者前後都翻閱一下,才不會浪費了許多時間。 除了這個版本問題外,這幾篇真得寫得不錯,是很好的入門文件。 以下筆記幾個重點: --------------------------------------------------- 第1篇 廣播 (1) 範例程式如前文所述,由最新SDK的ble_app_template專案複製,再蓋上範例程式的main.c就可以。 (2) 設備名稱由 #define DEVICE_NAME 定義 (3) BT ADDRESS可以在gap_params_init()中寫程式改

nRF5SDK CMSIS Configuration wizard

圖片
所有nRF5 SDK裡的範例專案都有一個sdk_config.h, 用來設定許多子功能的開啓和參數的選擇,它使用了一個特定的設定格式,可以由CMSIS Configuration wizard工具來開始和編輯。當然它基本上也只是C的#define指示詞的用法,但有個GUI工具可以用,總是方便的多。 ------------------------------------------------------------------ 對於使用armgcc工具鏈的朋友來說只要下make sdk_config指序即可: 例如: nRF5_SDK_16/examples/ble_peripheral/ble_app_blinky/pca10056/s140/armgcc$ make sdk_config 就會出現這個CMSIS Configuration wizard工具了。展開點選到想要的項目就可以勾選啓用或選取想設定的參數值。 如果出現Failed to load module "canberra-gtk-module"的錯誤訊息,可以下以下指序補安裝套件: sudo apt install libcanberra-gtk-module libcanberra-gtk3-module ------------------------------------------------------------------ 對於SES工具的朋友來說,也可以使用這個工具: 官方文件file:///nRF5_SDK_16.0.0_offline_doc/nrf5/sdk_config.html有說明: 如圖,只要加入一些說明到tools.xml檔去 接著在SES就可以在sdk_config.h按右鍵,選CMSIS Configuration wizard  Ctrl+Y同樣就可以出現這個工具了。

nRF52 TMP102 讀取温度值

圖片
TMP102是一個温度感測器,可以用I2C或TWI界面來和MCU溝通。 而Nordic的藍牙晶片到了nRFSDK 15之後,已經提供很多的範例程式,I2C或TWI存取的寫法也有提供。最基本的scan 是否有設備存在的程式範例就是 /examples/peripheral/twi_scanner。本文以這支範例程式來試驗讀取TMP102温度值的程式寫法。 ---------------------------------------------------------------------------- 硬體接線   依以下方式,只要接4條線。左為nRF52840 DK腳位,右為TMP102腳位。 P0.27  -> SCL P0.26 -> SDA GND -> GND VDD nRF -> 1.4 - 3.6V 如下圖,這四個腳位都在右上角P4, P20 ---------------------------------------------------------------------------- 程式寫法   打開twi_scanner這支程式,在main()之前加入以下程式: #define TMP_ADDRESS (0x48) /**  * @brief read TMP102 temperature  */  void read_tmp102(void)  {     uint8_t tmp_data[2];     uint8_t tmp_data_le[2];     uint16_t *tmp = (uint16_t *) &tmp_data_le[0];     nrf_drv_twi_rx(&m_twi, TMP_ADDRESS, tmp_data, 2);     tmp_data_le[0] = tmp_data[1];     tmp_data_le[1] = tmp_data[0];     float tmp102 = (*tmp >> 4) * 0.0625;     NRF_LOG_INFO("DATA: 0x%x, 0x%x", tmp_data[0], tmp_data[

Nordic nRF52 OTA (BLE DFU)

透過藍牙傳輸做韌體更新的方法,我自己習慣用OTA(over the air)來稱呼。但其實不同的廠家有不同的名稱,有人叫SUOTA(software update over the air),Nordic則稱做DFU(device firmware update)。又有兩種管道可以使用:USB, BLE。透過藍牙傳輸做韌體更新的就是BLE DFU。 怎麼做到,有原廠文件說明,參考以下連結: getting-started-with-nordics-secure-dfu-bootloader 其主要運作方式依靠secure bootloader提供服務,讓nRF Connect, nRF Toolbox等master code可以由藍牙將新韌體傳送給裝置做更新。而Nordic的nRFSDK裡的範例程式就有提供secure bootloader原始檔給大家使用,當然也不能讓任意人傳任意的韌體就可以更新你的裝置!所以secure bootloader在收到master code送來的dfu package時會先檢查其中的數位簽章,符合才會往下做。理論上這是不可能破解的!因為這個架構,所以secure bootloader存有public key,而在産生dfu package時就要使用private key來製作簽章。 那産生public key / private key的工具,nordic也幫大家準備好了,就是nrfutil,安裝方法: Mac OSX: pip3 install nrfutil --upgrade Linux: pip install nrfutil --upgrade 最好檢查一下版本不要太舊: (我裝的是6.1.0) nrfutil version 産生private key的指令: nrfutil.exe keys generate private.key 産生public key的指令: nrfutil keys display --key pk --format code private.key --out_file public_key.c -----------------------------------------------------------------------------