文章

顯示包含「NXP LPC」標籤的文章

[筆記] 恩智浦 NXP LPC55S69 開發板的開箱

圖片
        最近,我取得了一塊 NXP LPC55S69 開發板,我計劃使用它來開發 USD + SD 存取功能。這塊開發板被精心包裝在一個盒子中,盒子的封面印有這塊開發板的官方網路連結。根據技術文件的介紹,這套開發板大約於2020年推出,並且已經穩定到達一個版本。官方計劃將這塊微控制器單元(MCU)主要應用於工業物聯網(IoT)、自動化、診斷設備等多個領域。 圖一:LPC55S69 開發板的包裝盒         下圖二是開發板的正面原貌,板子中間是 MCU LPC55S69 ,晶片核心是ARM Cortex-M33 ,具有雙核心的封裝,內部最高時脈為 150MHz。基本上,晶片都包含了一般 MCU 該有的周邊,比較特別的部分有雙 USB 介面﹑雙 SD 介面﹑以及語音介面。在圖的右上方有語音的 codec 晶片,能將語音轉成數位化後接到 LPC55S69 處理。左邊有兩個 micro USB 接口,分別支援 Full speed 和 High speed 的規格,另外有兩個 micro USB 接口分別是供電和 debug 之用。 左下方的區塊是 Link2 on-board debugger,它支援除了 NXP 自家的 Link2 除錯器之外,也支援外接 J-Link 的除錯器。         接著,要開發這顆 MCU 的程式前,我們必須先準備好底下幾樣東西:第一個 MCUxpresso IDE ,開發環境套件專門開發恩智浦的晶片。第二個 MCUxpresso SDK ,到官方網站上下載該晶片的 SDK,才能載到 IDE 裡面。 圖二:LPC55S69 開發板正面圖         到恩智浦的官方網站  mcuxpresso.nxp.com  下載 SDK,先選擇晶片,再點選下圖三的右下方按鈕,產生相關的 SDK 連結。然後,進到下圖四的選單,依據我們的開發需求,選擇需要的程式碼與函數庫,網站會生成一個 SDK 壓縮檔,下載保存這個壓縮檔,之後會在 IDE 工具時用到。 圖三:產出 LPC55S69 SDK 圖四:SDK 程式碼與函數庫的選單     ...

[筆記] 以 RISC-V 架構的 MCU

圖片
        隨著開源的 RISC-V 架構開始熱絡起來,市場上逐漸出現以此架構設計的晶片,搭配類似 Eclipse 的開發環境 IDE,參考前文 https://han-ya.blogspot.com/2022/02/rt-thread-studio.html 。於是,購買了幾個 RISC-V 核心的開發板,正可對比 ARM Cortext-M 架構的 MCU。在晶片短缺之際,RISC-V 架構的晶片或許可做為另一項選擇。 CSM32RV20         南京中科微電子的 CSM32RV20 低功耗控制器,最高時脈 32MHz,操作電壓範圍 1.8 ~ 5V,內建 Flash 最多 40kB 和 4kB SRAM。這樣的運算等級相當於 ARM Cortex-M0 的控制器,如下圖。周邊介面包含 GPIO 、 I2C 、 SPI 、UART 、高精度的 ADC (up to 16-bit)...等等,這規格看起來滿吸引人的。         這塊開發板需要安裝自家的開發軟體 (CSM Studio) ,其實也是類似 Eclipse 的開發環境,專門接上自家的 debugger (或 JLink)並搭配這套軟體使用,如下圖一所示。安裝後,提供 BSP 驅動程式和範例,使用者就能測試看看晶片的功能。 圖一:CSM Studio 開發軟體 CH32V103         沁恆微電子的 CH32V103 控制器, 最高時脈 80MHz,操作電壓範圍 2.7 ~ 5.5V ,內建 Flash 最多 64kB 和 20kB SRAM,他們的 CH32V2x 系列的時脈可達到 144MHz。這樣的運算等級相當於 ARM Cortex-M3 的控制器,如下圖所示。其 周邊介面包含 GPIO 、 I2C 、 SPI 、UART 、 12-bit  ADC 、DMA、USB...等等,這規格正可對比意法半導體的 STM32F103 系列。 這塊開發板需要安裝一套名為 MounRiver 開發軟體 (MounRiver Studio) ,也是基於 Eclipse 平台所設計的 RISC-V 集成開發環境,我們還需...

[筆記] Firmware 開發過程中, 最難發現的問題之一

圖片
        過去開發 TI DSP 韌體時,遇過最詭異的問題就是程式跑到某一行就會出現異常情況,將這行移除後,程式又能正常運行。後來把編譯器的版本更新後,相同的程式碼經過重新 compile 居然能正常運行,很神奇吧?這類問題算是開發時期最難解決的問題之一,因為不容易發現,即使發現異常也不會懷疑與編譯器版本有關,於是自己會陷入一種迷惘的狀況,到底要怎麼 debug 解決。 [源由]           最近在開發 ARM-based MCU 晶片時,也是遇到奇怪現象。我寫一段 ISP 程式碼,每次運行到某一行就會發生晶片硬體出錯。於是,將這段程式碼交給原廠的 FAE 檢查,FAE 說在他的環境重現不出來,不過他把他的編譯產生的 map 也傳給我了。比對了雙方的 map 檔,唯一值得懷疑的是 compiler 版本不太一樣。         如下面的影片所呈現, 相同的 code,在不同的版本的編譯下,居然會出現不同的結果。影片中,先以 ARM compiler update 6 編譯,設定中斷點,當運行到某一行時,系統就出現錯誤。之後,我們將編譯工具升級為 update 7 版本後,相同的代碼就能通過運行,這種與 compiler 版本有關的問題是開發程式最難找的問題之一。 當 compiler 轉譯成機器碼之後,由晶片執行,有可能轉譯的過程有 bug (指令有錯?) 或者晶片本身有 bug (不認機器嗎?),遇上這類問題,要嘛等待晶片廠商修正,釋出下一版晶片,要嘛更新編譯器,或者自己修改代碼的寫法避開有問題的寫法。 影片: Firmware 開發時, 最難發現的問題之一

[模組] 語音撥放器 - WT588D 語音模組

圖片
        語音播放器應用在停車場系統 、 音樂鈴 、 語音導航...等等。 之前曾使用過一款語音IC -(新唐的 ISD15100 系列)- 單晶片內建 FLASH,可以儲存語音資料且音源輸入出的功能齊全,可說非常便利。後來,筆者發現 WT588D 語音模組的價格更為親民 (大約50~100 TWB 與儲存容量大小有關),而且從網上零售採購非常容易,這是開發者的福音。         WT588D 語音模組稱為 WTW-16P ,其外觀如圖一所示,模組上包含兩顆晶片:一顆是 WT588D,另一顆是 FLASH 晶片。WT588D-20SS 是語音撥放IC,需要外掛一顆 FLASH IC 用來儲存語音資料,兩者之間用 SPI 介面通訊。這個語音模組並沒有把 WT588D 所有 pin 都接出來,只有接出重要的 pin 腳,共 16 支接腳,如圖二所示。 圖一:WT588D語音模組外觀 圖二:語音模組方塊圖與接腳分配 << 語音燒錄方式 >>         燒錄 WT588D 模組需要一個 USB 燒錄器,如圖三所示,再搭配電腦上的燒錄軟體將音檔下載到模組的 FLASH 裡面。在這裡要特別留意一點, 模組放置到燒錄器上的基座方向與位置必須正確,否則語音模組會真的燒壞 。 圖三:燒錄器與語音模組使用方式          打開燒錄軟體後,建立一個新文件。左邊區塊載入打算燒錄的音檔,如圖四所示,而右邊區塊用來編輯每個地址序號內的音檔 。每個地址序號代表播放語音的編號,每個編號裡的語音可以由一個左邊區塊內的音檔組成,或者由多數的音檔所組成。下圖四中,地址0裡面只會撥放一個音檔 "請按鈕取票"。地址序號旁有個 +/- 符號可用來編輯下個地址,我們將左邊區塊的音檔拖曳到右邊區塊,表示該地址序號會撥放此音檔,如圖五所示。編輯 完成後,我們再下載並燒錄到語音模組上。 圖四:使用WTW軟體載入音檔,右邊是地址存放的音檔。 圖五:將左邊音檔拖曳到右邊區塊,代表燒錄到地址序號。 <...

[應用] 設計七彩 LED 燈與 MP3 音樂系統

圖片
        近期設計一套七彩 LED 燈與 MP3 音樂播放系統,兼具照明與音樂功能。基本功能是照明,類似壁燈的概念,當光感應偵測到白天或有其他光源時,自動關閉 LED 照明。一旦處於黑暗或低光源的環境,LED 燈便會開啟。此外,遇上停電時,鋰電池會提供一段時間的照明指示。除了照明功能之外,透過模式按鈕的切換,將系統切到 MP3 音樂播放模式,同時開啟 彩色 RGB LED 燈條的控制。         圖一是系統的方塊圖,主要包含一顆控制器晶片和 MP3 晶片,與鋰電池的充電電路,再加上一些 GPIO 的控制電路。在設計中,LED 燈要做到七彩顏色變化與明暗的差別,必須選具有 PWM 功能 的微控制器。這裡,我們採用 NXP LPC1111 控制器,當然啦!用其它控制器也行,只要晶片取得容易且開發環境熟悉,一般人都能實現出上述的系統。另外一點,設計時 LPC1111沒有用外部震盪器,而是使用控制器內部的振盪器,這樣省掉一顆震盪器零件。 圖一:LED燈與音樂系統方塊圖 影片:照明與音樂系統操作過程

[模組] 三軸陀螺儀與加速規 Gyro & Accelerometer

圖片
#  ADXL335 三軸加速計的 USB 體感搖桿 #  三軸重力加速計 Accelerometer (GY-61 ADXL335) 前言         前一篇 " 三軸重力加速計 " 介紹 ADXL335 晶片的重力加速計 (也稱加速規),主要能偵測出三軸的重力變化,便能得知物體轉動方向方位。有一個特殊情況可解釋陀螺儀的作用,當加速規放置水平時,此時轉動轉動 Z 軸,我們會發現 X/Y 軸的重力值變化量其實並不大,請參考底下的實驗影片。這樣的變化量可能被誤以為是雜訊,不容易判斷物體是否方向方位在改變。如果能再多計算每一軸轉動的速度,由轉動的角速度輔助,便能計算物體位移量。於是,陀螺儀正是用來計算角速度的,配合重力計一起使用。因此,若加速規再輔以陀螺儀的功能,這樣能更精準算出物體的移動與轉動方向 (我覺得這是很複雜的數學)。 設計流程         Arduino 官方網站 中提供好多種重力加速計與陀螺儀的模組,我便找了一顆 MPU6050 晶片來測試。這顆晶片不只具有三軸重力加速計,還有陀螺儀的功能,對外的通訊介面為 I2C 方式。首先,實驗過程我採用恩智浦的 LPC1114 控制器來比較一下 MPU6050 與 ADXL335 的重力數值,如圖一所示。圖一的 LCM 第一行顯示的是 MPU6050 X, Y, Z 軸的重力值,第二行顯示的是 ADXL335 的三軸重力值,我已經把兩塊模組的 X/Y 軸方向調整為一致了 (兩塊模組的三軸定義方向其實不太一樣,用軟體方式調整),如圖右下角所示。圖中,X 軸的重力值約為 -0.023g 和 -0.018g,Y 軸的重力值約為 -0.016g 和 0.018g,Z 軸的重力值約為 0.964g 和 1.112g。兩者數值的誤差,我的解釋是實驗過程並沒有做校正的動作,因此兩者模組存在一些誤差。撇開誤差,如果我們的實驗對精準度沒有要求太高的話,倒是很快取得三軸重力數值並計算出大概方位。 圖一:MPU6050 與 ADXL335的加速規數值 (單位 mg) 規格分析         下圖二是 MPU6050 晶片的陀螺儀規格,這顆可提供四種精度,...

[模組] 三軸重力加速計 Accelerometer (GY-61 ADXL335)

圖片
#  ADXL335 三軸加速計的 USB 體感搖桿 #  三軸陀螺儀與加速規 Gyro & Accelerometer 模組介紹         三軸重力加速計是一種重力感測器,也稱為加速規或加速計。三軸指的是 X, Y, Z 軸,重力加速度就是我們高中理化曾學過的地心引力 (g)。由於這個重力加速度是地球的天然資源 (就像磁力線的指南針),所以當我們身體傾斜或翻轉時,透過地心引力的影響讓身體內部機構可感受到其傾斜或翻轉。於是,將此概念應用到科技工業上,像電玩的 體感遊戲 (Wii, Kinect...) 、 飛行器 、 懸臂旋轉 、 震動感測 ...等都使用到相關元件,本文針對三軸重力加速計的晶片做測試研究,希望能獲得更多的應用靈感。首先,找一顆晶片試試吧!Arduino 開發套件常見的三軸加速計,使用的是 ADI ADXL335/345 晶片,因此我買了一個來測試玩玩看,並用 NXP LPC1114 晶片來設計系統。         三軸重力加速計晶片是 MEMS 設計工藝,能將這種感測技術設計到小晶片裡面,不得不佩服這群工程人員。由於地表的重力加速度有方向性,晶片又根據該重力為基準來測量三軸的變化,所以晶片與三軸的方向座標必須先定義好,如下面圖一所示,晶片面朝上為 Z軸。以圖一為例,晶片放置水平,量測到的重力數值為 X 軸 0g, Y 軸 0g, Z軸 1g。然後,該晶片內部再將這三軸的物理量轉換成電壓值輸出。實驗中,我手上拿到的是 ADXL335,它是輸出三軸的電壓值,所以設計系統時需要選用具有 ADC 功能的 MCU ,才能將這三個電壓值轉換回重力值。此外,ADI 還開發另一顆 ADXL345 晶片,與 ADXL335 晶片有些不一樣的地方,前者內部已有包含 ADC 功能,能將重力值直接轉換成數位值,並使用 I2C / SPI 介面和外部通訊,提供使用者不同的選擇。 圖一:晶片的三軸方向座標 規格分析         三軸重力加速計晶片在使用前先要找到 0g 的電壓值,這也是校正歸零的步驟。雖然每顆晶片出廠前都經過測試,但是每顆晶片之間的物理特性還是存在一點點差距,這種差距...

[應用] 超音波與溫濕度系統 (以 NXP LPC11x 控制器實現)

圖片
前言        這是一個超音波測距和溫濕度系統,MCU 當作系統的核心,整合超音波模組 、溫濕度模組 、和 LCM 顯示模組。系統的電源為 5V,耗電量約 26mA,使用三顆四號電池供電。可應用的範圍,如:自走車 、掃地機器人 、停車場車位偵測...等。我們先在麵包板上把各個模組的電路功能設計出來,並驗證韌體程式可以正常運作,接下來再製作成 PCB 電路板。 元件介紹        超音波模組  HC-SR04 :如下圖所示,一般常使用在  Arduino  系統上,做為自走車的距離感測器,利用發射超音波與接收其反射波的時間差計算出前方物體的距離,再根據距離遠近做出適當的動作。        溫濕度零件  DHT11 :這是溫度與濕度整合的零組件, 其工作電壓在  3~5.5V ,具有  8-bit  的解析度,溫度範圍  0~50 度 C ,濕度範圍  20~90% ,可應用的領域像是家電 、空調、數據紀錄器、自動控制 … 等等。     NXP LPC11xx 系列的 MCU :這是ARM  Cortex-M0 為核心的控制器,運算速度約  50MHz ,用來控制超音波模組和溫濕度模組,包含控制一個 2x16 LCM 顯示模組,如下圖所示。除了讀取溫濕度數據之外,同時  MCU  計算超音波傳輸的時間,再將數值轉換成反射物的距離,並將所有資訊顯示在 LCM 上。 圖一:超音波與溫濕度系統 圖二:超音波測距模組 原理說明        LPC1114 MCU  對超音波模組的 Trig 腳發出一個  pulse ,突波的時間需超過 10 us 以上,如下圖所示。超音波的反射信號會回應在模組的  Echo  腳上,當低電位升到高電位的時間是音波發射的時間點,而當高電位降到低電位是接收反射波的時間點。       ...

[筆記] 整合NXP LPC11x 與 KEIL C 開發環境

圖片
        三~四年前,當開發恩智浦的 LPC11xx (ARM Cortex-M0) 韌體時,設計者必須在名為 LPCXpresso 的套裝軟體下執行,它提供各系列晶片的周邊驅動程式與原始碼,方便使用者 compile & link。如果要除錯程式的話,這套軟體必須再搭配使用名為 LPC-Link 的除錯器,我們用它來除錯也可燒錄代碼。幾年前,LPC 並不支援在 KEIL C 的環境開發 (當時很多 ARM 晶片都用 KEIL 環境開發),所以只能安裝 LPCXpresso,後來 LPC 已經成功整合到 IAR / KEIL 等環境了。有關的開發軟體與除錯器可以連結到 LPCware 的網站上。         最近我的 LPC-Link 好像壽終正寢,USB 完全偵測不到它。原本想再買一個 LPC-Link,不過因工作需要我也常常使用 ULINK2 在開發與除錯意法半導體 STM32 晶片 (ARM Cortex-M3),於是想要將 LPC 開發環境移植到 KEIL C上面,這樣就只要維護一套開發軟體和一個除錯器,也能開發設計 STM32 和 LPC11x 韌體了。圖一就是移植到 KEIL 所需的重要檔案,原本的驅動程式原始碼移過來,並替換掉下列的檔案,基本上就大功告成了。                core_cm0.c                system_LPC11xx.c                startup_LPC11xx.s   (原 cr_startup_lpc11.c in LPCXpresso) 圖一:LPC11xx 整合到 KEIL環境         除錯的方面,因為不用 LPC-Link 後,首先要將 ULINK2 除錯器接到晶片接腳上。我的 ULINK2 一端連著一條 20-pin JTAG 排線,而...