無論開發(fā)人員是專業(yè)人士還是業(yè)余愛好者,Raspberry Pi 開發(fā)板在整個開發(fā)周期都對非常有用。盡管 Raspberry Pi Zero 得到了人們的極大關(guān)注,但一直是很難獲得的稀缺品。幸運的是,設(shè)計人員可以使用Pi 家族中的其它板子,這些板子同樣功能出色,能滿足各種應(yīng)用要求。
Raspberry Pi 3 使用其四核處理器,并可提供比單核 Pi Zero 多一倍的內(nèi)存。對于需要較小設(shè)計封裝,但又對 Pi Zero 的性能感到失望的開發(fā)人員,Raspberry Pi 計算模塊 3 (CM3) 就是不錯的選擇。該模塊既具有 Pi 3 的高性能,又如 Pi Zero 一般只有信用卡大小。通過利用大量擴展硬件板和現(xiàn)有軟件,開發(fā)人員可以使用 Pi 3 和 CM3 滿足各種應(yīng)用要求。
啟動 Raspberry Pi 入門并運行
Raspberry Pi 系統(tǒng)提供了強大的開源基礎(chǔ),使供應(yīng)商、第三方開發(fā)人員和用戶自己能夠利用越來越豐富的軟件和硬件生態(tài)系統(tǒng)并做出貢獻。Pi 硬件最初是由 Raspberry Pi Foundation 開發(fā)用于計算機教學(xué)的低成本平臺,現(xiàn)在已經(jīng)演變成一個適合快速原型開發(fā)、功能強大且成本較低的平臺,而且越來越多地作為可嵌入的計算平臺。
Pi 軟件可提供類似水平的性能,而且容易獲取。Pi 開發(fā)板運行 Raspbian,這是針對 Raspberry Pi 開發(fā)板優(yōu)化的 GNU/Linux 操作系統(tǒng) (OS) 版本。開發(fā)人員可以將含有 Raspbian 安裝程序 NOOBS 的 SD 卡插入 Pi 開發(fā)板的 SD 接口,幾秒鐘后便會出現(xiàn)熟悉的 Linux 環(huán)境并可開始運行。
由于 Raspberry Pi 社區(qū)非?;钴S,有特定要求的開發(fā)人員可以從其他操作系統(tǒng)中選擇,包括桌面 Ubuntu、Ubuntu Core、Windows 10 IoT Core、基于 Linux 的 Open Source Media Center (OSMC) 和 RISC OS 等。對于這些發(fā)行版本,開發(fā)人員只需要使用存儲在 SD 卡上的下載圖片來加載系統(tǒng)即可。最后,軟件工程師可以利用豐富的可用軟件庫來支持以各種編程語言進行開發(fā)。
Pi 片
在硬件層面,Pi 硬件已演變成三大分支,這些分支在性能、大小和功能方面存在一些顯著差異(表 1)。最近推出的 Pi Zero 以其小尺寸引人矚目,可作為入門級開發(fā)板使用,并且為降低成本以及縮小封裝尺寸,犧牲了一些功能元素。相比之下,Pi 3 及其嵌入式變體 CM3 具有高性能四核處理器和大內(nèi)存,可以為嵌入式應(yīng)用提供強大的硬件平臺。此外,CM3 封裝與 Pi Zero 幾乎相同,且不會犧牲性能或功能。
Pi 處理器 存儲器 尺寸 IO Pi 3 BCM2837(1.2 GHz 64 位四核 ARM Cortex-A53,帶雙核 VideoCore IV GPU)
1GB RAM
NVM: Micro SD 卡插槽
85 mm x 56 mm
Pi 40 引腳針座
40 個 GPIO
802.11n Wi-Fi
藍牙 4.1
AV 端口
相機接口 (CSI)
顯示器接口 (DSI)
Pi CM3 同 Pi 3
1GB RAM
NVM: 4 GB eMMC 板載閃存
67.6 mm x 31 mm
200 引腳 SODIMM
48 個 GPIO
2 個 I2C
2 個 SPI
2 個 UART
2 個 SD/SDIO
HDMI
USB
DPI、SMI、CSI、DSI
Pi Zero BCM2835(1 GHz 單核 ARM1176)
512 MB RAM
NVM: Micro SD 卡插槽
65mm x 30mm
Pi 40 引腳通孔
HDMI
USB
HAT 兼容針座
復(fù)合視頻和復(fù)位針座
CSI 相機連接器
表 1: Raspberry Pi 3、計算模塊 3 (CM3) 和 Pi Zero 的比較(來源: Digi-Key Electronics,根據(jù) Raspberry Pi Foundation 數(shù)據(jù)編制)
標準硬件接口是 Raspberry Pi 等平臺成功的關(guān)鍵因素。最近推出的 Pi 開發(fā)板,包括 Pi 3 和 Pi Zero,可提供同樣的 40 引腳接口,引出了 28 個 GPIO 引腳,其中一些引腳是 I2C、SPI 和 UART 連接的兩倍(圖 1)。除了 GPIO 引腳,該 Pi 標準接口還提供了 3.3 V、5 V、接地和其他線路,如 EEPROM ID。多虧有這種通用引腳布局,Pi 用戶可以從第三方供應(yīng)商處找到多種擴展板,并將其全都構(gòu)建在這個標準接口上。

圖 1: Pi 開發(fā)板(包括 Pi 3 和 Pi Zero)具有通用的 40 引腳接口,此接口會從主機板處理器和相關(guān)元器件中引出 GPIO 和其他線路。(圖片來源: Raspberry Pi Foundation)
然而,對于 Pi Zero 用戶,該 40 引腳接口以PCB 上的電鍍通孔形式提供,需要用戶壓接或焊接到通孔連接器針座上。對于 Pi 3,連接器針座本身是標準的(圖 2),同時還針對 Wi-Fi 和以太網(wǎng)等 Pi Zero 不可用的功能來配備連接器,如表中所示。
圖 2: 在提供 Pi 標準 40 引腳接口的情況下,Pi Zero (a) 僅提供通孔連接,而 Pi 3 (b) 包括 40 引腳連接器,可以接受稱為 HAT(頂部安裝硬件)的擴展板。(圖片來源: Raspberry Pi Foundation)
擴展硬件
由于 Pi 接口提供電源、接地和 GPIO,開發(fā)人員可以將其分立電路直接連接到 Pi 3 GPIO 接口引腳。然而,Pi 平臺不是從零開始布線電路,而是提供更有效的擴展 Pi 3 系統(tǒng)功能的方法。在這里,Pi 3 上的 40 引腳針座的可用性為配置為 HAT(頂部安裝硬件)的擴展板提供了標準接口。借由這種簡單的電氣和機械接口,開發(fā)人員可以使用應(yīng)用程序特定的功能快速增強基礎(chǔ) Pi 3 開發(fā)板。開發(fā)人員只需將 Pi 兼容的擴展 HAT 壓入 40 引腳連接器上,即可創(chuàng)建擴展板堆棧,所有這些都可以共享此單一接口。
開發(fā)人員可以利用大量擴展板。例如,Pi Sense HAT 包括定向或環(huán)境感測應(yīng)用所需的全套傳感器。此外,還提供了一個 LED 點陣和五按鈕操縱桿,可供用戶進行反饋和交互(圖 3)。
圖 3: 開發(fā)人員只需插入 HAT 即可為 Pi 開發(fā)板添加功能,例如這個 Pi Sense HAT,可提供多個傳感器以及 LED 點陣和五按鈕操縱桿,方便用戶交互。(圖片來源: Raspberry Pi Foundation)
Sense HAT 本身就是一個復(fù)雜的子系統(tǒng): 除了自有的 Microchip Technology 8 位 ATtiny MCU (ATTINY88) 外,該擴展板還包括 STMicroelectronics LSM9DS1 慣性測量裝置 (IMU)、STMicroelectronics 的 HTS221 濕度/溫度傳感器和 STMicroelectronics LPS25HBTR 壓力傳感器。
部署簡單
與其他 Pi 兼容的擴展板一樣,開發(fā)人員只要將 HAT 板向下壓入 Pi 3 的 40 引腳針座上,就能將此 Sense HAT 連接到 Pi 3 系統(tǒng)。軟件界面也很簡單: 獲得官方支持的 Python sense-hat 庫將低級硬件交互隱藏在簡單直觀的調(diào)用中(列表 1)。
from sense_hat import SenseHat
sense = SenseHat()
temp = sense.get_temperature()
print("Temperature: %s C" % temp)
humidity = sense.get_humidity()
print("Humidity: %s %%rH" % humidity)
# get_orientation_degrees returns a Python dictionary
# with keys pitch, roll, and yaw
orientation = sense.get_orientation_degrees()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))
列表 1: Raspberry Pi Sense HAT 庫使軟件開發(fā)人員能夠使用一些直觀的調(diào)用從 Sense HAT 硬件獲取數(shù)據(jù)。(代碼來源: Raspberry Pi Foundation)
除了 Pi Sense HAT 之外,開發(fā)人員還可找到解決最典型的應(yīng)用需求的第三方 HAT。例如,Seeed Technology 114990831 提供了 2 通道 16 位數(shù)模轉(zhuǎn)換器 (DAC) 和 24 位模數(shù)轉(zhuǎn)換器 (ADC),具有 8 個單端或 4 個差分輸入通道。開發(fā)人員可以從 Seeed GPS、DFRobot 超聲波查找傳感器和 Adafruit 步進電機等其他許多器件中找到擴展。
若現(xiàn)有擴展板無法滿足開發(fā)人員的要求,Seeed Technology 還提供了一個分線板 HAT,其中包括一些內(nèi)置元器件,包括 P-MOS、N-MOS、NPN 和 PNP 晶體管。
在使用 HAT 時,開發(fā)人員可以利用 Raspberry Pi Foundation、供應(yīng)商和其他 Pi 社區(qū)成員提供的諸多軟件工具。例如,Raspberry Pi raspi-gpio 工具使開發(fā)人員可以查看 GPIO 的狀態(tài)并修改其行為。程序員還可以使用該工具的開源 C 代碼作為構(gòu)建自己的 GPIO 控制軟件例程的模型。
開發(fā)人員還可以找到用于更高級語言(如 Python)的 GPIO 庫。利用 RPi.GPIO Python 模塊,開發(fā)人員可以使用調(diào)用功能,于引腳層面控制 GPIO 函數(shù)的各個方面,例如使用 GPIO.input(channel) 讀取 GPIO 引腳的值,以及使用 GPIO.output(channel, state) 將指定的 GPIO 引腳設(shè)置為指定狀態(tài)。
gpiozero Python 庫通過 MotionSensor、LightSensor、LED、Motor 等更高級的抽象來提升 GPIO 編程。使用這種方法,程序員可使用更直觀的命令來讀取基礎(chǔ)硬件的狀態(tài)或設(shè)定所需的狀態(tài),例如可打開 LED 的 led.on() 命令,從而處理底層硬件,依靠庫來管理基礎(chǔ)的 GPIO 事務(wù)。
利用 Grove
Pi HAT 接口標準為第三方開發(fā)人員提供了有吸引力的基礎(chǔ),但仍然局限于 Pi 平臺。相比之下,Grove 接口提供了跨硬件平臺的單一標準基礎(chǔ),吸引了更多的擴展板開發(fā)人員。Seeed Technology Grove 入門套件提供了一個帶有多個 Grove 兼容連接器的 Pi 兼容 HAT 板。與其他 HAT 一樣,Grove HAT 安裝在 Pi 3 40 引腳連接器上(圖 4)。
圖 4: Seeed Technology Grove 入門套件連接到 Pi 標準的 40 引腳連接器,使開發(fā)人員能夠使用各種 Grove 兼容的外設(shè)來增強其 Pi 系統(tǒng)。(圖片來源: Seeed Technology)
使用 Grove HAT,開發(fā)人員可保留 Pi 3 的簡單性和性能,同時還可訪問各種 Grove 兼容擴展,包括致動器、氣體傳感器、電機控制設(shè)備、揚聲器、無線收發(fā)器等等。開發(fā)人員不是將擴展功能直接插入到 Pi 3 40 引腳連接器中,而是將這些產(chǎn)品隨附的 Grove 連接器插進安裝在 Grove HAT 頂部的其中一個 Grove 插槽上(圖 4)。
開發(fā)人員可以找到 C、Java、Node.js、Python 以及其他類似的 Grove 軟件庫,將 Grove 功能插入其應(yīng)用程序。此時,利用較高級別的例程,開發(fā)人員可以考慮收集模擬數(shù)據(jù)(列表 2),依靠庫中的低級例程來執(zhí)行相應(yīng)位級的事務(wù)(列表 3)。
# Tweet the temperature, light, and sound levels with our Raspberry Pi
# http://www.dexterindustries.com/GrovePi/projects-for-the-raspberry-pi/raspberry-pi-twitter-sensor-feed/
import twitter
import time
import grovepi
import math
# Connections
sound_sensor = 0 # port A0
light_sensor = 1 # port A1
temperature_sensor = 2 # port D2
led = 3 # port D3
intro_str = "DI Lab's"
# Connect to Twitter
api = twitter.Api(
consumer_key='YourKey',
consumer_secret='YourKey',
access_token_key='YourKey',
access_token_secret='YourKey'
)
grovepi.pinMode(led,"OUTPUT")
grovepi.analogWrite(led,255) #turn led to max to show readiness
while True:
# Error handling in case of problems communicating with the GrovePi
try:
# Get value from temperature sensor
[t,h] = grovepi.dht(temperature_sensor,0)
# Get value from light sensor
light_intensity = grovepi.analogRead(light_sensor)
# Give PWM output to LED
grovepi.analogWrite(led,light_intensity/4)
# Get sound level
sound_level = grovepi.analogRead(sound_sensor)
# Post a tweet
out_str ="%s Temp: %d C, Humidity: %d, Light: %d, Sound: %d" %(intro_str,t,h,light_intensity/10,sound_level)
print (out_str)
api.PostUpdate(out_str)
time.sleep(60)
except IOError:
print("Error")
except KeyboardInterrupt:
exit()
except:
print("Duplicate Tweet or Twitter Refusal")
列表 2: 開發(fā)人員可以使用 Pi 開發(fā)板、Grove 擴展和 Grove 軟件庫來快速實現(xiàn)復(fù)雜的應(yīng)用程序,例如此示例,其模擬了將環(huán)境數(shù)據(jù)傳輸?shù)街鳈C服務(wù)(本例為 Twitter)的物聯(lián)網(wǎng)型過程。(代碼來源: Dexter Industries)
# Read analog value from Pin
def analogRead(pin):
write_i2c_block(address, aRead_cmd + [pin, unused, unused])
read_i2c_byte(address)
number = read_i2c_block(address)
return number[1] * 256 + number[2]
列表 3: Grove 軟件庫處理訪問硬件外設(shè)所需的位級操作,使開發(fā)人員可以使用更直觀的調(diào)用(如 analogRead(pin))進行工作。(代碼來源: Dexter Industries)
簡化配置
過去,向系統(tǒng)添加新硬件在許多層面上都面臨挑戰(zhàn)。硬件工程師需要設(shè)計合適的機械和電氣接口。應(yīng)用程序開發(fā)人員需要找到能夠提供所需抽象類型的合適軟件庫,以便最大限度地提高生產(chǎn)力。不過,借由 Pi 標準 40 引腳連接器和上述現(xiàn)有軟件庫,Pi 3 及其生態(tài)系統(tǒng)則可消除這些挑戰(zhàn)。更進一步而言,針對查找和加載硬件特定的板支持包 (BSP),Pi 架構(gòu)能省去開發(fā)人員近 ? 的額外工作。BSP 通常會提供完成 OS 和擴展硬件之間接口所需的低級代碼。
Pi 架構(gòu)大大消除了 Pi 用戶安裝和配置 BSP 的不同硬件設(shè)備需求。相反,Pi 系統(tǒng)使用設(shè)備樹,可以提供加載模塊和管理資源分配的機制,從而避免多個軟件模塊之間競爭相同資源的沖突。如果硬件設(shè)備需要專門的軟件,則 Pi 用戶只需要設(shè)置一些配置項。OS 內(nèi)核會自動查找并加載與相應(yīng)硬件設(shè)備相關(guān)的模塊。例如,Pi 系統(tǒng)中的 I2C 功能默認為禁用。開發(fā)人員只需編輯配置文件 config.txt,將一行文字取消注釋:
#dtparam=i2c_arm=on
Pi 平臺甚至簡化了這一步。當 Raspbian 首次啟動時,會運行一個配置工具,向用戶顯示配置項目的菜單,包括啟用各種接口的功能。
對于依賴于基于 I2C 硬件的應(yīng)用,較高級別的庫(如前面提到的那些)可消除開發(fā)人員在 I2C 事務(wù)級別編碼的需要。當開發(fā)人員確實需要開發(fā)用于專門的 I2C 操作的代碼時,他們可以找到用于 Linux 的 I2C 工具等可以直接使用或者用作創(chuàng)建自定義 I2C 軟件示例的軟件。
嵌入式 Pi
對于想要將 Pi 系統(tǒng)嵌入到產(chǎn)品中的設(shè)計人員,最近推出的 CM3 提供了一個緊湊的直接替換型 Pi 解決方案(圖 5)?;谂c Pi 3 相同的四核處理器,CM3 還提供與 Pi 3 相同的功能和功能。此外,CM3 在電路板上采用 4 GB eMMC 閃存:而其他 Pi 開發(fā)板則提供了一個可用于添加外部閃存卡的 micro SD 插槽。(Raspberry Pi 還提供 CM3L – CM3 的“Lite”版本,其中包括該產(chǎn)品上除板載閃存之外的所有內(nèi)容。)
圖 5: Raspberry Pi 計算模塊 3(CM3)兼具 Pi Zero 的小尺寸和 Pi 3 的性能,同時可引出比這兩種產(chǎn)品更多的引腳。它還包括一個 4 GB 閃存模塊(在板的反面)。(圖片來源: Raspberry Pi Foundation)
CM3 摒棄了 Pi 3 和 Pi Zero 中使用的 40 引腳 IO 接口。相反,CM3 在板邊緣提供了 200 引腳 SODIMM(小型雙列直插式存儲器模塊)連接器的擴展接口(圖 6)。事實上,整個 CM3 板可與 DDR2 SODIMM 外形尺寸兼容,因此開發(fā)人員可以通過標準的 DDR2 SODIMM 連接器將 CM3 連接到目標系統(tǒng)。

圖 6: Raspberry Pi CM3 并未采用其他 Pi 開發(fā)板上的 40 引腳接口,而是提供 200 引腳分線處理器和其他電路板元器件。(圖片來源: Raspberry Pi Foundation)
為簡化開發(fā),工程師可以利用 Raspberry Pi CM3 開發(fā)套件將 CM3 模塊與 Raspberry Pi 計算模塊 IO 板組合在一起。IO 板是一個簡單的開源電路板,帶有用于 CM3 的 DDR2 SODIMM 連接器以及斷開 200 引腳 CM3 接口的針座(圖 7)。另外,IO 板還提供了 Pi 3 開發(fā)板上提供的 HDMI、USB、相機和顯示器端口的連接器。
圖 7: CM3 開發(fā)套件中采用的 Raspberry Pi 計算模塊 IO 板提供了適用于 CM3 的 DR2 SODIMM 連接器,和適用于 200 引腳 CM3 接口的針座,并為 HDMI、USB、相機和顯示器端口提供了連接器。(圖片來源: Raspberry Pi Foundation)
實時應(yīng)用
CM3 兼具高性能和小尺寸等特點,非常適合用作電子產(chǎn)品(如電視機、音頻設(shè)備和類似消費產(chǎn)品)中的嵌入式系統(tǒng)。然而,對于實時應(yīng)用,開發(fā)人員需要考慮默認 Pi 平臺的一些限制。
最值得注意的是,Pi 系統(tǒng)并不采用實時時鐘 (RTC)。此外,Pi 3 和 CM3 中使用的 Cortex-A53(或 Pi Zero 中使用的 ARM1176)之類的內(nèi)核,并不包括定時傳感器讀取等實時事件所需的功能,例如 SysTick 系統(tǒng)定時器。SysTick 定時器是 ARM Cortex-M 系列等內(nèi)核的重要功能,專為確定性實時應(yīng)用而設(shè)計。
工程師可以使用 Maxim Integrated DS3231 等精密 RTC IC 輕松彌補這一不足。DS3231 RTC IC 在消費溫度范圍內(nèi)具有 ±2ppm 的精度,可產(chǎn)生用于驅(qū)動軟件系統(tǒng)定時器的方波輸出。此外,它提供了一個簡單的 I2C 接口,可用于讀取實時時鐘計數(shù)。開發(fā)人員可以使用基于之前提到的 I2C 工具包的 C 例程將 RTC 數(shù)據(jù)集成到其實時應(yīng)用程序中。
使用標準 Pi 系統(tǒng)進行實時應(yīng)用的另一個局限在于操作系統(tǒng)本身。針對通用應(yīng)用,典型的 Linux 發(fā)行版缺少可靠地監(jiān)視和控制實時流程所需的確定性響應(yīng)。事實上,在 Linux 的默認操作模式中,即使是非常高優(yōu)先級的線程也可能無法搶占內(nèi)核。因此,如果高優(yōu)先級例程嘗試讀取傳感器、控制電機等,則“實時”例程可能需要等待不確定的時長。
幸運的是,Linux 內(nèi)核包括一個配置選項,名為 CONFIG_PREEMPT,就可以解決這個限制。此選項允許高優(yōu)先級例程搶占內(nèi)核,除內(nèi)核正在執(zhí)行螺旋鎖中的內(nèi)核線程等特殊情況外(受阻以等待資源)。在實踐中,確保可以搶占內(nèi)核,包括修改此配置項以外的其他步驟。開放源代碼社區(qū)已經(jīng)使用發(fā)布的 CONFIG_PREEMPT_RT 補丁集將 Linux 轉(zhuǎn)換為完全可預(yù)占的內(nèi)核。由于 Raspberry Pi Foundation 和 Pi 社區(qū)成員提供的資料齊全的程序,因此,這個補丁程序就會比較簡單又不直接,并且相對常規(guī)。
總結(jié)
盡管最近對已經(jīng)證明很難掌握的 Raspberry Pi Zero 開發(fā)板的關(guān)注很高,但是 Raspberry Pi 3 和 CM3 為工程師提供了一個更有吸引力的創(chuàng)建高性能系統(tǒng)的平臺。Pi 3 和 CM3 每個都具有四核處理器和兩倍于單核 Pi Zero 的可用板載 RAM。
就其本身而言,Pi 3 提供了一個更為強大的計算基礎(chǔ),可以利用大量符合 Pi 標準 40 引腳 GPIO 接口的可用擴展板。使用 CM3,開發(fā)人員即可獲得兼具 Pi Zero 的小尺寸以及 Pi 3 的性能優(yōu)勢的計算基礎(chǔ)。使用這些最新的 Pi 開發(fā)板、硬件擴展和現(xiàn)有的軟件庫,開發(fā)人員可以快速實施定制系統(tǒng),從而滿足不同的應(yīng)用需求。
-
處理器
+關(guān)注
關(guān)注
68文章
20255瀏覽量
252348 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7402瀏覽量
129325 -
定時器
+關(guān)注
關(guān)注
23文章
3368瀏覽量
123662
發(fā)布評論請先 登錄
PI3HDMI511A HDMI應(yīng)用信息解讀
Banana Pi BPI-CM6 – 一款與 Raspberry Pi CM4/CM5 載板兼容的 SpacemiT K1 RISC-V 系統(tǒng)模塊
Banana Pi BPI-CM6 – 一款與 Raspberry Pi CM4/CM5 載板兼容的 SpacemiT K1 RISC-V 系統(tǒng)模塊
三種開發(fā)工具的功能和優(yōu)勢
【作品合集】玄鐵Banana Pi BPI-RV2開發(fā)板測評
【匠芯創(chuàng)D133CBS KunLun Pi開發(fā)板試用體驗】1、開發(fā)板開箱及介紹
Banana Pi BPI-R4 Lite:新型單板計算機比 Raspberry Pi 5 更具優(yōu)勢
RUBIK Pi 3開發(fā)板與deepin 25操作系統(tǒng)完成適配
Analog Devices Inc. EVAL-CN0575-RPIZ開發(fā)板特性/應(yīng)用/框圖
【開源分享】:開源小巧的FPGA開發(fā)板——Icepi Zero
貿(mào)澤開售Raspberry Pi用于嵌入式和IIoT應(yīng)用的RP2350微控制器
如何讓 Raspberry Pi 煥發(fā)網(wǎng)絡(luò)新生機?
如何使用Raspberry Pi 3進行快速開發(fā)
評論