緣起
Realtek RTL8720DN 是一個具有 Wifi + Bluetooth 無線晶片, Wifi 且支援雙模 (802.11 a/b/g/n 1x1, 2.4GHz & 5GHz ) 和低功耗的 BLE 5。處理器內核採用 Dual processor core 設計 集成 ARM V8M Cortex-M33 (指令集相容於 Cortex-M4F) 及 ARM V8M Cortex-M23 (相容於 Cortex-M0+) 。 Wi-Fi 及 BT 是共用一組天線,所以在硬體設計上更為簡便。而 BW16 為 基於 RTL8720DN 所設計的 SOC 模組,將常用的引腳連接出來, 並使用 PCB 天線。使開發輕鬆。
小結
內核組成 KM4 Arm Cortex-M4 core @ 200 MHz 及 KM0 Arm Cortex-M0 core @ 20 MHz
WiFi 2.4G 及 WiFi 5G 協定 802.11 a/b/g/n 頻寬範圍 : 2.412-2.484GHz & 5.180-5.825GHz
- 支援 HT20/HT40 模式
- 支援低功耗式
- 支援 Bluetooth 5.0 LE , 頻寬範圍 :2.402GHz – 2.480GHz
- 工作模式 : AP , Station, AP/ Client
- WiFi 與 BT 共用一組天線
- 1 個 ADC
- 2 UART 介面
- 1 個 I2C
- 1 個 SPI
- 4 個 PWM
- 全部接腳都可成為 GPIO
為了更方便使用 RTL8720DN (BW16),因此我設計了 A1 PICO 開發版。
開發重點
1. 內建 USB 5V 可自複式保險絲。
因為做實驗難免會有誤接短路的問題,尤其是 USB 是直接連接電腦。雖然 USB Hub 也有相對應的保護,多層保護可以減少發生意外機率。
2. 電池連接口 JST 2.00mm 。
在很多應用是不方便連接固定電源,在應用上會更方便。若同時接入 USB 5V 會自動切換 USB 做為主要電源。
3. 因為要使用電池應用, 所以也特別挑選工作效率好的 LDO。使電池發揮最大的效能。預設電壓區間是 3.6V ~ 4.2V
4. 預裝 I2C 提升電阻,在應用於 I2C 時都需要提升電阻,有時臨時還真找不到 。現在只要將短路 pin 接上就好。
5. 支援 Auto flash 功能也是這次修改的重點, 感謝 jojoling 提供好用的程式,讓我可以搭順風車。
連接圖
UART 驅動程式
CH9102F
https://www.wch.cn/products/CH9102.html
CH9102F (本站下載點,不會更新)
電路圖
RTL8720DN(BW16) 加入 Arduino IDE
首先先將這個網址複製起來
https://github.com/ambiot/ambd_arduino/raw/master/Arduino_package/package_realtek_amebad_index.json
打開 Arduino IDE , 點開 File / Preferences
將網址貼上 紅框 處 , 然後點 OK 儲存
接著在 Tools / Board: / Boards Manager...
在 搜尋列直接輸入" ameba " 就會出現開發板資訊 , 在右側會有 Install 的 按鈕。 因為我的 Arduino IDE 安裝完成,所以出現不一樣字樣。 點 " Install " 開始安裝 會需要等待一些時間, 可以先去泡一杯咖啡再回來。
稍待片刻後,系統就會自動安裝完成。
在 Tools / Board: / Amaba ARM (32bit) Boards 裡, 應該會找到 RTL8720DN (BW16) 這個選項。
到這裡 安裝 RTL8720DN(BW16) 到 Arduino IDE 的部分已經做完了。
將開發板連接電腦 USB 並開啟 Arduino IDE 並選好 開發板名稱 及 COM Port 位置
溫馨提醒:
本開發板有 Auto flash 自動上傳功能, 請將 Auto Upload mode 設定為 Enable
測試 Blink 程式
int YelloLED = 9; //PA15
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(YelloLED, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(YelloLED, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(YelloLED, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
0 comments:
不接受新留言。