草庐IT

Nordic nRF52系列/nRF5340硬件设计(一)选型及原理图设计

HannibalWang 2023-03-28 原文

Nordic 的BLE系列芯片从第一代的nRF51系列,到第二代的nRF52系列,发展到目前最新的第三代的nRF5340。目前市场中使用最多的nRF52系列一共有七款芯片,它们是:nRF52805、nRF52810、nRF52811、nRF52820、nRF52832、nRF52833、nRF52840。其硬件(主要是RAM、FLASH、PHY及支持协议)的不同,满足了不同领域的需求。本系列文章将着重介绍Nordic的nRF52系列和nRF5340从前期选型、原理图设计、Layout、天线匹配及RF频偏调试的过程。希望能对广大使用Nordic芯片的开发者有所帮助。

一、芯片选型

 

1、粗略选型

Nordic官网中有一个产品比较页:https://www.nordicsemi.com/products/bluetooth-low-energy。打开此页面,我们可以看到Nordic目前一些主流型号的芯片的配置情况。在这个页面中详细列出了芯片 CPU的主频、Flash、RAM、供电范围、支持的硬件通讯接口(UART、I2C、I2S、SPI、HSPI、QSPI、USB、ADC)等信息。根据这些信息,开发者可以粗略筛选出2-3颗符合自己需求的芯片。

 

3、Flash和RAM资源选择。

确定大致的选型后,可以根据实际应用的具体需求再去进一步评估所需的Flash和RAM。Nordic的SDK中有丰富的例程,基本涵盖了市面上一些常见的应用,这些例程实际上已经帮开发者搭好了框架,开发者可以在这些例程的基础上开发,去增加相应的功能即可,而不是从零开始。所以我们可以借助SDK中的例程大小大致来评估实际应用所需的flash和RAM大小。

Nordic目前有两套SDK,老的nRF5 SDK现在已经进入维护阶段,Nordic不会在其中增加新的功能。未来新的功能都是放在NRF CONNECT SDK(简称NCS)中更新。nRF52系列的芯片支持两套SDK,但nRF5340只支持NCS。

关于环境的搭建,可以参考Nordic 中国区的FAE写的博客:https://www.cnblogs.com/iini/p/9043565.htmlhttps://www.cnblogs.com/iini/p/14174427.html,这两篇文章分别介绍了nRF5 SDK和NCS的环境搭建方法。

搭建好环境后,我们可以到SDK中找到相应的例程,例如需要开发一个手环应用,我们可以打开ble_app_hrs例程,可以看到HRS下有5名为PCA100XX的文件夹,这对应这此例程支持的DK板型号,PCA10040为NRF52840DK、PCA10040e为NRF52810DK、PCA10056为NRF52840DK、PCA10056e为NRF52811DK,有些例程下还有PCA10010和PCA10010e两个文件夹,分别对应NRF52833和NRF52820。PCA10059为NRF52840 Dongle。

 

 

查看例程所用的Flash和RAM的使用情况,需要借助SES编译例程。编译完成后,我们可以看到HRS例程几乎用掉了NRF52810的全部Flash和RAM(SES编译计算的Flash和RAM是包括了MBR、协议栈、application三部分的),这说明nRF52810不太适合做心率手环的应用,需要另选其他芯片。

 

 

再次编译nRF52840的工程,可以看到NRF52840的Flash和RAM使用情况,再结合其他要增加的功能(DFU、驱屏外设等)来做判断。

 

 

4、 封装选择

nRF52系列和nRF5340芯片都有多个封装可以选择,开发者可以根据实际产品对体积的要求及成本角度出发,选择封装。每款芯片的手册中都有此芯片的不同封装信息。如下图是nRF52840不同封装信息,此内容可在该芯片的 Product Specification 中查到。

 

 

 

 

 

 

 

 

 

 

 

二、原理图设计

 1、参考设计资料

选定适合的芯片后,就可以开始设计原理图了,Nordic官方提供了丰富的硬件参考设计资料:

在Nordic官网上可以除了有芯片的设计参考之外,Nordic的官方DK(Development Kit)的设计资料也是全开源的,可以在官网上找到。

我们以nRF52840为例,首先进入Nordic官网:https://www.nordicsemi.com

 

 

 

点击右上角搜索芯片,在这里可以搜到芯片和对应DK的相关页面。我们搜索nRF52840,可以看到在这里搜到了nRF52840 Dongle、DK以及芯片的相关信息。

 

 

 

在搜索页面打开nRF52840,在nRF52840介绍页面中点击 Compatible downloads 可以看到芯片的参考设计下载链接,如果你选择的是其他封装的,可以在左侧Reference layout and BOM Resources中切换。

 

 

 

 

 

 

 

 

 

 

 

 

 芯片的参考设计是一个Zip压缩包,将其下载并解压后,可以看到一共有四个文件夹

 

 

 Altium Designer files 文件夹中是可以用Altium打开的文件,芯片的封装可以直接从其中拷贝出来。如果你使用的是其他设计软件,如PADS,需要将此文件夹中的.PcbDoc文件导入到你使用的设计软件中,具体方法请上网搜索。如果导入不成功或者你觉得比较麻烦的话也在网上搜索其他人画好的库,或者根据芯片手册中的引脚相对位置关系直接自己画封装。

 

 

 

Bill of Materials 文件夹中是参考设计对应的BOM表,在BOM表中可以清楚看到Nordic推荐使用的阻容感器件及高低频晶体的类型和精度及参数。

 

 

 

 

 

 

Production files文件夹中则主要是板子的Gerber文件,方便设计者查看官方参考设计中每一层的走线。

 

 

 

Schematic and Layout pdf files文件夹中是原理图的PDF和Layout分层导出的PDF。

 

 

 看到这里,你可能会有一个疑问,为什么每一个文件夹中,都有很多个config,比如nRF52840的参考设计中,每个文件夹中都有7个config。实际上每个config都是一种参考设计,四个文件夹中每个config名称相同的文件是同一个参考设计,是一一对应的关系,即Altium Designer files中的nrf52840_qiaa_config1.PcbDoc对应的Altium 原理图是nrf52840_qiaa_config1.SchDoc,对应的BOM是Bill of Materials 中的nrf52840_qiaa_config1_bom,对应的Gerber文件是nrf52840_qiaa_config1为名称的一系列文件,对应的PDF原理图和Layout分层图是nrf52840_qiaa_config1_schematic.pdf和nrf52840_qiaa_config1_pcb.pdf。这些参考设计的区别在与有的使用芯片的DC/DC模式,有的直接使用USB供电。这些区别会放在第二部分 2、芯片电源模式选择 部分详细叙述。

介绍完芯片的参考设计资料,前面我们还提到官方DK的设计资料也是开源的,进入DK的页面,滑动到下方选择Downloads,可以看到官方DK的设计资料的下载链接。

 

 

 

 

 

 

 

 

 DK的设计资料包也是一个Zip压缩包,下载并解压后,可以看到两个文件夹,PCA10056是nRF52840 DK的设计资料,PCA641100是DK附带的NFC天线的设计资料。

 

 

 打开PCS10056文件夹,其子文件夹结构和芯片的参考设计类似。

 

 

 

2、芯片电源选择

上一章节我们讲了同一个芯片有好多种参考设计,它们的区别在于不同芯片选择的主供电电源不同和是否有使用芯片的DCDC模式,我们继续以nRF52840 QIAA的参考设计包为例。

从nrf52840_qiaa_config1、nrf52840_qiaa_config2、nrf52840_qiaa_config3、nrf52840_qiaa_config6中可以看到,这四个参考设计使用了不同的电源做为芯片的主供电,nrf52840_qiaa_config1、nrf52840_qiaa_config2、nrf52840_qiaa_config3用到了芯片的USB,所以给芯片的VBUS引脚供电,其中nrf52840_qiaa_config1参考设计直接用VBUS当作芯片主电源给VDDH引脚供电。

 

nrf52840_qiaa_config2则使用了单独的VDDH做为芯片主电源给VDDH引脚供电。这两个参考设计的相同点在于,没有为VDD引脚供电,而是将VDD当作Output,即所谓的High Voltage mode,在High Voltage mode下可以把VDD当做电源输出来为其他设备例如传感器供电。

 

而nrf52840_qiaa_config3和nrf52840_qiaa_config6使用了VDD_nRF当作芯片主电源给VDD和VDDH引脚供电,这种方式被称作Normal Voltage mode。

 

 

nRF52840芯片规格书中对于High Voltage mode和Normal Voltage mode的描述如下:

 

 这里需要注意的是QFN48封装的nRF52840,即nRF52840 QFAx中是没有高电压模式的。

从规格书里可以看到NRF52840在高压模式下是支持将VDD当作Output来给其他设备供电,可以通过配置REGOUT0寄存器来配置特定电压

 

 

 

 

 VDD支持的输出电压范围取决于VDDH引脚提供的电源电压。从规格书中可以看到VDDH与VDD的最小差值为0.3V,即当VDDH供电为3.6V时,VDD最大输出电压为3.3V。从下面这个表我们还可以看出,VDD最大的输出电流为25ma(发射功率小于4dBm时)。所以开发者在设计NRF52840的硬件时,如果是较简单的系统,如系统只有NRF52840和一个传感器,且系统由锂电池或USB供电,直接由NRF52840的VDD给传感器供电,但是需要注意传感器的峰值功耗不应大于下表。

 

 

最后是电源脚供电电压的值的问题,如下表是NRF52840的VDD、VDDH、VBUS三个脚所支持的电压范围,此内容可以在规格书的Power and clock management一章中找到。

 

 

 

 

 小结:此章节仅以nRF52840为例,不是所有Nordic芯片都支持高压模式与VDD External circuitry supply,切勿生搬硬套到其他型号的Nordic芯片。开发者在开发过程中需要阅读所选择芯片的规格书去做设计。此章节只是提供一个如何根据官方参考设计结合规格书做硬件设计的思路。

 

3、晶振选择

Nordic的芯片一般外围需要两颗晶振,一颗低频的32.768K,一颗高频的32M。低频晶振负载提供时钟源,高频晶振负载提供射频运行时的频率基准源。 

 

 

nRF52832有两频率的时钟,64MHz高速时钟和32.768kHz的低速时钟。这两个时钟可由以下电路产生,可通过配置config.h文件来软件选择各自的时钟源。

 

 

 

产生64MHz高速时钟的途径有两个:

(1)64MHz 片上时钟;
(2)用外部32MHz晶振产生64MHz时钟;


产生32.768kHz低速时钟的途径有三个:
(1)32.768MHz片上RC振荡器,精度为+/-250ppm.
(2)用外部32.768kHz晶振产生的32.768kHz的时钟;
(3)由64MHz的时钟综合而成的32.768kHz的时钟;

 

 

一般而言,内部的64MHz片上时钟的抖动较大不建议使用,无法满足2.4GHz BLE频率的PLL要求。所以在BLE中,高速时钟必须由外部32MHz晶振产生。

对于低速时钟,如果对时钟精度没有很高的要求,对于PCB面积受限的应用,可以选择使用内部RC,从而省掉外部的32.768K和负载电容。

两颗晶振的参数要求如下:

 

 

 

 

可以直接按照Nordic官方DK用的晶振参数去选型

 

 



4、LDO与DCDC供电模式选择

如下图是nrf52840_qiaa_config2和nrf52840_qiaa_config4参考设计的原理图,这两个参考设计都是用了高电压模式供电,但两者的区别是nrf52840_qiaa_config4的DCC脚和DCCH上接了电感。这里就要引入nRF51/52/53系列芯片的一个重要硬件概念:LDO和DCDC

 

 

 

 如下是规格书中芯片的LDO和DCDC模式的介绍,简单的概括就是DCDC模式的功耗会比LDO模式的功耗低

 

 我们可以从Nordic官方给出的在线功耗评估工具来直观的看二者在功耗上的差距:https://devzone.nordicsemi.com/power/w/opp/2/online-power-profiler-for-bluetooth-le

从下面两张图可以看出,同样使用nRF52840,3.3V供电,发射功率为0dBm,使用外部低频晶振,设置广播周期为100ms的情况下,DCDC模式的平均功耗为90uA,而LDO模式的平均功耗为140uA。

 

 

 

 

5、GPIO的选择

NRF51/52/53系列芯片的外设(除ADC、QSPI、HSPI)是可以在GPIO上自由映射的,没有限定特定的脚位,我们可以从芯片规格书中看到,以NRF52840 QIAA为例。可以从下表中看到部分GPIO的Description中标注了Analog input,这就是可以用做ADC的GPIO。

 

 

 同样的QSPI脚在Recommended usage中也有标注出来

 

这里需要注意标注有 low frequency I/O only的GPIO。

 关于此类GPIO,Noridc官方的描述是此类GPIO可以用做外设,但是在射频开启时不建议用做10KHz以上的外设,如UART、SPI、I2C、I2S等,射频开启的情况下用这些GPIO做高速外设会影响射频性能。

 

看到这里可能部分初学者会对芯片DEC脚的作用产生疑问。芯片带有DEC的脚位是芯片的退耦脚,需要外接退耦电容。退耦电容的接法和值在芯片的参考设计中已经给出,直接照搬参考设计即可。关于退耦电容的作用,感兴趣的读者可以自行搜索,简单来说,退耦电容是用来消除输入的电流在芯片中产生的震荡和自激电流用的。

 

关于外设的类型和数量,可以在芯片规格书的首页看到,以NRF52840为例:

 如果你对选择外设和GPIO有困难,也可以直接选择Nordic官方DK使用的外设接口,可以在SDK的PCA100xx.h文件夹中找到,继续以NRF52840为例,NRF52840对应的外设头文件为PCA10056.h

 

 

 

 如果你选择的是其他的芯片,如NRF52832,去对应的PCA10040.h即可,下面是Nordic系列芯片对应的开发板名称

PCA10040对应NRF52832

PCA10010对应NRF52810

PCA10056对应NRF52840

PCA10056e对应NRF52811

PCA10010对应NRF52833

PCA10010e对应NRF52820

PCA10028对应NRF51422/51822/51802

 

6、天线与匹配电路

按照Nordic给出参考设计,设计完最小系统,并选定外设的GPIO和供电电源之后,就剩下天线和匹配电路了。天线可以选择现成的2.4G陶瓷天线或是PCB天线,也可以以IPEX座的形式将天线引出到板外,使用体积更大的外接天线获得更好的信号。具体关于天线和匹配电路的问题,我会放在下一篇文章里面去详细讲。这里需要注意的是,Nordic给出的参考设计并没有预留天线的匹配电路,所以建议开发者在设计硬件原理图的时候,预留一个Π型匹配电路,方便后期调试天线。参考电路如下,R1、C25、C26共同组成了Π型匹配网络,初始值可以预留为R1=0R、C25=C25=N.C.。

 

 

 

总结:本文提供的是使用Nordic芯片做硬件设计的基本思路,按照上述步骤完成Nordic芯片的硬件设计之后,就可以进行下一步的Layout了。

有关Nordic nRF52系列/nRF5340硬件设计(一)选型及原理图设计的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  3. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  4. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  5. ruby-on-rails - 设计注册确认 - 2

    我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:

  6. ruby-on-rails - 设计通过 reset_password_token 获取用户 - 2

    我正在尝试创建密码规则来设计可恢复的密码更改。我通过passwords_controller.rb做了一个父类(superclass),但我需要在应用规则之前检查用户角色,但我所拥有的只是reset_password_token。 最佳答案 假设您的模型是用户:User.with_reset_password_token(your_token_here)Source 关于ruby-on-rails-设计通过reset_password_token获取用户,我们在StackOverflow

  7. ruby-on-rails - Rails 5,公寓和设计 : sign in with subdomains are not working - 2

    我已经使用Apartment设置了一个Rails5应用程序(1.2.0)和Devise(4.2.0)。由于某些DDNS问题,应用只能在app.myapp.com下访问(请注意子域app)。myapp.com重定向到app.myapp.com。我的用例是每个注册该应用的用户(租户)都应该通过他们的子域(例如tenant.myapp.com)访问他们的特定数据。用户不应限定在其子域内。基本上应该可以从任何子域登录。重定向到租户的正确子域由ApplicationController处理。根据Devise标准,登录页面位于app.myapp.com/users/sign_in。这就是问题开始的

  8. ruby-on-rails - 设计中的 ArgumentError::RegistrationsController#new 错误的参数数量(2 代表 0..1) - 2

    我在关注RyanbatesRailsCast的devise和omniauth(第235集-devise-and-omniauth-revised)。当我尝试使用Twitter登录时,标题中不断出现错误。defself.new_with_session(params,session)ifsession["devise.user_attributes"]new(session["devise.user_attributes"],without_protection:true)do|user|user.attributes=paramsuser.valid?end完整跟踪:C:/Ruby20

  9. ruby-on-rails - 使用用户或管理员模型和 Basecamp 样式子域设计登录 - 2

    我为Devise用户和管理员提供了不同的模型。我也在使用Basecamp风格的子域。除了我需要能够以用户或管理员身份进行身份验证的一些Controller和操作外,一切都运行良好。目前我有authenticate_user!在我的application_controller.rb中设置,对于那些只有管理员才能访问的Controller和操作,我使用skip_before_filter跳过它。不幸的是,我不能简单地指定每个Controller的身份验证要求,因为我仍然需要一些Controller和操作才能被用户或管理员访问。我尝试了一些方法都无济于事。看来,如果我移动authentica

  10. ruby-on-rails - 自定义设计 Cookie - 2

    我在我的Rails应用程序中使用设计。我在租户庄园中配置了它,其中帐户/session的范围限定为子域。例如:http://subdomain1.example.com/http://subdomain2.example.com/...这很好用,但我想为“super管理员”添加一个子域,允许这些用户导航到所有其他子域而无需重新验证。这将是这样的:http://admin.example.com/是否可以自定义仅在管理子域上生成的cookie,以便它在所有其他子域上都有效? 最佳答案 Cookie域的定义越不具体,它们的包容性就越大,

随机推荐