總網頁瀏覽量

顯示具有 Raspberry Pi 標籤的文章。 顯示所有文章
顯示具有 Raspberry Pi 標籤的文章。 顯示所有文章

2023年2月11日 星期六

是 嵌入式系統「開發板」, 而不是「開發版」

有感而發,隨手寫個基礎小觀念分享。

長年來,看過不少背景較偏向純軟體的工程師、成大的學生、成大碩士論文裡面,常有人把嵌入式系統的板子的 「開發板」(development board) 給 誤寫成 「開發版」。

可參考下圖正確的字詞: 「開發板」。



對於不了解的朋友簡單說明一下,粗略來說,嵌入式系統的開發板就是適合產品雛型開發時期的用板子,大多會拉出大部分的I/O腳位和製作介面電路、接頭在板子上,提供軟韌體工程師做軟韌體開發或者學習之用,畢竟這階段還不確定開發者會想拿這種嵌入式電腦晶片去開發什麼產品,所以這階段的電路板還不是產品精簡客製化的樣子,而是較偏向屬於開發、或學習驗證階段所使用的板子(board) 。

 ( 在學校方面,從2013年接觸成大相關系所的同儕們就常發現這種小問題,直到去年2022年看到成大碩士班的學生的學位論文口試,還是一堆這種錯誤,且很少教授和學生本身會去注意到,原因大概是因為資訊領域太多人都沒有去了解自己在使用的板子的一些基本觀念,板子對自己來說是現成的,所以這情況越來越多。實例我就不貼出來了,以免傷到一些人的心。當然也看過許多電機資工出身但是背景偏向軟體的工程師也都常有這種狀況,所以有感而發。

從過去在我的貼文所分享一堆學界或業界常見的字詞錯誤案例的分享中大家可以發現很多人在論文中的常見字詞錯誤並不是因為打錯字,而是來自於基本的觀念不清楚所導致。

或許這些小地方無傷大雅,或許不是大問題,但個人是覺得既然大學的研究所碩士學位論文號稱是做「學術研究」的「學術」論文,當然應該對這種基本的字詞要有基本的嚴謹程度才是,畢竟「板」和「版」 兩個字雖然只差在部首,但意思差很遠 ) 

-----

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:
本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章

2022年12月14日 星期三

【 嵌入式系統(Embedded System) 到底是什麼? 】

【 嵌入式系統(Embedded System) 到底是什麼? 】

關於這方面,許多台灣的大學學術界資深老師(無論名校或者非名校)、產業界資深主管/工程師,常會誤以為嵌入式系統就是指有嵌入Linux的系統,其實這是個明顯的認知錯誤。個人應該已經不只十次在企業職缺或者大學校院內的論文看到這個問題,直到今年(2022)我還是有在國內的研討會論文中看到這個錯誤。

這情況類似之前提過的微處理機/微控制器的名詞常被混用的狀況,而許多歐美的相關技術書籍對此名詞有較嚴謹的說明。如果大家很重視「學術」,那就應該要對這些名詞的基本定義有一定的嚴謹程度。

同時讓我們看一下 Wikipedia英文版頁面內容(較詳細)對於嵌入式系統(Embedded system)的基本定義[1]:  「An embedded system is a computer system—a combination of a computer processorcomputer memory, and input/output peripheral devices—that has a dedicated function within a larger mechanical or electronic system.  It is embedded as part of a complete device often including electrical or electronic hardware and mechanical parts. 

簡單來說,嵌入式系統就是被嵌入到電子/機械/機電硬體系統內、具備特定/專用功能的 計算機(電腦)系統。 這個「嵌入」並不是 在指Linux OS軟體被嵌入到一個系統。

就算是跑non-OS類型的軟韌體的MCU為核心的系統產品,基本上也都是嵌入式系統。並不是只有那些有跑(執行)嵌入式Linux或Android的系統才叫做嵌入式系統。

對於專業名詞定義認知落差,有時候就是造成工程開發過程中的溝通問題的來源。

Ref: 

[1] Wikipedia, Embedded system, https://en.wikipedia.org/wiki/Embedded_system .


-----

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:
本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章

2022年8月30日 星期二

又有產業公司來洽談MCU嵌入式系統韌體課程合作事宜,歡迎!

 


-----

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:
本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章


2022年7月3日 星期日

【感謝文】感謝給予肯定的各界朋友們

 【感謝文】

近期希望來上課的韌體工程師的學經歷背景越來越多元,

包含擁有頂尖大學工學博士學位的韌體工程師、大型知名網通設備系統廠的軟體工程師、美商BIOS工程師、網頁工程師、頂大工程系所研究生、資訊科教師等等,

幾乎都是看到部落格的課程介紹文章與技術文章而來。

很感謝這些朋友的捧場🙏,

讓小弟我有機會在教學的過程中能更了解除了IC設計公司(IC design house)以外的更多產業的工程師現況(因為小弟我過去除了擔任顧問的經驗之外,本身專職工程師的時期都是在IC設計公司任職)。

最大宗旨還是希望課程內容/諮詢內容都能直接對所有學員的產業工作有所幫助。

也很感謝許多正向表示欣賞與肯定的各方朋友們🙏,例如很榮幸在前陣子能受邀參與勞動部&工研院所舉辦的韌體職訓課綱專家會議,提供自己的經驗看法與建議,並且讓小弟我能有機會能舉薦後續審查委員的學界代表。以及所有曾經來洽談合作的所有科技新聞媒體與產業公司和工程師學員們 🙏

-------

個人簡歷: https://sites.google.com/view/wenliangsun/

‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:


本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章


2022年2月17日 星期四

【 DFROBOT SKU:SEN0165 ORP氧化還原度感測器之sample code重點部分分析記錄】

延續上一篇的DFROBOT SKU:SEN0165 ORP氧化還原度感測器之訊號處理電路設計分析文章,這邊主要來延續介紹這款感測器套件之官方sample code重點部分分析記錄,某些較容易看出的部分就先暫時省略過。

註解: 這裡是隨意拿紙來寫的簡單計算過程,下標符號大小寫並不嚴謹,請見諒~

上篇文章主要介紹 的簡易電路分析計算過程 (使用克希荷夫電流定律)

註解: ORP是Oxidation-Reduction Potential的縮寫,表示溶液的氧化還原電位

該感測器套件的MCU端的軟韌體sample code於該DFROBOT SKU:SEN0165 ORP氧化還原度感測器感測器套件之官方說明網頁

(...省略部份)

#define VOLTAGE 5.00    //system voltage

(...省略部份)

orpValue = ((30*(double)VOLTAGE*1000)-(75*avergearray(orpArray, ArrayLenth)*VOLTAGE*1000/1024))/75-OFFSET;

//convert the analog value to orp according the circuit

注意上面的code的VOLTAGE我故意用兩個不同的顏色標記(紅色、藍色)是有原因的,看完下面內容就會知道。

其實可由下圖推導整理看出,上述code的orpValue就是如同其變數名稱,就是要還原出sensor端子輸出電壓訊號 (未經訊號處理電路模組處理的原始感測器輸出電壓訊號值) 的值,並且透過UART印出該值的字串形式以便觀看。

眼尖的看倌一定會發現其實主要是這款感測器套件的官方sample code寫得太長,其實不需要寫這麼長

sample code之中的1000就是K (1K);

sample code之中VOLTAGE/1024的部分,基本上就是ADC step voltage,而avergearray(orpArray, ArrayLenth)就是經過一些平均處理後的Vout

那為何上面的code的VOLTAGE故意用兩個不同的顏色標記?

要注意這個sample code可能比較是針對是Atmage328p(或其它ADC的類比輸入範圍電壓Vref預設為5V的) MCU based 的Arduino,所以sample code是把 提供給感測器輸出訊號處理電路模組的電壓 以及 你使用的ADC step voltage的Vref看成是一樣的。但實際上這兩者在實際應用上可能不同,例如你的嵌入式處理器晶片如果是用吃3.3V的,而卻又供5V給感測器輸出訊號處理電路模組,那麼情況就與sample code去define同一個VOLTAGE的狀況不同了。

舉例來說,從電路分析式子可以看出,假設你所使用的MCU/SoC內的ADC(或者外接的獨立的ADC IC)的Vref是3.3V,而若提供給感測器輸出訊號處理模組的電源則是5V的話,其實上面兩個VOLTAGE可能必須是不同的值

第一個(30*(double)VOLTAGE*1000)VOLTAGE是你提供給感測器訊號模組的電源電壓;

而後面的(75*avergearray(orpArray,ArrayLenth)*VOLTAGE*1000/1024)裡面的VOLTAGE/1024這個部分就是就是你所使用的MCU/SoC內的ADC(或者外接的獨立的ADC IC)的step voltage,所以其實這個(第二個)VOLTAGE就是ADC的類比輸入範圍電壓(Vref)。而1024就是精度10 bits的ADC的狀況 (如果你用的ADC的精度不同就要改)。

但如果 所使用的MCU/SoC內的ADC(或者外接獨立的ADC IC)的類比輸入範圍電壓Vref就 等同提供給感測器輸出訊號處理模組的電源的話 (就如同sample code預設的情況),那就如同sample code一樣去定義VOLTAGE是同一個值即可。

如果這兩篇文章你有看懂,就會發現,說穿了,上述sample code中的((30*(double)VOLTAGE*1000)-(75*avergearray(orpArray, ArrayLenth)*VOLTAGE*1000/1024))/75-OFFSET; 如果理解電路以及sample code的目的、原理和計算,其實sample code的這行code是可以簡化成另一種寫法,不一定要寫成這麼長,看倌們看懂了嗎?

(hint: 重點在上一篇文章的計算結果和這篇文章的計算結果,根本就是一樣的嘛,根本沒必要把這行code寫得如此落落長)。


此外,補充一下,這感測器套件的感測器輸出訊號處理電路模組中的LM2662M是一顆Switched Capacitor Voltage Converter IC(可參見TI的官方Datasheet ,部分如下圖)

 TI LM2662M Datasheet

-----

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:


本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章




2021年12月16日 星期四

【嵌入式系統基礎原理與實務課程】ADC驅動應用基礎教學

昨天替一位有十幾年業界經驗的工程師學員上課 (嵌入式系統基礎課程,該學員希望未來有機會轉職嵌入式系統韌體程式開發),

到了ADC (Analog to Digital Converter)基礎應用原理與實作應用的單元。

實驗平台使用ADC0804 (沒想到在過了十年後,又接觸到這顆IC),雖然這顆IC的型號款式似乎停產(?) 目前在各大通路都缺貨導致價格昂貴 (似乎有些地方的賣價漲到單顆IC數百元),

且這顆ADC0804是並列輸出(Parallel Output),現在的產品或許應該已經很少會用這顆IC。現在許多ADC都已整入於MCU/SoC之中,就算外接通常也會使用串列輸出(SPI、I2C)類型的ADC chip(例如Microchip的MCP30XX系列ADC)。

但是,這顆ADC(ADC0804)拿來作為嵌入式系統韌體初學者的教材仍然很好用,其中許多基礎包含MCU IC 與 周邊IC 之間的整合,還是有值得初學者學習之處,

例如ADC上的CS(Chip Select)、RD(Read)、WR(Write)、INTR(Interrupt)等腳位(Pin)的驅動存取 與 整合應用、ADC IC Datasheet內容(包含訊號的電氣特性、時序 等等)、與輸出類比訊號的感測器sensor(如光敏電阻作為環境亮度感測器之間的基礎整合應用)。

嵌入式系統軟韌硬體的初學者可藉此學習到以核心處理單元(如各式MCU/SoC)存取像是這類周邊裝置IC(如ADC)的一些相關基礎。

本單元課程內容包含ADC基礎應用原理(A/D的取樣、量化、解析度規格等),實驗方面以8051 MCU與這顆ADC0804之間的整合應用為主,以C語言撰寫MCU韌體去擷取ADC0804輸出的數位訊號教學,實驗方式包含透過MCU的GPIO與中斷控制器,去針對ADC0804 INTR訊號與轉換完畢的數位輸出訊號作輪詢(Polling) 與 中斷(Interupt),這兩種機制都會作完整介紹並且帶學員進行實驗。

黑線IC的部分修改自TI ADC080X Datasheet的general schematic來進行教學實驗中的電路繪製

TI ADC080X Datasheet

TI ADC080X Datasheet

TI ADC080X Datasheet

TI ADC080X Datasheet


註: 此課程專注在嵌入式系統韌體的ADC應用基礎教學,而不是在純硬體電路設計,所以該課程實驗教學沒有到去區分各種接地的差異。 

此外,課程也提供使用 別種形式的ADC實驗平台的教學選擇,例如使用MCU/SoC內部的ADC (例如: 該單元可用Atmega328P MCU內部ADC進行實驗教學)。

------

‼課程進一步詳情請參見下方blog網頁的課程介紹👇:

2021年9月3日 星期五

【Embedded Linux(嵌入式Linux)系列課程】Root Filesystem之編譯建置與執行 課程簡介

Root Filesystem之編譯建置與執行 課程簡介

Root Filesystem為根目錄檔案系統。簡而言之,檔案系統為電腦資料的儲存和組織(架構)方式,與作業系統之間有著密切的關係

延續上一節Kernel之編譯建置與執行之課程內容後,這節課程將會帶領學員:

  • 課程實驗內容將透過 純文字指令方式(command line) 進行,符合科技產業界對於此類系統的開發方式

  • Host PC端之Ubuntu Linux開發環境中,取得Busybox這款知名的開源檔案系統建置工具的source code,並透過GNU Toolchain編譯工具對其進行編譯,以建置出給Beaglebone Blcak嵌入式系統開發板所運行使用的Root Filesystem(根目錄檔案系統)

  • 以Busybox建置製作Root Filesystem的過程,包含嵌入式系統目標平台上所需的基本目錄及裝置節點(device nodes)

  • 準備Busybox執行所需之動態連結函數庫(該課程主要實驗方式);也會額外補充介紹靜態連結的編譯方式。

  • 建立檔案系統所需之基礎檔案(如/etc/inittab、/etc/init.d/rcS、/etc/fstab......等等)

  • 如何讓執行於Beaglebone Blcak板子的Linux Kernel從SD卡掛載(mount)學員於課程內所建立的Root Filesystem 

實驗Demo影片:


從上電進行開機流程之後進入根目錄畫面,展示在Beaglebone Black板子上執行ls、cat /proc/interrupts及cat /proc/cpuinfo指令。



本園區之FB粉絲專頁如下:

--------------------

孫文良 (阿良的嵌入式系統技術學習區)

個人簡介: https://sites.google.com/view/wenliangsun/

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考 課程招生網頁連結




2021年8月23日 星期一

Beablebone Black或Nano Pi很適合拿來作為Embedded Linux的研究/學習平台!

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

先聲明,這篇不是工商服務廣告,單純介紹和分享一些嵌入式系統板子的使用經驗。

BeagleboneBlack(BBB)這板子真的蠻不錯的,

除了上面的AM3358 SoC系統晶片維持TI SoC的一貫風格(TI OMAP系列SoC也是如此) 釋出很多SoC的詳盡手冊資料(眾多開發板上的SoC款式,我看過釋出資料最詳細的就是他們公司)、很適合拿來做有深度的研究之外,

也真的很適合拿來做技術教學,

TI官方網站的AM3358 SoC頁面(上面提供許多詳盡的資料)


BeagleboneBlack板子的schematic(電路圖)PCB設計都有公開,而板子上的User LED有4個,

很方便拿來做Linux Kernel Device Driver串接上層user space的Application program(藉由system call機制存取底層資源)的相關基礎教學Demo用~  

還可順便講解一些基礎的介面電子電路原理 (對較篇向純軟體背景或者非電機電子科系的學員們,也會有不少幫助)。


                                                              圖諞來源: Beaglebone black電路圖
https://github.com/beagleboard/beaglebone-black/blob/master/BBB_SCH.pdf?raw=true



圖諞來源: Beaglebone black電路圖
https://github.com/beagleboard/beaglebone-black/blob/master/BBB_SCH.pdf?raw=true


圖諞來源: https://elinux.org/Beagleboard:BeagleBoneBlack#Minix_.28Discontinued.29


也可以從Beagleboard官方網站連進去觀看各種資訊和資源~

Beagleboard官方網站


------------

另外,像是Nano Pi系列的板子也很棒喔,

除了期價格和性能比很好,

其相關的技術文件資訊(如其相關的技術文件資訊連結2)也算頗為豐富,電路圖資訊也很完全,

而板子上面的核心SoC系統晶片的方面,

除了社群網頁上放置其SoC的架構和完整的規格資訊之外(Datasheet),其原廠Allwinner也有在wiki page他們的官方網站上放置關於晶片的介紹。

---------

其它也還有許多很不錯的嵌入式系統開發板,未來若有機會的話再一一介紹,也歡迎各家廠商來洽推廣談合作方式!

--------------------


2021年8月20日 星期五

【Embedded Linux(嵌入式Linux)系列課程】Kernel之編譯建置與執行 課程簡介

Embedded Linux系列之Kernel之編譯建置與執行 課程簡介

Kernel為作業系統的核心,是現代作業系統之中最基本也是最主要的單元,簡略而言,Kernel主要負責整體電腦系統的資源管理。

延續上一節Bootloader開機啟動程式建置與執行之課程內容後,這節課程將會帶領學員:

  • 課程實驗內容將透過 純文字指令方式(command line) 進行,符合科技產業界對於此類系統的開發方式

  • Host PC端之Ubuntu Linux開發環境中,取得Linux Kernel source code,並透過GNU Toolchain編譯工具對其進行編譯,以建置出給Beaglebone Blcak嵌入式系統開發板所運行的Embedded Linux Kernel Image

  • 製作Boot script(包含帶給Kernel的必要啟動參數以及與啟動核心相關的UBoot指令)

  • 介紹如何讓Beaglebone Blcak板子從SD卡載入並啟動Linux Kernel Image

  • 介紹在產業界工作常會使用到的透過TFTP(Trivial File Transfer Protocol)從Host PC端載入Embedded Linux Kernel ImageBeaglebone Blcak板子上並且執行的方式 
  • 介紹如何編譯裝置結構樹devicetree source file(.dts)以得到device tree binary(.dtb),及如何透過UBoot將其載入給Linux Kernel

實驗Demo影片(註: 此為尚未建置Filesystem的狀態):

SD卡(MMC)載入並啟動Linux Kernel (透過boot script自動booting)


透過TFTP從Host PC端載入Embedded Kernel ImageBeaglebone Blcak板子上並且執行 
(刻意敲UBoot指令給大家看)



本園區之FB粉絲專頁如下:

--------------------

孫文良 (阿良的嵌入式系統技術學習區)

個人簡介: https://sites.google.com/view/wenliangsun/

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考 課程招生網頁連結

2021年7月29日 星期四

【課程內容介紹】STM32 MCU韌體課程 之 中斷(Interrupt)機制: NVIC基本原理與應用 課程簡介

下方影片為32bits ARM Cortex-M CPU based STM32 MCU韌體課程 之 中斷(Interrupt)機制: NVIC基本原理與應用 教材實驗影片

課程內容將介紹其基礎原理觀念 與 實驗實作過程: 在基礎觀念原理方面將會教導NVIC(Nested Vectored Interrupt Controller)中斷機制原理基本觀念,並說明何謂Interrupt Vector Table (中斷向量表);何謂Nesting、Tail-Chaining、Late-Arriving等feature;何謂Interrupt priority grouping、Preemption priority (group priority)、Subpriority、EXTI與NVIC實驗較相關的內容等等,並帶領學員觀看ST官方技術文件之相關對應內容;

而在實作實驗的部分,將教導學員使用STM32CubeMX tool搭配IDE如KEILC(MDK ARM)或者STM32CubeIDE進行操作,以及介紹由講師所提供的範例程式中的重要API函數與流程。

將UART preemption priority設置較高,UART exception搶占EXTI exception flow



將兩者之preemption priority設置相同,UART exception無法搶占EXTI exception flow,按發生順序執行。




兩者之preemption priority設置相同,EXTI exception無法搶占UART exception flow,按發生順序執行。



--------------------

孫文良 (阿良的嵌入式系統技術學習區)

個人簡介: https://sites.google.com/view/wenliangsun/

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考 課程招生網頁連結







2021年3月8日 星期一

什麼是嵌入式系統?

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

許多人都聽說過嵌入式系統,包含許多學生、教師甚至是從業工程師,即便這是個在工程界常聽到的名詞,但卻常常有人對此名詞感到困惑。

但到底什麼是嵌入式系統呢?

我們可以看一下Wikipedia上面的定義說明(該內容重點也符合英國電機工程師協會的定義)

An embedded system is a computer system—a combination of a computer processor, computer memory, and input/output peripheral devices—that has a dedicated function within a larger mechanical or electrical system.

從上述內容我們可以看出,簡單來說,嵌入式系統就是一種整合了電腦處理器、記憶體、I/O周邊裝置等單元、具備特定功能的電腦系統 (常被應用於電子系統或者機械系統之中)。

嵌入式系統的整合應用隨處可見,只要是具備電腦系統在其中的產品,都是嵌入式系統的範疇。例如冷氣機、洗衣機、平板、手機、數位電視、數位機上盒、智慧穿戴手環等等。

當然現在的手機或平板電腦的功能越來越廣泛,就嵌入式系統的定義來說顯得有些模糊了,但因為仍是裝置類型的產品,且主要以通訊功能為主,所以仍可歸類為嵌入式系統(和廣泛用途的PC個人電腦系統仍有不少差異)。

而我過去最常見到的錯誤認知是:

• 有些純軟體背景的人認為,嵌入式系統就是指Embedded Linux或者做Linux kernel相關內容

事實上,Embedded Linux是執行在某些嵌入式平台上面的的作業系統軟體,而不論是SoC或者MCU或者Embedded Microprocessor平台,即便其執行的軟體不屬於OS軟體(或RTOS),而可能只有跑non-OS的韌體程式(例如做一些做硬體控制或感測器訊號的擷取),這當然也是屬於嵌入式系統。

而雖然如果是有跑Embedded Linux的嵌入式系統,其中當然有Linux kernel,但其實這就較偏向於作業系統的範疇,因為Linux kernel也可能是PC上的Linux kernel,不能以此概括嵌入式系統,因為嵌入式系統是一個系統而不是單一個部分而已(同樣的,如果一個系統只有純電子電路,而沒有任何的電腦單元在其中,那也不屬於嵌入式系統)。

一樣都是嵌入式系統領域,卻常因人們各自不同背景而有不同的解讀或理解。所以在這裡特別作個說明,也建議閱讀下列相關文章。

相關文章:

1.   現代計算機系統核心硬體常見平台的分類與簡介概述

2.   Arduino到底是什麼? MCU又是什麼?

3.  MPU/MCU/Embedded Microprocessor/Embedded Processor名詞定義探討與整理

4. 許多人對於8051 MCU常有的錯誤觀念討論與闢除 

5. 【課程介紹】本學習區已開設 & 未來即將開設之嵌入式系統軟韌體技術課程 & 課程特色!


--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章





2020年12月23日 星期三

樹莓派3(Raspberry Pi 3)內建藍牙與APP INVENTOR 2的藍牙連線問題記錄(使用pyserial lib的API直接對/dev/ttyAMA0做存取)

這篇就當成一個實驗過程小記錄 (這篇和我之前的許多篇文章風格不同,在這篇文章不會去探究底層Linux device driver或者上層library的內容細節等等,僅從上層純應用Raspberry Pi的maker角度來作個簡單的記錄)

因為手邊的一個小需求,需要用樹莓派3 Model B之板子上的藍牙(實際硬體為BCM43438的藍牙+WiFi的二合一SoC chip)與APP INVENTOR2所開發出的Android的APP的藍牙功能進行連線

這次在樹莓派3上面執行的這個小應用程式是用python撰寫。起初使用bluetoothctl等一連串指令進行藍牙的連線配對後,使用pyserial lib的API直接對/dev/ttyAMA0做存取(也就是藉由UART來對板子上面的藍牙做存取)的方式(這相對類似比較沒有依賴現成藍牙API的作法。以前曾經在其他的專案的開發過程中和HC系列藍牙模組進行連線,當時這樣做是OK的)。而這次在測試與手機端Android App連線的時,在手機端Android App開啟藍牙連線的過程(與樹莓派3板子內建的藍牙連線)遇到問題(連線失敗)。

後來改搭配使用常見的libbluetooth-dev lib搭配PyBluez lib的API來撰寫樹莓派3上面執行的這個python小應用程式,就可成功連線了。

(或者就如同下sudo rfcomm0 watch hci0指令也可成功連線,當然只下指令的話還缺乏後續的應用,所以還是須要撰寫程式)

進一步的詳細過程內容和原因,如果在未來有時間和機會的話,再另外撰寫文章分享



2020年11月13日 星期五

MPU/MCU/Embedded Microprocessor/Embedded Processor名詞定義探討與整理

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

在嵌入式系統的技術領域,某些與處理器或控制器相關的名詞因為常被混合使用,所以常使許多人對於這些名詞感到模糊以致觀念不清,所以這裡繼續寫這篇文章來作整理分析探討(過去我曾寫過[6]和[13]這兩篇Blog文章來解釋一些名詞定義上的觀念差異)

許多人可能較不會注意到,STM32系列其實除了MCU(Microcontroller Unit)產品之外,也有出MPU(Microprocessor Unit)系列的產品[1],例如ST公司的這顆STM32MP151A[2],這顆IC裏頭除了有有雙核心(ARM Cortex-A7和一顆ARM Cortex-M4)的CPU Cores (當然其實ARM處理器單元之中其實不只包含CPU core,以Cortex-M為例,還會有一些相較於一般周邊裝置而言與CPU更有緊密關係的周邊如NVIC、Systick timer之類的裝置)之外, 還有一些週邊單元(如I2C、SPI、UART、Ethernet MAC、USB、Camera interface、ADC、DAC等等)

須注意的是,上面提到的這款MPU指的是Embedded Microprocessor,而不是傳統所稱的微處理機/微處理器(General-Purpose Microprocessor),單一顆內部主要內容只有CPU單元的IC,而沒有包含週邊單元,如Z80或8086)[3][4]

在某些對於名詞定義較嚴謹書籍裏頭有這樣較明確的定義和解釋去區分上述所提及的Microprocessor和Microcontroller之間的差異,如台科大電子系教授林銘波或者國外的Muhannad Ali Mazidi或者Sencer Yeralan等人寫的書[7][8][9][10]

關於Embedded Microprocessor(嵌入式微處理器),除了上面提到的STM32MP151A之外,像是國內廠商新唐的NUC980[5][12]或者國外廠商Microchip/Atmel公司的SAM9G20[11]也是同類的產品

而Embedded Microprocessor(嵌入式微處理器)這個詞,有時與Z80/8086這種只有內含CPU的IC被放到嵌入式系統之中作為運算核心的狀況下所稱的Embedded Processor(嵌入式處理器),在名詞方面也會有在某些技術手冊或甚至一些書籍中被混用的狀況

Ref:
[3] Wikipedia -Zilog Z80: File:Z80_arch.svg https://en.wikipedia.org/wiki/Zilog_Z80#/media/File:Z80_arch.svg
[4] Wikipedia - Intel 8086: Intel_8086_block_scheme.svg , https://en.wikipedia.org/wiki/Intel_8086#/media/File:Intel_8086_block_scheme.svg
[6] 阿良的嵌入式系統技術學習區, "Arduino到底是什麼? MCU又是什麼?", https://jimsun-embedded.blogspot.com/2019/01/arduino-mcu.html
[7] 林銘波, 微算機原理與應用:x86/x64微處理器軟體、硬體、界面與系統 六版 (精裝本), 全華圖書
[8] 林銘波, 8051微算機原理與應用(精裝本), 全華圖書
[9] Muhammad Ali Mazidi, Janice G. Mazidi, Rolin D. McKinlay, The 8051 Microcontroller and Embedded Systems (2nd Edition), Pearson Education Inc.
[10] Sencer Yeralan, Ashutosh Ahluwalia, Programming and Interfacing the 8051 Microcontroller, Addison-Wesley Publishing Company
[11] Microchip 32-BIT ARM-BASED MICROPROCESSORS: SAM9G20, http://ww1.microchip.com/downloads/en/DeviceDoc/DS60001516A.pdf
[12] 新唐科技(Nuvoton) NUC980 Series Datasheet, https://www.nuvoton.com/resource-files/NUC980_Datasheet_EN_Rev1.0.pdf
[13] 阿良的嵌入式系統技術學習區, "現代計算機系統核心硬體常見平台的分類與簡介概述", https://jimsun-embedded.blogspot.com/2019/11/blog-post_22.html?fbclid=IwAR2-G5oveNJ-esTn7SCrBm_rxnF0IHOSoEorJFGzejbInLd5uBvfrANbilU