AMB23 Getting Started Guide
CONTRIBUTED BY: 董勝源 (mailto:tung79107910@gmail.com )
一、RTL87系列產品與型號區分如下:
二、RTL8722DM特性:
支持 Arduino IDE可掛載部份 Arduino的擴展板。
雙Arm®的CPU:內含串列線偵錯器(SWD: Serial Wire Debug)、巢狀向量中斷控制器(NVIC: Nested Vectored Interrupt Controller)、不可遮蔽中斷(NMI: Non-maskable Interrupt)及系統節拍計時器(System tick timer),可共同使用SRAM及周邊設備。
(1) 低功耗的Cortex-M23,內含16KB指令快取(I-Cache)及4KB資料快取(D-Cache)記憶體,最高工作頻率為20MHz,其性能相當於Cortex-M0。(2) 高性能的Cortex-M33,內含浮點運算器(FPU: floating point unit)、數位信號處理(DSP: Digital signal processing)、 三階管道的TrustZone-M、記憶體保護單元(MPU: Memory Protection Unit)、安全指令、32-bit硬體整數除法、 32KB指令快取(I-Cache)及4KB資料快取(D-Cache)記憶體,最高工作頻率為200MHz。其性能相當於Cortex-M4。超大容量記憶體:RTL8722DM記憶體分配,如下:
(1) KM0 CPU內部記憶體專用於Cortex-M23,最高128K-Byte的指令ITCH ROM、32K-Byte的資料DTCH ROM、64K-Byte SRAM及1K-Byte的SRAM用於在省電模式時可以保留資料,最高工作頻率為20MHz。(2) KM4 CPU內部記憶體專用於Cortex-M33,最高768K-Byte的指令ITCH ROM、96K-Byte的資料DTCH ROM、128K-Byte的、512K-Byte的SRAM工作頻率200MHz(3) 外部擴展PSRAM,記憶體容量4M-Byte,工作頻率50MHz。(4) 外部擴展Flash,最高2/4M-Byte(32M-bit),可藉由串列介面SPI/DSPI/QSPI控制及線上燒錄(ICP:In-Circuit Programming)來存取程式。(5) 外部擴展DDR,可外接8-bit的DDR SDRAM(Double Data Rate SDRAM)。(6) 周邊直接記憶體存取(GDMA:Peripheral Direct Memory Access),可直接令周邊設備與KM0及KM4記憶體存取大量的資料,如語音及影像資料等。豐富的I/O周邊設備,可應用於各種物聯網控制場合:
(1) GPIO腳:PA0~PA31(無PA3、PA29)及PB0~PB31(無PB8~PB11、PB24~PB27)共54支腳。 每支腳輸入時可配置內含提升(pull-up)或下降(pull-down)電阻,且均具有外部中斷(GPIOINT)功能, 觸發條件可設定為上升緣(rising)、下降緣(falling)或雙邊緣(both)。(2) 通用非同步收發傳輸器(UART: Universal Asynchronous Receiver/Transmitter): 有三組高速HS_UART0及低功耗(LP_UART0、LP_UART1),可外接UART模組,如USB、藍牙、Wi-Fi、GPS等。(3) 串列周邊介面(SPI: Serial Peripheral Interface):有兩組高速HS_SPI0及HS_SPI1,可外接SPI晶片與模組,如Flash、繪圖型LCD等。(4) 積體匯流排電路(I²C: Inter-Integrated Circuit):有一組低功耗LP_I2C0,可外接I2C 晶片與模組,如EEPROM、LCD等。(5) 通用串列介面(USI: Universal SerialInterface):可設定為高速HS_USI_UART、HS_USI_SPI或HS_USI_I2C。(6) 紅外線(IR: Infra Ray):可外接紅外線感測器。(7) 單線One wire(SGPIO)介面:可藉由一條信號線來進行串列資料傳輸,來控制串列元件。(8) 計時器(Timer):含基本(BASE)計時(HS_TIM0 ~ HS_TIM3 & LP_TIM0 ~LP_TIM3)、PWM計時器(HS_TIM5 &LP_TIM5)及脈衝(Pulse)計時器(HS_TIM4 & LP_TIM4)。(9) 脈波寬度調變(PWM:Pulse Width Modulation)輸出:有17通道(PWM1~17),藉由方波的佔空比(duty)來進行功率控制,如LED亮度、馬達轉速等。(10) 即時時脈(RTC: Real Time Clock):關機時,可使用電池及石英晶體32.768KHz,提供年、月、日、週、時、分、秒的萬年曆與鬧鐘計時功能。(11) 類比數位轉換器(ADC: Analog-to-Digital Converter):有7通道(A0~A6), 最高精度為12-bit,但平時精度為10-bit,可將類比電壓0~3.3V轉換為數位資料0~1023(10-bit)或0~4095(12-bit)。(13) 音頻編解碼器(I2S: Inter-IC Sound或Integrated InterchipSound): 是IC間傳輸數位音訊資料的一種介面標準,常用於CD等音頻信號處理。(14) 安全數位介面(SD: Secure Digital)與高速SDIO,可外接SD記憶卡。(15) 通用序列匯流排(USB:Universal Serial Bus):為USB 2.0可設定為HS/FS/LS模式,具有host(主控制器)或device(裝置)功能。(16) 按鍵掃描:最多可使用16支 GPIO腳來進行8*8按鍵掃描。(17) 觸摸按鍵:可連接4通道電容式觸摸感測器。(18) LCD面板控制器:具有8-bit、16-bit及RGB模式控制,可連接TFT(Thin Film Transistor)彩色LCD。內含最新的無線技術:雙頻Wi-Fi(2.4GHz/5GHz)和低功耗藍牙(BLE5)。
超低功耗,適合物聯網應用。
最新的高安全性架構,附帶安全啟動。
全方位便捷的開發套件,可從IAR/GCC/Arduino軟體SDK入手。
應用領域:可以連接LED、開關、壓力計、濕度計、PM2.5粉塵感測器等電子元件,由Ameba所收集的資料可以通過Wi-Fi無線上傳,可應用於物聯網範圍如下:
(1)智能家居(2)智慧城市(3)工業物聯網(4)物聯網中心/網關(5)智能玩具(6)Wi-Fi音頻/娛樂設備(7)遊戲操縱桿/Wi-Fi遙控器
三、RTL8722DM相關電路板介紹:有RTL8722DM及RTL8722DM_MINI比較如下表所示:
圖1-(a) RTL8722DM_MINI電路板正面圖
圖1-(b) RTL8722DM_MINI電路板背面圖
RTL8722DM_MINI電路板的GPIO接腳有D0~D22共23支腳,均可作為外部中斷(INT)及兼具各種特殊功能接腳,如下表所示:
RTL8722DM_MINI內含實習電路,如下:
(1) LED電路:LED1藍(PA9),LED2綠(PA10),輸出高電位(1)時亮。(2) User按鍵開關(SW2):Button(PA20),未按鍵時輸入為0,按鍵時輸入為1,具有防止機械彈跳電路。(3) 麥克風(MK1):MIC1_P(PA4)及MIC1_Bias(PA0)。(4) 耳機(J4):左聲道AOUTP_L(PB31)及右聲道AOUTP_R(PB29)(5) USB轉UART(CON3):插入Micro USB埠提供+5V電源,轉換成工作電壓+3.3V,經FT232提供虛擬UART連接MCU的接腳FT_UART_RX(PA7)及FT_UART_TX(PA8),來燒錄程式與UART傳輸。(6) Download(SW1):連接FT_UART_RX(PA7),SW1按下再重置(Reset)會進入燒錄功能。(7) Reset(S1):按下時為重置(Reset)動作。(8) Host USB(CON1):連接HSDP(PA26)及HSDM(PA25)。(9) Micro SD卡(CON2):SD_D1(PA23)、SD_D0(PA22)、SD_CLK(PA21)、SD_CMD(PA20)、SD_D3(PA19)、SD_D2(PA18),SD_PWR_EN(PA20)RTL8722DM_MINI程式燒錄操作:
進入下載模式:按SW1(Download)按S1(Reset)鍵放開S1(Reset)鍵放開SW1(Download),即可進入Download(下載)模式。
允許燒錄程式,燒錄程式完畢。
按S1(Reset)鍵放開S1(Reset)鍵進入執行模式。
四、RTL8722DM_MINI的Arduino IDE開發環境:
首先使用Micro USB經CON3將RTL8722DM_MINI連接到電腦:
如果是第一次將RTL8722DM_MINI連接電腦,會自動安裝USB驅動程式(FT232),在裝置管理員顯示連接埠COM編號(如COM5):
設定Arduino IDE環境:
(1) 必須執行Arduino IDE的1.8.1以後版本,才可以使用Arduino IDE在RTL8722DM上開發應用程式,(2) 打開Arduino IDE的“偏好設定“,如下:(3) 並將以下網址複製到“額外的開發板管理員網址”欄位: https://github.com/ambiot/ambd_arduino/raw/master/Arduino_package/package_realtek.com_RTL8722DM_MINI_index.json(4) 選擇“工具”->“開發板”->“開發板管理員”:(5) 在“開發板管理員”用RTL8722DM來尋找及點擊“安裝”,Arduino IDE會自動開始下載RTL8722DM_MINI所需的檔案與範例程式。(6) 開始在網路下載RTL8722DM_MINI所需的檔案,包括軟體開發套件(SDK: Software Development Kit)及範例程式:(7) 選擇選擇RTL8722DM_MINI作為開發板:同時會加入各種範程式,包括RTL8722DM_MINI的範例程式(Ameba*****)。測試GPIO輸出範例:RTL8722DM_MINI的GPIO接腳,如下:
(1) 開啟內部範例程式(Blink):(2) LED_BUILTIN預定為LED1(藍),可改為LED_B(LED1藍)、LED_G(LED2綠)或0~22(D0~D22)。不過改為PA_0~PA_31及PB_0~PB_7雖然編譯正確,但無輸出。(3) RTL8722DM_MINI程式燒錄操作順序:(a)按SW1(Download),(b)按、放S1(Reset)鍵,(c)放開SW1(Download)鍵等待燒錄程式,燒錄完畢(d)按、放S1(Reset)鍵開始執行程式。如下圖所示:(4) 編譯並上傳:在底下視窗顯示編譯及上傳結果,如下:測試GPIO輸入與輸出範例:由按鍵開關(PUSH_BTN)控制LED_G(綠),如下圖所示:
測試ADC範例:RTL8722DM_MINI的ADC接腳有A0~A6,如下圖所示:
測試呼吸燈範例:RTL8722DM_MINI的PWM接腳,以D9(PWM)為例,如下圖所示:
開啟內部範例程式(Fade):其中9(D9)外接LED,執行時可觀察呼吸燈的動作,如下所示:
在ARDUINO內建範例,配合RTL8722DM_MINI接腳可修改的名稱如下表所示:
Category |
Name |
Comment |
Remarks |
---|---|---|---|
01. Basics |
AnalogRead Serial |
Connect potentiometer to 3.3V. |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
Bare Minimum |
|||
Blink |
Pin LED_BUILTIN sets to LED_B |
Onboard LEDs options LED_B and LED_G. (blue and green) |
|
DigitalRead Serial |
Onboard button PUSH_BTN. |
||
Fade |
Replace “led = 9;” by a PWM pin (D4, D5, D7, D12, D13, D14, D17, D20, or D21). e.g. “led = 4;” |
||
ReadAnalog Voltage |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
||
02. Digital |
BlinkWitout Delay |
The onboard blue LED (LED_B) has been used. |
Onboard LEDs options LED_G. |
Button |
Onboard LEDs options LED_B and LED_G. Onboard button PUSH_BTN. |
||
Debounce |
Onboard LEDs options LED_B and LED_G. Onboard button PUSH_BTN. |
||
DigitalInput Pullup |
Onboard LEDs options LED_B and LED_G. |
||
StateChange Detection |
Onboard LEDs options LED_B and LED_G. Onboard button PUSH_BTN. |
||
toneKeyboard |
Replace “tone(8, notes[thisSensor], 20);” by a PWM pin (D4, D5, D7, D12, D13, D14, D17, D20, or D21). e.g. “tone(21, notes[thisSensor], 20);” |
||
toneMelody |
|||
tone Multiple |
|||
tonePitch Follower |
|||
03. Analog |
AnalogIn OutSerial |
Replace “analogOutPin = 9;” by a PWM pin (D4, D5, D7, D12, D13, D14, D17, D20, or D21). e.g. “analogOutPin = 4;” |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
AnalogInput |
Onboard LEDs options LED_B and LED_G. ADC pin reading voltage range 0 to 3.3V. |
||
Analog Write Mega |
Use PWM pins D4, D5, D7, D12, D13, D14, D17, D20, or D21. |
||
Calibration |
Onboard LEDs options LED_B and LED_G. Onboard button PUSH_BTN. ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
||
Fading |
Replace “ledPin = 9;” by a PWM pin (D4, D5, D7, D12, D13, D14, D17, D20, or D21). e.g. “ledPin = 4;” |
||
Smoothing |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
||
04. Communication |
ASCIITable |
||
Dimmer |
Onboard LEDs options LED_B and LED_G. |
||
Graph |
Connect potentiometer to 3.3V. |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
|
Midi |
Use Serial1 and pin D18, or use Serial2 and pin D1. |
||
MultiSerial |
|||
Physical Pixel |
Onboard LEDs options LED_B and LED_G. |
||
ReadASCII String |
Use PWM pin for LED (D4, D5, D7, D12, D13, D14, D17, D20, or D21). |
||
SerialCall Response |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
||
Serial CallResponse ASCII |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
||
SerialEvent |
|||
SerialPa ssthrough |
Serial options, Serial1 or Serial2. |
||
VirtualColor Mixer |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
||
05. Control |
Arrays |
Use pins D1, D2, D3, D4, D5, D6. |
|
ForLoop Iteration |
Use pins D1, D2, D3, D4, D5, D6. |
||
IfStatement Conditional |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. Onboard LEDs options LED_B and LED_G. |
||
switchCase |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
||
switchCase2 |
Use pins D1, D2, D3, D4, D5, D6. |
||
WhileStatement Conditional |
Replace “ledPin = 9;” by a PWM pin (D4, D5, D7, D12, D13, D14, D17, D20, or D21). e.g. “ledPin = 4;” |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
|
06. Display |
barGraph |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
|
RowColumn Scanning |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
||
07. Strings |
Character Analysis |
||
String Addition Operator |
|||
String Append Operator |
|||
StringCase Changes |
|||
String Characters |
|||
String Comparison Operators |
ADC pin options A0, A1, A2, A3, A4, A5 and A6. ADC pin reading voltage range 0 to 3.3V. |
||
String IndexOf |
|||
String Length |
|||
StringLength Trim |
|||
String Replace |
|||
String StartsWith EndsWith |
|||
String Substring |
|||
String ToInt |