各位攻城獅好,由逐飛科技設(shè)計(jì)制作的全新的 IoT 開發(fā)板推出啦!這是一款基于恩智浦 LPC55S69 芯片設(shè)計(jì)的簡約而又不簡單的開發(fā)板,下面直接讓我們來看看這塊小小開發(fā)板都有些什么特別的地方吧!
一、LPC55S69 芯片怎么樣
首先來看看這個(gè)小板子的核心,了解下 LPC55S69 這顆芯片怎么樣。
LPC55S6x 家族是全球首款基于通用 Cortex-M33 的微控制器,并且它是第一款基于 40nm 工藝的 MCU,動(dòng)態(tài)功耗僅僅 32μA/MHz。采用 Armv8-M 架構(gòu)以及 TrustZone-M 和協(xié)處理器擴(kuò)展,性能和高級(jí)安全功能達(dá)到新水平。
它的內(nèi)核是雙核架構(gòu),由兩顆 Cortex-M33 組成。這里特別注意的是這兩顆內(nèi)核有大小之分,Core0 內(nèi)核是全功能的 Cortex-M33,而 Core1 則去除了 TrustZone、MPU、SAU、FPU、SIMD 等內(nèi)核增強(qiáng)的功能。Armv8-M 架構(gòu)允許客制化的協(xié)處理器,NXP 利用這一特性加入了 DSP 加速器 PowerQuad 和加密引擎 CASPER,分別從運(yùn)算和安全兩個(gè)角度顯著提升 MCU 本身的性能。
這款 MCU 運(yùn)行頻率高達(dá) 150MHz,擁有高達(dá) 640KB 的 FLASH,以及 320KB 的 SRAM。
1.1、安全性上:除了 TrustZone-M,還有 PRINCE 模塊對寫入到片上閃存的數(shù)據(jù)進(jìn)行實(shí)時(shí)加密,擁有 AES-256 加密 / 解密引擎、安全散列算法 (SHA1/SHA2) 模塊,可以通過專用 SRAM 上的芯片指紋提供物理不可克隆功能(PUF),還擁有隨機(jī)數(shù)生成器(RNG)、唯一的 128 位設(shè)備識(shí)別序列號(hào)(UUID)、安全通用 IO。
1.2、模擬外設(shè)上:
1.ADC 是這次 LPC 的 MCU 升級(jí)最大的地方,ADC 升級(jí)到 16 位 1M 采樣率,具有 5 個(gè)差分通道對(或 10 個(gè)單端通道)以及多個(gè)內(nèi)部和外部觸發(fā)器輸入,且支持 2 個(gè)獨(dú)立的轉(zhuǎn)換序列,同時(shí)擁有連接至 ADC 的內(nèi)置溫度傳感器;
2. 具有 5 個(gè)輸入引腳和外部或內(nèi)部基準(zhǔn)電壓的比較器;
同時(shí)通信接口上極為豐富:
1.8 組 FlexComm 接口,可以讓用戶靈活的配置得到最多 8 路串行接口(UART、I2C 和 SPI 任意組合,最多 8 個(gè))或者 4 組全雙工模式的 I2S 接口。
2. 一個(gè)獨(dú)立高速 SPI 接口,最高可運(yùn)行在 50MHz 的頻率,流暢刷一個(gè)小屏幕的 LCD 不再是夢想。
3.USB 接口一如以往的領(lǐng)先業(yè)界,一個(gè)高速 USB 和一個(gè)全速 USB 接口,均集成 PHY 以及支持主機(jī)和從機(jī)模式。
4.SDIO 接口也在以前的 LPC 基礎(chǔ)上做出了重大改進(jìn),安全的數(shù)字輸入輸出(SD/MMC 和 SDIO)卡接口, DMA SDIO 支持兩個(gè)卡。支持的卡類型為 MMC、SDIO 和 CE-ATA。支持 SD2.0 和 SR25。
1.3、數(shù)字外設(shè)上:
1.2 個(gè) DMA 控制器,DMA0 控制器,具有 23 個(gè)通道和多達(dá) 22 個(gè)可編程觸發(fā)器;DMA1 控制器,具有 10 個(gè)通道和 16 個(gè)可編程觸發(fā)器;
2.1 個(gè) CRC 引擎模塊,可使用支持 DMA 的 3 個(gè)標(biāo)準(zhǔn)多項(xiàng)式中的一個(gè)計(jì)算所提供數(shù)據(jù)的 CRC;
3. 最多 8 個(gè)通用 IO 可選為引腳中斷(PINT),由上升沿、下降沿或兩種輸入沿觸發(fā);
4. 兩組通用 IO 中斷(GINT)支持基于輸入狀態(tài)邏輯(AND/OR)組合的中斷;
1.4、并且定時(shí)器上還配備了:
1.5 個(gè) 32 位標(biāo)準(zhǔn)通用異步定時(shí)器 / 計(jì)數(shù)器,支持多達(dá) 4 個(gè)采集輸入和 4 個(gè)比較輸出,可選擇特定的定時(shí)器事件生成 DMA 請求;
2.1 個(gè) SCTimer/PWM,具有 8 個(gè)輸入和 10 個(gè)輸出函數(shù)(包括捕獲和匹配),輸入和輸出可引至或引自外部引腳,內(nèi)部引至或引自所選外設(shè),在內(nèi)部,SCTimer/PWM 支持 16 個(gè)捕獲 / 匹配,16 個(gè)事件和 32 個(gè)狀態(tài);
3.1 個(gè) 32 位實(shí)時(shí)時(shí)鐘(RTC), RTC 中的定時(shí)器可用于喚醒所有低功耗模式(包括深度節(jié)電模式),具有 1 ms 分辨率;
4.1 個(gè)多通道多速率 24 位定時(shí)器(MRT),可用于在多達(dá) 4 種可編程固定速率下重復(fù)生成中斷;
5.1 個(gè)窗口看門狗定時(shí)器 (WWDT),使用 1MHz 的 FRO 作為時(shí)鐘源;
6.1 個(gè)微節(jié)拍定時(shí)器,通過看門狗振蕩器運(yùn)行,可用于將器件從睡眠和深度睡眠模式中喚醒;
7.1 個(gè) 42 位自運(yùn)行 OS 定時(shí)器作為系統(tǒng)的連續(xù)時(shí)基,適用于任何低功耗的模式;
可謂外設(shè)豐富、功能強(qiáng)大,各位 MCU 玩家是不是想上手折騰一下了呢。
二、如何使用 IoT 主板快速入門
2.1、首先自然是硬件平臺(tái)
進(jìn)入正題,首先我們需要一個(gè)配套的開發(fā)硬件,這里就需要 IoT 開發(fā)板上線了!這個(gè)開發(fā)板只有 54*78.75mm 的尺寸大小,比掌心還要小一點(diǎn)。雖然體積小巧,但該有的接口一個(gè)不少,接口形式豐富,涵蓋了所有的片上功能所需引腳。
兩個(gè) Type-C 類型的全 / 高速 USB 接口,MICRO SD 形式的短體卡座一個(gè),6 個(gè) FlexComm,UART、I2C 和 SPI 任意組合,按需分配復(fù)用。
上述都是固定的接口,不能自行 DIY 接口接線,需要可以自定義的,功能又完備的接口?那擴(kuò)展的 Arduino 接口怎么樣呢?
該 IoT 開發(fā)板拓展的 Arduino 接口上囊括了 GPIO、ADC、PWM、USART、I2C、高速 SPI 功能,不僅可以接入配套傳感器、自行拓展接線,也能接入部分 Arduino 接口的外設(shè)與器件,DIY 性能 MAX。
豐富的接口搭配上配套的傳感器(持續(xù)更新增加中)等外設(shè),就能涵蓋絕大多數(shù)的學(xué)習(xí)、原型階段開發(fā)的需求。
2.2、當(dāng)前配套傳感器、模塊(后續(xù)也會(huì)持續(xù)新增添加):
1. 氣壓計(jì) MS5611 模塊,一款高精度氣壓傳感器,量程 10~1200mbar,精確度(25℃,750mbar)±1.5mbar,電源 1.8V~3.6V;
2. 溫濕度計(jì) SHT31 模塊,量程 0~100%RH/-40~125℃(精度±2% RH/±0.2℃),電源 2.15V-5.5V,能耗 4.8μW (在 2.4 V 時(shí)低重復(fù)性, 1 次 / 秒);
3. 激光 TOF 測距 VL53L0X 模塊,絕對范圍 2M,精度(23℃電壓 2.8V 下不含蓋板玻璃測試)典型偏移為±10mm,電源電壓 2.6V~3.5V;
4.2.4 寸的 TFT 彩色屏幕,以及可選的配套 FT6336 驅(qū)動(dòng)的電容觸摸屏,支持最多兩點(diǎn)觸控;
5.ESP8266,應(yīng)用比較廣泛、功能也比較齊全的一款 WIFI 模塊。
重點(diǎn)介紹:這塊開發(fā)板上有一個(gè)全新的接口形式:FlexComm 接口,這是為了統(tǒng)一傳感器接口而定義的一種新的 2*5pin 接口,與 LPC 系列的 FlexComm 外設(shè)對應(yīng),可以復(fù)用成 UART、I2C、SPI 或者 I2S 功能。
接口具有防呆設(shè)計(jì),即使插反也不會(huì)導(dǎo)致傳感器損壞,含有 5V 以及 3.3V 供電接口,GND 對腳設(shè)計(jì)。上述的配套硬件的傳感器皆為使用 FlexComm 接口設(shè)計(jì),可以直接插在任意一個(gè) FlexComm 接口上使用。
使用這個(gè)接口,統(tǒng)一外設(shè)接口形式,設(shè)計(jì)時(shí)可以根據(jù)不同需求進(jìn)行定制,這樣可以將傳感器設(shè)計(jì)成 Plug-in Card 形式,對于可拓展性、復(fù)用性與升級(jí)系統(tǒng)有相當(dāng)良好的支持。
這個(gè)接口目的是達(dá)成傳感器的接口統(tǒng)一,從而向著可以實(shí)現(xiàn)傳感器自動(dòng)識(shí)別的方向?qū)崿F(xiàn)真正意義上的統(tǒng)一性與標(biāo)準(zhǔn)化。試想,如果可以實(shí)現(xiàn)升級(jí)項(xiàng)目產(chǎn)品而不用在硬件傳感器連接上改動(dòng),只用替換掉器件升級(jí)產(chǎn)品固件即可,甚至可以進(jìn)一步實(shí)現(xiàn)固件不變,產(chǎn)品固件自動(dòng)識(shí)別傳感器進(jìn)行數(shù)據(jù)采集,是不是很有吸引力。
2.3、開源的軟件資料
IoT 主板可以直接使用 NXP 官方 SDK 進(jìn)行學(xué)習(xí)、開發(fā)哦,只需要按照 IoT 主板引腳進(jìn)行細(xì)微調(diào)整即可。像 USB、SD-Card 這類的較為復(fù)雜的接口,雙核協(xié)作以及各類安全性的外設(shè)與模塊的使用,官方的 SDK 已有完善的 Demo 和說明,同時(shí)相關(guān) SDK 的問題還能在恩智浦社區(qū)發(fā)帖提問哦。
當(dāng)然,為了更方便的使用這塊開發(fā)板,逐飛科技精心編寫了“逐飛”風(fēng)格的基于官方 SDK 進(jìn)行二次開發(fā)的接口庫,封裝了常用的一部分外設(shè)驅(qū)動(dòng),并附上了說明注釋詳盡的 Demo,同時(shí)也對配套硬件有完善的驅(qū)動(dòng)庫,以及使用的 Demo。已經(jīng)包含的外設(shè)接口有 ADC、CTimer、GINT、PINT、GPIO、HSPI、FlexComm、SCTimer、UTICK 定時(shí)器,基本覆蓋了 IOT 主板上接口的所有功能需求。
Gitee 開源鏈接:https://gitee.com/seekfree/LPC55S69_Library
說明:開源軟件資料主要針對芯片的常用模塊進(jìn)行編寫,更適合配合逐飛的 LPC55S69 核心板進(jìn)行擴(kuò)展開發(fā)使用,IoT 部分的應(yīng)用 demo 需要聯(lián)系逐飛科技獲取相關(guān)軟件資料。
封裝完成的接口調(diào)用方便簡潔,例如 Ctimer 的調(diào)用,三種功能初始化:
//BOARD_InitPins();?? ??? ??? ??? ??? ??? ??? ??? ?// 引腳初始化
pin_param_t?config;?? ??? ??? ??? ??? ??? ??? ??? ?//?管腳配置結(jié)構(gòu)體??
zf_gpio_get_default_config(&config);?? ??? ??? ??? ?//?獲取默認(rèn)設(shè)置??
zf_gpio_init(PIO1,?PIN03,?&config,?PIN_DIR_OUT);?? ?//?默認(rèn)輸出初始化一個(gè)測試用?LED??
config.param_bit.pin_param_func?=?PIN_FUNC_3;?? ??? ?//?切換到?FUNC3??
zf_gpio_init(PIO1,?PIN02,?&config,?PIN_DIR_OUT);?? ?//?CT0-MAT3?PWM?輸出??
zf_gpio_init(PIO1,?PIN15,?&config,?PIN_DIR_IN);?? ?//?CT_INP07_P1_15?輸入??
//?定時(shí)器模式初始化?設(shè)置?周期通道?頻率
zf_ctimer_timer_init(CTM_0,?CTM_CH_0,?10000);
zf_ctimer_pwm_setup(CTM_0,?CTM_CH_3);?? ??? ??? ??? ?//?啟動(dòng)?PWM??
zf_ctiemr_start(CTM_0);?? ??? ??? ??? ??? ??? ??? ?//?啟動(dòng)定時(shí)器??
//?初始化為輸入捕獲
zf_ctimer_capture_init(CTM_1,?CTIMER_TIMER_MODE_CAP_RISING_EDGE,?CT_INP07_P1_15);?
zf_ctiemr_start(CTM_1);?? ??? ??? ??? ??? ??? ??? ?//?啟動(dòng)定時(shí)器??
//?定時(shí)器模式初始化?設(shè)置?周期通道?頻率
zf_ctimer_timer_init(CTM_2,?CTM_CH_0,?100);
zf_ctimer_intterupt_enable(CTM_2,?ctiemr2_handler);//?設(shè)置定時(shí)器中斷??
zf_ctiemr_start(CTM_2);?? ??? ??? ??? ??? ??? ??? ?//?啟動(dòng)定時(shí)器??
調(diào)用接口如上即可完成 Ctimer 0 的 PWM 輸出、Ctimer 1 的輸入捕獲以及測試用 LED 引腳的初始化。BOARD_InitPins 函數(shù)為兼容 MCUXpresso Config Tools 軟件輸出的引腳配置文件的接口,用戶可以使用 MCUXpresso Config Tools 進(jìn)行快捷的引腳配置,然后直接導(dǎo)入到工程即可。
并使能 Ctimer 0 的輸出通道 3 產(chǎn)生一個(gè) 10KHz 的 PWM 輸出;啟動(dòng) Ctimer 1 的輸入通道 7 為上升沿信號(hào)輸入捕獲;并且使 Ctimer 2 產(chǎn)生一個(gè)頻率為 100Hz 的中斷觸發(fā),并且將中斷處理指向?yàn)橛脩糇远x的中斷服務(wù)函數(shù) ctimer_handler。
而傳感器、外設(shè)等的調(diào)用同樣簡單:
uint32_t data;
BOARD_InitPins();?? ??? ??? ??? ??? ??? ??? ?// 引腳初始化
vl53l0x_init(IIC_DEMO);?? ??? ??? ??? ??? ??? ?// VL53L0X 初始化 IIC
vl53l0x_start_continuous(IIC_DEMO,?100);?? ??? ?// 設(shè)置采樣間隔時(shí)間 ms 開始連續(xù)測距
while(1)
{
?? ?data = vl53l0x_read_range_continuous_millimeters(IIC_DEMO);?
?? ?PRINTF("nvl53l0x_read: %d.%dcm.", data_buffer/10, data_buffer%10);
?? ?delay_ms(1000);
}
使用 MCUXpresso Config Tools 進(jìn)行快捷的引腳配置,導(dǎo)入到工程,然后直接調(diào)用 BOARD_InitPins 完成 IIC 引腳的配置,之后調(diào)用獲取數(shù)據(jù)的接口即可。
同時(shí),我們還在開源庫中移植了 RT-Thread,并提供了一個(gè)移植 Demo 供參考學(xué)習(xí)。RT-Thread 使用 finsh 控制臺(tái)插件,支持 MSH 命令行操作,對于調(diào)試、log 管理、消息查詢是一大利器。
2.4、針對 IOT 主板的軟件接口庫
逐飛科技還為 IoT 主板配備了專門的的 IoT 庫,能完全適配各個(gè)物理接口,在庫中有軟件接口實(shí)現(xiàn),并且有非常詳細(xì)的傳感器 Demo 說明,用來入門相當(dāng)省時(shí)省力哦!同時(shí)還可以用作參考,深入對 SDK 接口與芯片的理解。(Tips. 配套 IoT 庫會(huì)持續(xù)更新哦)
舉例說明:同樣的 Ctimer 輸出 PWM,會(huì)有什么不一樣呢?來看一下:
//?先設(shè)置頻率?因?yàn)槊總€(gè)?CTIMER?模塊只能有一個(gè)頻率
arduino_ctimer_pwm_set_freq(ARDUINO_PWM_CTM0,?10000);
//?再設(shè)置管腳?對齊方式有效電平無法選擇?對應(yīng)管腳請看主板背面絲印
arduino_pwm_ctimer_init(ARDUINO_PIN_D02);
這里并沒有引腳初始化相關(guān)的語句,就已經(jīng)完成了所有的配置,可以輸出 PWM 了。接下來再看看 ADC 采樣:
int?main(void)
{
????//?IOT?主板初始化 設(shè)置時(shí)鐘?150Mhz?并且開啟?USART7?的 debug 輸出
IoT_board_init(CLOCKPLL150M,?BOARD_USART7_DEBUG_ENABLED);
????//?初始化?ADC?采集管腳
arduino_adc_sample_default_init(ARDUINO_PIN_A01);
//?初始化?ADC?差分對管腳
????arduino_adc_diff_default_init(ARDUINO_ADC_DIFF_A2_A3);?
????while?(1)
{
//?采集?ADC?電壓
?????????PRINTF("nADC?get?data:?%d.",?arduino_adc_get_voltage(ARDUINO_PIN_A01));?
//?采集?ADC?差分電壓
?????????PRINTF("nADC?get?diff_data:?%d.",?arduino_adc_get_diff_voltage(ARDUINO_ADC_DIFF_A2_A3));
????????delay_ms(1000);
????}
}
這里通篇沒有引腳初始化,僅有對應(yīng) IoT 主板上的引腳編碼,直接調(diào)用 IoT 庫的功能接口,即完成了所有的初始化,可以正常進(jìn)行使用了。對于開發(fā)者來說,是不是方面了很多呢,下圖是庫函數(shù)實(shí)現(xiàn)的基本邏輯,供參考理解。
該 IoT 開發(fā)庫適用于快速上手、快速入門,可以在較短的時(shí)間內(nèi)實(shí)現(xiàn)開發(fā)效果與展現(xiàn)運(yùn)行現(xiàn)象。同時(shí),這也是基于逐飛 LPC55S69 開源庫以及 SDK 來封裝實(shí)現(xiàn)的,這既可以說是針對 IoT 主板的 IoT 接口庫,也可以說是為了實(shí)現(xiàn) FlexComm 與 Arduino 接口統(tǒng)一而封裝的接口。
IoT 庫封裝了繁瑣的 IO 分配、初始化部分,將各個(gè)功能外設(shè)的接口調(diào)用、功能處理清晰化。用戶可以從 IoT 庫開始,快速體驗(yàn)到 IoT 主板的功能的強(qiáng)大與便捷,再研究學(xué)習(xí)內(nèi)部驅(qū)動(dòng)與結(jié)構(gòu),進(jìn)一步應(yīng)用于產(chǎn)品開發(fā),循序漸進(jìn)。
三、為什么叫 IOT 開發(fā)板?
既然叫 IoT 開發(fā)板,自然是要奔著 IoT 開發(fā)方向前進(jìn)的!這塊 IoT 主板的目標(biāo)就是一塊綜合性的 IoT 開發(fā)套件的基礎(chǔ),也就是可以通過 FlexComm 接口拓展、替換、升級(jí)功能的 IoT 項(xiàng)目應(yīng)用的目的。
舉個(gè)例子,在這塊主板上,使用一個(gè) FlexComm 來接入 ESP8266 模塊,用以與云服務(wù)器通信,此時(shí)可以通過云端 OTA 支持進(jìn)行空中下載升級(jí)固件,在需要升級(jí)硬件傳感器時(shí),僅需要升級(jí)固件并替換、接入通用 FlexComm 接口的傳感器即可。這只是一個(gè)簡單的例子,具體的應(yīng)用可以根據(jù)實(shí)際需求進(jìn)行創(chuàng)新拓展。
IoT 庫當(dāng)前編入了一個(gè)簡易的 MQTT 協(xié)議處理,可用于連接物聯(lián)網(wǎng)云端服務(wù)器,可用于對接 ALI 云,ALI 云是當(dāng)前實(shí)用性強(qiáng)、適用范圍廣、上手也比較簡單迅速的一個(gè)選擇,相關(guān)資料支持與配套環(huán)境都相對齊全。
//------------------------------------------------------------------------
//??@brief??????與服務(wù)器建立?TCP?連接并與對應(yīng)設(shè)備完成對接??
//??@param??????message?????????設(shè)備三元組??
//??@return?????bool????????????是否成功與服務(wù)器建立?TCP?連接并對接到對應(yīng)設(shè)備??
//------------------------------------------------------------------------
bool?mqtt_aliyun_init?(aliyun_device_message_t?*message)
{
????//?設(shè)置?FlexComm_index
????aliyun_device.Index?=?message->Index;
????//?設(shè)置?productkey
????mqtt_set_productkey(message->productkey,?message->productkey_len);
????//?設(shè)置?devicename
????mqtt_set_devicename(message->devicename,?message->devicename_len);
????//?設(shè)置?devicesecre
????mqtt_set_devicesecre(message->devicesecre,?message->devicesecre_len);
? ? //?初始化服務(wù)器連接參數(shù)?連接服務(wù)器
????if(!mqtt_aliyun_tcp_init())
????????return?false;
????return?true;
}
那怎么入門物聯(lián)網(wǎng)呢?IoT 庫中提供了一個(gè)簡易的 ALI 云連接通信 Demo,向各位有意開始學(xué)習(xí)、準(zhǔn)備實(shí)踐的客戶提供一個(gè)入門參考,附有說明文檔。
aliyun_device_message_t?aliyun_init_t;?? ??? ??? ??? ??? ?//?新建一個(gè)參數(shù)結(jié)構(gòu)體
aliyun_init_t.Index?=?IOT_FLEXCOMM_0;?? ??? ??? ??? ??? ?//?指定使用的?FlexComm
memset(aliyun_init_t.productkey,?0,?32);?? ??? ??? ??? ?//?清空?productkey
memcpy(aliyun_init_t.productkey,?"a13WwZVmHl6",?11);?? ?//?寫入?productkey
aliyun_init_t.productkey_len?=?11;?? ??? ??? ??? ??? ??? ?//?寫入?productkey?長度
memset(aliyun_init_t.devicename,?0,?32);?? ??? ??? ??? ?//?清空?devicename
memcpy(aliyun_init_t.devicename,?"device_demo",?11);?? ?//?寫入?devicename
aliyun_init_t.devicename_len?=?11;?? ??? ??? ??? ??? ??? ?//?寫入?devicename?長度
memset(aliyun_init_t.devicesecre,?0,?32);?? ??? ??? ??? ?//?清空?devicesecre
//?寫入?devicesecre
memcpy(aliyun_init_t.devicesecre,?"af27d6b2368ce1a10fa95f7762d414a6",?32);?
aliyun_init_t.devicesecre_len?=?32;?? ??? ??? ??? ??? ?//?寫入 devicesecre 長度??
rt_kprintf("aliyun_init?start.rn");?? ??? ??? ??? ??? ?//?RTT?控制臺(tái)輸出?log??
if(!mqtt_aliyun_init(&aliyun_init_t))?? ??? ??? ??? ??? ?//?ali?云連接??
{??
????rt_kprintf("aliyun_init?error.rn");?? ??? ??? ??? ?//?RTT?控制臺(tái)輸出?log??
????while(1);??
}
rt_kprintf("aliyun_init?success.rn");?? ??? ??? ??? ?//?RTT?控制臺(tái)輸出?log?
?
怎么樣,各位攻城獅,看小編嘚吧嘚了這么多,是否想要親自上手把玩一下呢? 購買渠道某寶,大家自行搜索即可,購買可享 NXP 聯(lián)合推廣價(jià)。