發表文章

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

燒錄Micropython 1.12至nRF52840 Dongle

圖片
前面貼文 曾提到如何把Micropython燒錄到nRF52840-DK, 現在談談如何燒錄到nRF52840 Dongle。畢竟Dongle體積小巧,便宜。要整合到自己的專案,可行性較高。 首先nRF52840 Dongle (pca10059)是沒有除錯器的,所以我們要準備外部的除錯器,最常見的除錯器就是JLink。如果你手上有nRF52840-DK的開發板,這個板子上就有JLink OB除錯器。可以參考 Eric Pietrowicz的貼文 ,雖然他在談的是把CircuitPython燒錄到nRF52840 Dongle的方法,但其實作法本質是一樣的。 另外nRF52840 Dongle也被Google的一個 開源專案OpenSK 使用,同樣也要燒錄其firmware到板子上去。所以作法類似,但他們使用一種叫做TC2050的特別線,這條線不便宜,好處是可以不用焊接。但我想反正pca10059不貴,而且之後也會接一些元件來玩,總之是會焊東西上去的,也就不在意現在焊幾個jumper。 因為我一開始把一塊pca10059弄壞了,所以先警告大家要小心! 不過,後來我又把這塊板子救回來了,過程大概是這樣的,我先依照Eric Pietrowicz的接線方法,把nRF52840-DK當做除錯器來使用,主要是使用P20的接頭來接線到pca10059的(VBUS, GND, SWDIO, SWDCLK)。然後下: nrfjprog --family nrf52 --eraseall nrfjprog --program build-pca10059-s140/firmware.hex --sectoranduicrerase -f nrf52 --reset 看起來沒有錯誤訊息,就試著把pca10059接到USB埠去,結果使用終端機去連都沒有反應。 之後我懷疑前面的燒錄並沒有成功,是不是燒到nRF52840-DK自己的晶片去了?就使用nRF Connect的programmer檢查,果然pca10059原本的bootloader還在,nRF Connect的programmer還可以連得上,也可以燒錄firmware上去。這可能要怪我當時並沒有把接腳焊好,而只是用線繞繞,甚至用膠帶貼著,或者用手壓住而己有關。總之,之後下nrfjprog --famil

LEGO 76112 Batman Part II - 自製蝙蝠車搖桿2

在 之前的文章 提到積木蝙蝠俠座車是用手機的BLE藍牙連線來控制的。如果想要改成用joystick摇桿來操作的話,也是可以做的哦! 第1步:   這個我們之前已經完成了,就是先了解手機是如何透過BLE來下指令給蝙蝠車。詳見之前文章,簡單回顧一下,目前我找出了3個指令: 指令1:控制LED燈的顏色,但因為組起來後被積木有點擋住,所以變不同的顏色其實看不出太好的效果。 0800813211510000  不亮 0800813211510001 各種顏色 到 0800813211510009 指令2:控制左邊輪子的轉速 08 00 81 01 11 51 00 DA 指令3:控制右邊輪子的轉速 08 00 81 00 11 51 00 DA 第2步:   準備一個BLE藍牙晶片,我想使用Nordic nRF52840 Dongle,因為只要$10美金,而且板子很小就一個随身碟的大小。要在這個平台上寫BLE藍牙有許多選擇,目前看來還是使用Micropython之類的比較簡單。我 前一篇文章 有提到如何把Micropython環境燒錄到板子上。只是目前先用nRF52840-DK, 還沒有去試燒錄到nRF52840 Dongle!一旦環境準備好,就可以開始寫程式了。 動手寫程式之前,先來看一個 example code , 這支是由Micropython之父Damien George寫的哦! 接著我會用到這支範例程式的39 - 70行。打開你的终端機軟體,連上板子後,複製貼上剛剛說的39 - 70行,然後: >>> dev = find_device_by_name("Smart Hub") >>> dev ScanEntry >>> p = Peripheral() >>> p.connect(dev.addr()) >>> p.getServices() [Service(handle: 0x01), Service(handle: 0x05), Service(handle: 0x0c)] >>> s = p.getServices() >>> s [Service

在Nordic nRF52晶片上跑Micropython

圖片
雖然在Micropython官方網站上主要的支持晶片中沒有看到Nordic nRF52, 但其實已經有支持了。只是目前還在開發早期階段中。可以先嘗鮮一下,但要有心理準備,有很多東西還不完備。 Tony D!的影片是一個不錯的開始! 另外官方網站關於nRF平台的說明,其實就放在 GitHub 。這裡放了程式碼以及簡單的安裝說明。 我使用nRF52840 DK開發板來嘗試: 這個板子大了一點,用在開發階段還不錯,如果真的要拿來用,可以改用nRF52840 Dongle,不但體積小巧,售價也便宜!只是燒錄firmware時較麻煩,下次有空時再來談。或者看看 這篇文章 。 同樣地,這個平台Micropython官方沒有編好的firmware, 必須自己編! 1. 先找個環境來做編譯的工作,可以是Linux, Mac OSX, 或是Raspberry pi; 之前我使用過Raspberry pi來編ST NUCLEO-F401RE開發板。這一次改用Mac來試試。依 GitHub 說明,要使用git clone指令把Micropython的source code都複製下來,但嘗試了幾次都沒有成功編譯,都會出現錯誤訊息,主要是編譯tinyusb時會有程式碼找不到!想來是開發中的版本還不太完整吧!於是就在官方網站(http://micropython.org/download/)如下圖箭頭所指處,下載1.12的原始程式: 解壓縮(放到micropython-1.12目錄去)後再編,果然就正常編成功了! 編譯方法: % cd micropython-1.12 % make -C mpy-cross % cd ports/nrf % make BOARD=pca10056 註:這裡可能碰到一些問題,看一下錯誤訊息在說什麼,再去解就可以了。例如,可能會說沒有gcc-arm-none-eabi; 那就去安裝這個工具,我在之前的 貼文 有提到這個工具。這個工具裡有很多執行檔,例如ld, ar, cc1等等,因為Mac會阻擋未簽證的程式執行,所以要在系統偏好設定的安全性與隱私權畫面裡設定它們可以執行。 2. 準備soft device 編成功的話,會出現一個 build-pca10056 的目錄,這個目錄裡可以找到 firmwa

在Windows平台下使用armgcc的方法(配合nRFSDK5)

圖片
首先要安裝armgcc這套工具, 可以到 GNU-RM Downloads 頁面下載。 接著, 因為要使用Makefile, 所以在Windows平台要安裝 Gnu make for windows 若要配合nRF SDK使用, 必須讓nRF SDK知道armgcc工具安裝在那裡, 所以要在nRF5_SDK安裝目錄下的\components\toolchain\gcc目錄下找到Makefile.windows檔案, 打開它: GNU_INSTALL_ROOT := C:/Program Files (x86)/GNU Tools ARM Embedded/8 2019-q3-update/bin/ GNU_VERSION := 8.3.1 GNU_PREFIX := arm-none-eabi 將工具安裝的位置修改成正確的後, 就可以在nRF5_SDK_15.3.0_59ac345\examples\peripheral\blinky_systick\pca10059\blank\armgcc的目錄下, 於命令提示字元下, 直接下make指令來進行編譯了。 現在Windows平台上也有Linux的環境, WSL bash, 或者MinGW等, 使用這些環境, 也是可以的, 先安裝armgcc工具和make工具: $ sudo apt-get install gcc-arm-none-eabi $ sudo apt-get install make 這個方式安裝的版本比較舊, 但看來還是可以用! 用這個方式的話, 也要告訴nRF SDK我們把armgcc工具安裝在那裡, 同樣在nRF5_SDK安裝目錄下的\components\toolchain\gcc目錄下找到Makefile.posix檔案, 打開它: GNU_INSTALL_ROOT ?= /usr/bin/ GNU_VERSION ?= 6.3.1 GNU_PREFIX ?= arm-none-eabi 同樣要修改安裝的位置和版本, 然後同樣直接下make指令就可以了。 $ make Assembling file: gcc_startup_nrf52840.S Compiling file: nrf_log_frontend.c Compiling file

nRF52840 DK "JLINK" mass storage drive not appear

圖片
從mouser買的Nordic nRF52840 DK這塊板子,下完單沒幾天就到貨了。很開心的開始試,沒想到,第一天就碰到問題了。 手冊 裡p.15有提到nRF52840 DK有一個MSD功能,就是插上USB埠後,電腦上就會出現一個名稱為"JLINK"的外接磁碟, 如上圖。之後,我們只要用拖拉的方式把編好的HEX檔拖進去這個磁碟,就可以把firmware燒進去了,真是方便。在手冊p.16接著提到:  You can also disable the MSD of the kit by using the msddisable command in J-Link Commander. To enable, use the msdenable command. These commands take effect after a power cycle of the development kit and stay this way until changed again. 意思就是在J-Link Commander裡下msddisable就可以把這個功能取消,若要回復則下msdenable指令。那個J-Link Commander可以在 nRF Command Line Tools 找到。安裝好後,下JLinkExe後,出現JLink>的提示符號,我下msddisable,然後斷電重開。果然就不再出現"JLINK"這個外接磁碟了。 但是用同樣方式下msdenable指令,卻沒辦法恢復MSD功能!!!!! 找了一下是否有人碰到一樣的問題,有一個 帖子 說沒解!不明白為何如此? 另一個 帖子 說是USB線的問題。 看來是沒解了,就試試換掉interface MCU firmware, 因為 其他的問題 似乎用這個方法是有解的。更換的方法很簡單,只要先去下載最新的 interface MCU firmware (J-Link OB-SAM3U128-V2-NordicSemi 170724),然後按下IF BOOT/RESET鍵不放,再把電源關掉重開,就會在電腦上出現"BOOTLOADER"這個外接磁碟,把下載下來的firmware拖拉到這個磁