谈谈智能穿戴设备最火主控芯片NRF51422/NRF51822的开发感受
生活随笔
收集整理的這篇文章主要介紹了
谈谈智能穿戴设备最火主控芯片NRF51422/NRF51822的开发感受
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在接手一個nRF51822的項目,找到一篇文章,寫得很有意思,總結非常通俗易懂,于是轉過來了。
文章出處:http://blog.sina.com.cn/s/blog_9fff1f140102w87s.html
最近一年時間一直在做一個比較高端的運動設備的傳感器——自行車功率計的開發,主控芯片自然選的是當前最火功能最強大的智能穿戴設備的SOC芯片NRF51422,跑藍牙4.0和ANT+用于無線數據傳輸。經過這一年的折騰,基本算比較熟悉了,今天抽空總結總結對這款芯片的感受。
來個實物圖~~
首先先大體介紹下這款芯片情況:內核:ARM Cortex M0主頻:16MHz內存:16/32KB閃存:128/256KB外設:UART,IIC,ADC,TIMER,SPI,RADIO,RTC,GPIOTE,TEMP,RTC封裝:48PIN QFN,也有超小超小的CSP封裝的
從硬件上來看,基本就是一款自帶2.4GHz射頻無線收發器的MCU罷了。而主要特殊之處還是在軟件上面,廠商提供了一套完善的藍牙,ANT協議的處理代碼,而這部分預先編譯好,和用戶應用部分程序分別燒錄在芯片不同位置,彼此之間通過軟件中斷進行通信。相比于TI的CC254X系列提供源碼和用戶代碼一起編譯而言,這種方式更簡潔,不容易出錯,基本上協議棧程序和用戶應用程序,雖然運行在一個處理器上,但基本處于類似井水不犯河水這種情況,無論是學習還是開發調試都帶來了非常巨大的便捷,也無怪于成為目前最火熱的智能可穿戴設備的主控SOC。
今天呢就主要講講硬件相關部分的感受~~~
首先先上Summary:1、DCDC真有用,不是搞笑的2、功耗控制略菜,要么淺睡,要么休眠啟動就復位洗腦了3、外設和端口連接可以隨意映射,麻麻再也不用擔心我布局布線啦4、時鐘體系8051feel,少掛不少腦細胞5、各種外設易用功能少,寄存器配置傻瓜型,研發狗之友6、定時器略菜,實時時鐘調試器管不住,調試時候會坑成狗7、IIC靜態功耗有1mA,1mA,1mA!!不用趕緊關8、溫度外設有點搞笑的.......遠看高端而已
供電:和一般ARM Cotex M系列MCU差不多,都是1.8V~3.3V醬紫。也就是對于CR2032這種最常用紐扣電池而言是可以直接供電的,如果使用1節干電池或者可充電鋰電池,就需要外圍穩壓芯片來升降壓了。芯片實際內核工作電壓就是1.8V。比較特殊的在于這款芯片自己具有DCDC,即開關式穩壓器,僅需外接一個電感一個電容就可以了。這個可以大大提高電源效率,對于寸電寸金的可穿戴智能設備而言是非常友好的一個設計。不過捏,很多人可能都沒注意,這個DCDC其實僅能給片內的模擬部分提供電能,并且僅在無線收發器工作時候才開啟,數字部分仍然是LDO,即線性穩壓器提供。不過一般來講,這種可穿戴設備也不需要多大運算量,絕大部分時候CPU都是睡眠的,因此這個也沒多大影響。根據我們實測結果,跑藍牙3.3v供電時候,峰值電流不開DCDC大概13個mA,開了之后差不多就9mA了,效果還是很明顯的。
布局布線相關:博主之前比較多時間都做STM32相關開發,那個引腳端口排布簡直就跟隨機分配一樣。連接個啥LCD顯示器,外擴內存閃存需要一排信號線過去時布局布線簡直就是煎熬。NRF51422就非常友好,直接按順序0-31排過去了。而且模擬信號相關的比如射頻,晶振基本都在一側,數字的在另一側,布局布線相對都比較好處理,這個從圖片里面也可以看出來。然而最最最重要的,也是最最最特別的,就是外設和外端口的連接可以隨意映射,而且是徹徹底底的隨意映射(除ADC外),這個簡直就是爽飛了啊,板子怎么安排走線都順了,用了這個都有再也不想用其他MCU的感覺了哈哈哈哈。
下面談談芯片內部的~~來一發內部框圖先
時鐘:這個MCU時鐘體系很簡單,8051風格,16MHz跑遍全芯片,基本就不用管啦。一般芯片配置個時鐘都要燒不少腦細胞,真心是研發狗之友啊哈哈。
功耗控制(PWR):就兩種模式,System ON和System Off,前者都工作,后者都不工作,然后后者切換到前者之后系統等于復位了。這個略菜。一般MCU都是4,5種不同級別的低功耗模式,不少恢復了可以從休眠點繼續跑。這個要達到這個效果只能保持在System ON模式,然后用CPU的WFI或者WFE讓CPU停掉。Datasheet上面說可以到2.4uA,不過跑了協議棧之后咋都到不了了.....如果放在systemoff還要能喚醒之后繼續跑,那就只能軟件保存各種外設,CPU寄存器內容狀態,然后開內存數據保存,然后再進入Off模式,復位之后自己判斷情況來恢復,超級蛋疼。還好我們設備要求也沒那么高,就前者搞掂了~~~后者的話,估計又得掛不少腦細胞。
無線收發器(RADIO):這個無線收發器還是非常易用的,基本可以看作是內嵌了一個NRF24L01。自帶功放,外圍接一個匹配網絡之后直接接50歐姆阻抗的天線就完事了,基本不需要多少射頻相關開發經驗就可以達到不錯的性能,只需要把走線的阻抗匹配好就可以。發射功率最大可以軟件設置到+4dbm,基本上我們在樓道里面可以傳個幾十m都是妥妥的。一般跑協議棧之后,這個外設就被MPU保護住不能訪問了,也不需要管他。不跑協議棧時候,直接操作也是挺方便的,有一些簡單數據傳輸,或者需要大吞吐量數據傳輸啥的,也可以自己直接操作。無線收發器內置了一個簡易DMA用于數據傳輸,操作也很方便。此外這個外設內部自帶了一個信號強度檢測的功能RSSI,拿來玩藍牙定位啥的不錯哦。
通用輸入輸出端口(GPIO,GPIOTE):端口模式很全,上拉下拉,開漏,推挽,模擬。需要注意的就是如果有外設連接到選定端口,基本上GPIO模塊就管不了它了,也不需要去配置,配置也沒用。外設和端口連接除ADC外可以隨便映射,前面說過了,這個很爽。然后這里可以設置用GPIO喚醒MCU,不過只能高低電平喚醒,不能邊沿喚醒。然后GPIOTE算是GPIO的擴展吧,有一些沒有直連GPIO的外設可以通過PPI再通過這個模塊控制GPIO,比如反轉,置低拉高的。此外也可以讓GPIO以此控制這些外設,比如GPIO高低電平或者上升下降邊沿觸發外設執行某些操作啥的。這些具體在PPI里面講了。
啥外設內部互聯啥啥的(PPI):這個也算是這款芯片一個賣點吧,不過一般也就是一些功耗要控制非常非常非常非常低設備才有用的必要。這玩意大概是個啥情況捏,官方那破說明我也是看了老半天才看明白,其實炒雞簡單,且聽我講講。芯片內每個外設都有兩種比較特殊的寄存器,里面只有一位可用。他們叫任務寄存器(Task)和事件寄存器(Event)。Task就像個按鈕,給它寫1就可以控制外設去開始一項任務,比如ADC轉換一次,定時器捕獲一次之類的。事件寄存器就像個燈泡,外設完成一項工作,比如ADC完成一次轉換,GPIO捕獲到一次下降沿,就點個燈。然后捏,PPI就是個通道,你可以隨意配置源和端,就好比放了個人在這里看到亮燈就去按一下開關這種感覺,以此把外設工作串聯起來。比如GPIO捕獲到一個下降沿就開啟一次模數轉換,模數轉換玩就觸發一個GPIO反轉啥啥的就自己去發揮啦。這個還是很能玩的開的,有32個通道,而且各個通道開關本身都還是一個任務,可以組成很多很復雜操作。這個好處呢,就是讓CPU有更多時間睡眠,很多很簡單的一系列連續工作就純靠這個PPI內部機制來完成了,速度快,功耗低。此外很多外設內部還有很多short功能,和這個原理一樣,只是將外設內部一些操作串聯起來罷了。
模數轉換器(ADC):8,9,10位可配置,貌似是逐次逼近型,功能也比較少,8通道輸入,就能開啟一次轉換,然后獲取數據,最多再開個中斷。不像某STM32那個ADC單次連續掃描錯位連續這個觸發那個觸發啥啥亂七八糟看得眼花繚亂的,這個基本幾行代碼就跑起來了。準確度的話還是非常不錯的,跟我們安捷倫六位半的表比對,誤差基本最多+-1,也就是千分之一醬紫,所以我們產品上面也直接就用片內的模數轉換器來進行轉換了。射頻都能做的廠商,模擬肯定不在話下了哈哈。此外這個功耗也還好,貌似僅轉換時候有功耗,不使用的時候也沒有多少必要去關掉它電源,也可能內部自動關的。
定時器(TIMER):這個也是MCU必備一個外設。不過51422這款的定時器功能也比較單一,簡單來講就捕獲和比對倆功能,而且還要和GPIOTE結合在一起使用才能控制到外圍管腳,要不然就自己在片內晃蕩了。我用TIMER幾乎就倆目的,一個產生個Tick中斷用來定時觸發啥啥的,這個一般就用ARM內核里面那個定時器就好,結果51422居然把這個閹掉了,也是無語。一個就是發生PWM拿來當DAC(數模轉換)用。這個和GPIOTE結合起來也能實現硬件PWM,但問題很多,改PWM時候必須要重啟定時器,比較坑。而還有個很奇葩的,居然這個定時器的計數寄存器是不能讀取寫入的,那好吧.......反正后面好像都沒怎么用過這個了。
實時時鐘(RTC):這個吧跟上面那個沒啥特別區別,就是掉電還能跑就是了。此外這個的計數寄存器總算可以讀取了,真不容易。這個自帶Tick中斷功能,可以代替被閹掉的SysTick那個定時器用來跑系統啥的。我用這個一般也是結合他們提供的驅動代碼的AppTimer來使用,可以虛擬出一堆軟件定時器,很方便。不過捏,也有超級超級坑爹事情,就是這個時鐘是不能被調試器暫停的。因此跑了協議棧,或者用了AppTimer之后,調試一旦開始,暫停過一次之后就不能在運行了,程序一定會出現神奇問題或者直接掛。原因也很簡單就是了,下一篇講軟件部分講講這個。
串口(UART):感覺Nordic就是走簡潔易用路線,就像iOS和ARM一樣哈哈。這個也還真心就個串口功能........記得一般單片機或者應用處理器,那個UART簡直就是個萬能通信端口,SPI,IIC,紅外都給疊進來了,就介紹這部分Datasheet就有快100頁了。這個串口就設置下波特率,停止位,就完事了,然后就發發收收最多加個中斷。而且設置波特率還很爽,不用自己去算了,幾乎就是直接波特率打進去就行,估計也是得益于8051一樣的時鐘體系緣故吧哈哈。
串行外設接口(SPI/SPIS):和串口類似,做主機的話,配置分頻配置下采樣和輸出邊沿就能工作了,然后就是發發收收加中斷。做SPI從機很易用,但是功能很有限。內部有個簡易DMA,大致就是你先把數據放好,把DMA指針指過去,然后主機選中開始通信之后就自動把這部分數據傳出去,同時傳進來的也保存在預先設定好位置。搞掂之后根據需求給個中斷,完事。這個的話如果需要類似W25Q64那樣通信效果就肯定搞不了啦,不過一般芯片之間互傳還是都沒問題的。
IIC接口(他們叫TWI,兩線接口):這個貌似各個MCU都差不多樣子........需要說明的就是,這破玩意靜態功耗好高啊,居然有1個mA,不知道是我那個芯片問題還是啥的。反正后面不用的時候就立刻關掉。
閃存控制器(NVMC):這名字有點帥,老是看成NVIC(Nested Vector Interrupt Controler,嵌套向量中斷控制器),哈哈哈。很簡單用,解鎖,擦,寫。不過擦除和寫時候CPU會被卡住,因此在跑協議棧時候不能直接用,一般都是通過協議棧的api接口間接控制。
溫度傳感器(TEMP):Easy度僅次于8051的IO控制,開啟轉換,讀取數據,完事。而且輸出值直接就是兩位二進制小數的攝氏度。不過實測這個測溫不太準,差別5到10攝氏度不等,而且斜率還不是1.......要拿來測溫的話,自己標定吧。線性度倒是很好。
其他還有一些外設,都是不太常用的非主流玩意,也沒啥好說啦。總的來講,這款芯片硬件部分對開發者還是相當友好,不過功能相對而言有限一些。易用性和功能性永遠成反比,這個也可以理解。此外這些寄存器配置也相當方便,不需要自己老算來算去的。大致就這樣吧,晚些時候再寫一篇軟件部分感受總結出來~~~
總結
以上是生活随笔為你收集整理的谈谈智能穿戴设备最火主控芯片NRF51422/NRF51822的开发感受的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wamp php 环境变量,浅谈本地WA
- 下一篇: 小i机器人微信版