关于嵌入式编程:SX12612芯片开发那些事儿一时钟源选择

置信大家第一次接触LoRa芯片时,浏览Semtech官网Demo代码或者本人进行我的项目开发时,不晓得对于待机模式,是应用STDBY_RC还是STDBY_XOSC呢?明天咱们就来介绍射频芯片SX1261/2该如何抉择时钟源,对应的时钟源应该抉择哪种待机模式以及相干源码该怎么写。一、参考时钟外部时钟:SX1261/2芯片外部有两个RC时钟源可用:64kHz、13MHz。64kHz时钟个别在WOR(无线电唤醒)模式执行唤醒射频芯片的操作时应用,而13MHz在芯片失常工作时应用。但一般来说,开发时射频芯片根本都连贯了内部晶振,不会应用外部时钟,这样能够保障通信的稳定性。 内部时钟:无源晶振(XTAL)咱们晓得无源晶振须要借助外围时钟电路才能够振荡,而SX1261/2芯片不须要硬件设计在32MHz晶振旁退出电容元件,该芯片引脚XTA、XTB配置了可编程电容器。电容器的值以0.47pF为步长,寄存器设置0x00值对应电容值为11.3pF(最小值),设置0x2F值对应电容值为33.4pF(最大值)。补充一个如何调整晶振旁两个负载电容值的常识: 依据下列公式来设置晶振旁的两个负载电容值Cg和Cd: $$ C_l \approx \frac{C_g * C_d}{C_g + C_d} + C_s $$ 其中Cl为晶振的标称负载电容,Cs为PCB的杂散电容,Cs个别经验值为3-5pF,并且个别取Cg = Cd。晶振的标称负载电容能够查阅晶振的数据手册。Cg 和 Cd变大晶体振荡的频率变小;Cg 和 Cd变小晶体振荡的频率变大; 注意事项: 应用无源晶振时,在POR上电复位或冷启动模式下从休眠唤醒时,XTA、XTB引脚设置电容值的寄存器会将值初始化为0x05(对应电容值为13.6pF),芯片设置为STDBY_XOSC模式后,两个寄存器的值会被笼罩为0x12(对应电容值为19.7pF)。因而开发时应确保射频芯片已处于STDBY_XOSC模式,而后能力更改电容值寄存器的值,免得被笼罩。 有源晶振(TCXO)应用有源晶振时,不用关怀XTA、XTB引脚电容配置寄存器值,能够通过一个220电阻和一个10pF直流截止电容将其连贯到XTA引脚(数据手册举荐设计),XTB引脚放弃未连贯状态。射频芯片的DIO3引脚可用于为TCXO提供稳压直流电压。SetDIO3AsTCXOCtrl命令用于配置DIO3管制内部TCXO参考电压。注意事项: 应用SetDIO3AsTCXOCtrl命令进行设置后,管制XTA外部电容值的寄存器值将主动更改为0x2F(对应电容值为33.4pF),来过滤流传到PLL锁相环的杂散。 应用此命令后,射频芯片会在须要时(在STDBY_XOSC、FS、TX、RX模式下),将DIO3引脚设置为预约义的输入电压。32MHz晶振频率呈现并稳固所需的工夫能够通过delay(23:0)来管制。如果在提早周期完结时,外部未检测到来自有源晶振的32MHz,应用GetDeviceErrors命令能够查问到错误码为XOSC_START_ERR。 在这再介绍下锁相环(PLL,Phase-Locked Loop),它是一种反馈控制电路。其特点为:利用内部的参考信号管制环路外部振荡信号的频率和相位。锁相环在工作的过程中,当输入信号的频率与输出信号的频率相等时,输入电压与输出电压放弃固定的相位差值,即输入电压与输出电压的相位被锁住,这就是锁相环的名称由来。 锁相环通常由鉴相器(PD,Phase Detector)、环路滤波器(LF,Loop Filter)和压控振荡器(VCO,Volatge Controlled Oscillator)三局部组成,锁相环组成的原理框图所下图所示。工作原理:压控振荡器的输入通过采集并分频;和基准信号同时输出鉴相器;鉴相器通过比拟上述两个信号的频率差,而后输入一个直流脉冲电压;管制VCO,使它的频率扭转;这样通过一个很短的工夫,VCO的输入就会稳固于某一期望值。 二、源码实现通过浏览第一章节,置信读者对不同的参考时钟应该如何操作射频芯片初始化有了初步的理解,接下来咱们看下初始化的具体源码该如何实现。(上面源码为伪代码,只是为了形容初始化具体步骤) 应用外部时钟: void SX126xInit(void){ //复位 SX126xReset(); //射频芯片唤醒 SX126xWakeup(); //射频芯片设置待机模式STDBY_RC SX126xSetStandby(STDBY_RC);}应用无源晶振: void SX126xInit(void){ //复位 SX126xReset(); //射频芯片唤醒 SX126xWakeup(); //射频芯片设置待机模式STDBY_RC SX126xSetStandby(STDBY_RC); //射频芯片设置待机模式STDBY_XOSC SX126xSetStandby(STDBY_XOSC); //设置XTA、XTB引脚电容值 SX126xWriteRegister(REG_XTA_TRIM,XTAL_DEFAULT_CAP_VALUE); SX126xWriteRegister(REG_XTB_TRIM,XTAL_DEFAULT_CAP_VALUE);}应用有源晶振: void SX126xInit(void){ //复位 SX126xReset(); //射频芯片唤醒 SX126xWakeup(); //射频芯片设置待机模式STDBY_RC SX126xSetStandby(STDBY_RC); //设置为TCXO提供的直流电压的值和延迟时间 SX126xSetDio3AsTcxoCtrl(TCXO_CTRL_VOLTAGE,RF_WAKEUP_TIME << 6); //射频芯片设置待机模式STDBY_XOSC SX126xSetStandby(STDBY_XOSC); //此时,不必对XTA外部电容值寄存器进行管制,其会主动更改为0x2F,来过滤流传到PLL的杂散。 //对射频进行校准 CalibrationParams_t calibParam; calibParam.Value = 0xFF; SX126xCalibrate( calibParam );

November 16, 2022 · 1 min · jiezi

关于嵌入式编程:代码静态测试-MISRA是什么如何使用它来改进嵌入式编码

MISRA C是由汽车产业软件可靠性协会(Motor Industry Software Reliability Association)提出的C语言开发规范,目标是在增进嵌入式零碎的安全性及可移植性。 一开始,MISRA C次要是针对汽车产业 ,倒退过程中,其余产业也逐步开始应用MISRA C,包含航空、电信、国防、医疗设施、铁路等畛域。 浏览本文,您将理解到嵌入式编码的两种要害语言,以及如何通过MISRA来改良嵌入式编码。龙智作为DevSecOps研发平安经营一体化解决方案供应商、Perforce受权合作伙伴,继续关注动态测试畛域动静与倒退,为您提供性能平安和规范合规当先的动态代码分析器,并带来最新洞察与最佳实际参考。分割咱们,立刻理解C/C ++语言最佳动态代码分析器Helix QAC如何帮您实现自动化利用MISRA规定。 嵌入式编码为装置在大型设施上的零碎提供能源,比方汽车、飞机或医疗设施等,这些零碎被设计来执行特定的专用性能。 每个专用性能都通过嵌入式编码实现的。这段代码必须是牢靠且无谬误的,因为任何破绽都可能对嵌入式零碎的安全性造成毁灭性结果。因而,利用编码标准(如MISRA)来确保代码的可靠性和品质是十分必要的。 本篇文章将解释如何应用MISRA改良嵌入式编码。 为什么牢靠的代码对于嵌入式编码来说必不可少?嵌入式软件赋能世界上最重要的零碎。它被用于: 人们每天驾驶的汽车维持生命的心脏监视器(和其余医疗设施)盘绕世界航行的飞机因而,编码谬误是齐全不容许产生的。 这就是为什么嵌入式编程须要遵守规则的起因——确保代码是平安、牢靠且有保障的。而这些规定可能会依据所应用的编程语言而有所不同。 嵌入式编码和零碎的2种要害编程语言大多数嵌入式零碎都是用C和C++编程的。 这是因为C和C++容许对硬件进行低级管制。C和C++反对嵌入式软件的复杂性。同时,应用这些语言可生成高效的代码。 另外,还因为程序员中有很大比例在应用C和C++,而且他们能够放弃最佳性能——这对于嵌入式零碎来说是要害。 如何应用MISRA进行嵌入式编码许多嵌入式行业都有严格的平安合规标准,而这些标准往往须要应用编码标准。 嵌入式软件有几种不同的C和C++编码标准可供选择。MISRA® 是最值得信赖的编码标准之一。MISRA规定可能确保代码合乎行业标准。它帮忙您缩小循环复杂性,并进步代码的品质。 上面是不同行业的开发人员如何应用MISRA进步代码品质的三个例子。 1. MISRA帮忙改善嵌入式汽车代码 汽车开发人员置信MISRA可能帮忙他们确保代码变得更好。因为MISRA是汽车行业品质和合规性的基准。 “一个客观事实是,MISRA曾经被公认为是基准,并已被整个日本汽车行业采纳,笼罩从OEMS始终到芯片级的整个供应链。”——Socionext 公司ISO 26262合规性 汽车行业须要恪守ISO 26262这一性能平安规范。 ISO 26262对汽车平安完整性等级(ASIL) (A到d)有着严格的要求。它倡议应用编码标准来确保合乎ASIL,并强调了MISRA编码标准。 Protean Electric公司应用Helix QAC来利用MISRA C规定,这对他们恪守ISO 26262带来了很大的帮忙。此外,Helix QAC可能发现其余工具脱漏的问题。因而,Protean不用放心呈现误报。 稳固的代码品质 Delphi汽车公司也应用Helix QAC来利用MISRA C规定,帮忙他们的开发人员采纳最佳编码实际,并确保了无论集体教训如何,所有开发人员的代码品质都能始终如一。 2.MISRA提供更好的嵌入式铁路代码 铁路零碎开发人员也信赖MISRA能提供更好的代码。 “MISRA是不言而喻的抉择。它最后由汽车行业创立,是历史最悠久、最受尊敬的规范之一,并被多个平安相干市场宽泛采纳。”—— Viveris TechnologiesEN 50128合规性 铁路行业须要合乎性能平安规范EN 50128。 EN 50128有五个软件平安完整性等级(SSIL),范畴从SSIL0到SSIL4。为了合乎所有SSIL的要求,举荐应用一个编码标准,但SSIL3和SSIL4是强制的。 该编码标准必须: 避免应用未定义或未指定的行为避免程序员犯常见谬误限度某些构造的应用打消潜在的歧义限度库的应用MISRA满足这些要求,并帮忙确保您的软件品质。 Viveris Technologies应用Helix QAC来利用MISRA规定,并满足EN 50128的合规性要求。这确保了他们的无人驾驶列车——里昂地铁是平安、牢靠的。 精确的诊断 对于Viveris来说,精确的代码诊断与合规性同样重要。 通过应用Helix QAC,他们取得了比应用其余工具更好的MISRA C规定覆盖率。真正的问题被辨认并修复。并且误报更少。 ...

October 17, 2022 · 1 min · jiezi

关于嵌入式编程:Incredibuild线上研讨会嵌入式开发Yocto专题

July 11, 2022 · 0 min · jiezi

关于嵌入式编程:用废旧纸箱-DIY-智能宠物喂食器旅行在外远程投喂二狗子

国内起起伏伏的疫情总算进入稳定期,但还是时不时爆出确诊的新闻,尤其是境外输出的病例。 长期不在家或者旅行的时候,最放心的莫过于留在家里的奴才。疫情让我关注起了宠物喂食器,这种设施适宜比拟懒的人,设置好就不必操心的。 网上搜了一下,根底也要两三百,能联网性能的,看上的价格都不低。贫困进步了咱们的创造力,本人动手做一个吧。 钻研了几个网上的教程(可放链接),感觉能够再进一步优化,退出电子的灵魂。 纸箱做外壳,比拟好设计,后边做好了还能够去换成亚克力之类。 资料:一个大纸箱 0 元三明治开发板,自家产 0 元(套件**)加速电机某宝 24 元电子秤模块某宝 43.5元(选配)雪糕棒、胶枪等根本工具性能:1.定时喂食,周定时循环,食量可选 2.手机可操控,点击抉择喂食份量 3.能够看喂食记录 4.余粮有余告警 5.语音播放 原理:搜寻了一下,目前市面上宠物喂食器,外围局部根本都是这种构造,两头是个转轮,高低是成对角的两个扇形。食粮从上边漏下,被转动的转轮带到底部的另一边的扇形再漏到盘子里。 参考了几个DIY的教程,都不太是我想要的,综合了一下,外围构造能够简化为转轮+电机+外壳的构造,退出 Wi-Fi 模组作为智能化通道,应用涂鸦 IoT 开发平台的公版 App,一条龙搞定。思考老本和可塑性,外壳暂用纸箱试试水。当然有条件的能够换成亚克力或者3D打印,咱就简略点能满足需要。 电机思考老本和力矩,选个小的加速电机。转轮的话,想想能够用雪糕棒搭。抽象化的构造草图如下: 丑是丑了点,意思大概是这个意思 制作过程:1.首先,制作转轮,用雪糕棒搭一个正六边形,为了更好的固定,我选用瓶盖作为撑持,这样两头能够拧螺丝与电机,前期周边空隙打胶固定。 参数:直径7.5cm。 因为圆形胶带圈正好是7.5cm内径,胶带圈高度1.5 cm,割进去一个圆环备用。 2.接下来制作粮仓。保洁阿姨赞助的大纸箱,大略开展每个立体 20*60cm,四个面做了下大概性能划分,一个大纸箱足够。 为了不便我把粮仓的底边设计成 20cm,制作 4 个等边梯形,高、上边、底边别离 10cm、10cm、20cm,拼接起来作为储粮仓。 3.切一个 10cm 边长的正方形,两头切出一个120度的扇形,直径7.5cm,作为储粮仓底部封口。 4.做一个边长 20cm 的正方形,核心割同样大小扇形,两头依据电机柱大小,割一个小圆能让电机伸出。 5.给电机制作一个支架,将核心部件组装,放上转轮拧入螺丝固定。而后将储粮仓放在最上方,整个外围构造搞定。这里能够先不固定,为了后边调试不便。 6.制作粮道。食粮从扇形区域漏下来后,被转轮扫到另一侧扇形,而后通过粮道滑到盘里。这样整个外围机构根本就实现了。120 度的扇形区域能够无效的避免食粮漏上来,问我怎么晓得的?因为我试过半圆形,一言难尽,说多了都是泪。 7.拿出开发板,代码编写。主控 MCU 手头有一个ST的 STM32G071 的开发板,Wi-Fi 模组和 MOS 驱动板,用的涂鸦三明治开发板。 ...

November 16, 2020 · 1 min · jiezi