自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

傅工笔记

记录日常工作中遇到的问题和解决方法

  • 博客(20)
  • 资源 (3)
  • 收藏
  • 关注

原创 用EUART(LF模式)进不了EM2

EFR32BG22的一个应用需要同时使用BLE和串口,而且要求:BLE跟手机保持连接。 串口能随时接收数据。 平均电流小于20 uA。在Simplicity Studio 5的soc_empty例程基础上,添加EUART软件组件。通常我们串口使用USART模块,但是USART模块不能在低功耗模式EM2下运行。在EFR32xG22上有一个EUART模块,它有高速和低功耗两种模式,低功耗模式可以在EM2下保持运行。在低功耗模式下,它的时钟源可以用LFRCO(内部低频时钟源)或LFXO(外部3276

2021-12-20 11:13:30 792 1

转载 关于蓝牙传输距离和可靠性的误解与释疑

多年来,蓝牙技术一直在提高全球各地数百万人的生活质量,它已成为人们保持连接所不可或缺的组成部分。蓝牙在全球的普及引发了一些关于该技术能做什么和不能做什么的误解。事实上,蓝牙技术远远超出了个人设备的范畴,它为从资产追踪、室内导航到联网照明控制和工业创新等各种基础解决方案提供支持。本文将探讨关于蓝牙技术的几个最常见的误解以及这些误解背后的事实。误解:蓝牙是一项短距离传输技术人们普遍认为蓝牙技术只适合短距离应用,这在很大程度上是因为这项技术最初的用例。由于音频传输和可穿戴设备等众所周知的用例只需要满足

2021-07-29 11:28:53 1504

原创 在ARM平台上测试88W8987A 的WiFi吞吐量

编译iperf3:如前面一样设置交叉编译环境,然后在iperf3的目录下执行如下命令:tangb@myzr:/mnt/hgfs/MYZR-IMX6/mrvl_wifi/iperf-3.1.3$ ./configure --host=armtangb@myzr:/mnt/hgfs/MYZR-IMX6/mrvl_wifi/iperf-3.1.3$ make把编译出来的文件“D:\MYZR-IMX6\mrvl_wifi\iperf-3.1.3\src\iperf3”复制到U盘。把前面编译驱动

2021-07-14 11:40:11 579

原创 移植88W8987A驱动和MFG程序到ARM平台

把88W8987A的驱动和MFG软件移植到明远智睿的MY-IMX6-EK200开发板,Linux-4.1.15平台上:按“MY-IMX6 Linux-4_1_15 编译参考手册”文档的说明搭建交叉编译环境。如果打开新的终端窗口,则用以下命令设置和检查交叉编译环境:tangb@myzr:~/my-work/8987a/wlan_src$ source /opt/fsl-imx-fb-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-neon-toolchain-4

2021-07-14 11:32:11 1178

原创 EFR32如何把调试接口SWD管脚改为串口使用

有时,客户的板子上没有引出到外面的串口,原因可能是:应用需要的IO管脚数量多,把管脚占用完了;或者板子面积有限,无法放下更多连接器;如此等等。但是当板子要做RF性能测试时,必须要有一个串口连接到电脑或仪器上。因此,就需要把调试接口(SWD)管脚改为串口来使用。下面以配合BGTOOL使用的NCP TARGET例程来说明,修改方法如下:修改hal-config-board.h中的串口管脚定义:#define BSP_UARTNCP_TX_PIN (2U...

2021-07-14 11:19:57 1026

原创 EFR32上实现精确的软件延时

在编译器的优化选项设置为“-O0”,即不优化时:void DelayMs(int n){ int i, loops = SystemSYSCLKGet() / 12000; for( ; n > 0; n--) for(i = 0; i < loops; i++) ;}这意味着:最内层的for语句,执行一次循环需要12个CPU时钟周期。反汇编如下图:在编译器的优化选项设置为“-O2”时,上面的代码里的循环会被优化掉,起不到延时的作...

2021-07-14 11:15:21 486

原创 EFR32修改开发板VCOM串口波特率的方法

Silabs官方开发板上的Jlink CDC串口(VCOM)默认的波特率是115200,在普通的终端软件(如“串口调试助手”)里设置别的波特率是不起作用的。要让它支持其他的波特率,需要在Simplicity Studio里面去进行设置。在Debug Adapters view里,右键点击开发板的J-Link,在弹出菜单中选Connect。 再右键点击它,在弹出菜单中选Launch Console。如下图,在打开的J-Link的Console中,切换到Admin页面,并输入serial vc

2021-07-14 11:09:36 878

原创 EFR32上用DMA实现UART高速数据传输

当用UART来做高速大数据量传输时,需要结合DMA来使用,以便减轻CPU的负担,避免影响其他程序功能。(Silabs官方开发板上的Jlink CDC串口(VCOM)默认只能支持115200的波特率,若要用其他波特率,需要在Jlink的admin终端里去修改。)因为DMA一次传输一块数据(如100字节),但UART传输数据没有固定长度的帧,所以需要加入一个超时机制,每隔一段时间把收到的零散数据取出处理。EFR32系列的USART模块带有一个硬件定时器,可以用它来产生接收超时中断。不多解释了,上代码:

2021-07-14 11:06:00 1389

原创 如何用SWO(SWV)引脚输出LOG信息

如果芯片的UART不够用,而又需要在程序运行过程中输出一些LOG信息,以便调试、解决问题,那么我们就可以使用调试接口的SWO(SWV)管脚来输出LOG。首先,需要把下列文件添加到工程文件夹中:SimplicityStudio\v4\developer\sdks\gecko_sdk_suite\v2.7\hardware\kit\common\bsp中的bsp_trace.c和bsp_trace.h,添加到工程文件夹里的hardware\kit\common\bsp中; SimplicityStud

2021-07-14 10:40:47 1050

原创 Simplicity Studio v5工程配置printf串口输出

Simplicity Studio v5集成开发环境进一步强化了“面向组件(Component)编程”的设计理念。虽然这个理念在Windows和Android等的应用程序设计中早已深入人心,但是跟传统的单片机编程的习惯有相当大的差异。下面,以如何把printf输出到串口终端为例,略窥SS v5的组件的使用方法。打开软件组件选择窗口,添加开发板的控制组件:添加了以后,点击“Configure”按钮以打开组件配置窗口:在组件配置窗口中使能开发板(底板)上的VCOM电路:

2021-07-14 10:33:53 1356 1

原创 EFR32 如何用串口终端代替NCP commander来做RF测试

当客户没有专业的蓝牙测试仪(如Anritsu MT8852B),只有频谱仪、蓝牙信号发生器等仪器的时候,可以使用Simplicity Studio v5里面的Bluetooth NCP commander配合NCP例程来做RF测试。但是,现在Bluetooth NCP commander还只能识别原厂开发板上的JLink CDC串口,不能识别其他的串口,而且它还不能脱离Simplicity Studio v5单独运行,所以在使用上不太方便,尤其是在做产线上的RF测试的时候。由于NCP跟主机之间是用串口来

2021-07-12 18:02:25 1094

原创 如何让用户可以修改BLE设备名

有些应用场景,最终客户(用户)希望可以在手机APP上修改BLE设备的设备名称。实现这个功能的方法如下:修改“Device Name”特性的设置,把“Variable length”选项勾上,如下图:添加新的服务“New Name”,设置保持默认设置即可。 在新的服务下添加新的特性“New Name”,设置如下:保存GATT配置,并点“Generate”生成代码。 在app.c中的appMain函数中添加如下代码: case gecko_evt_gatt_server_...

2021-07-12 17:58:54 963

原创 蓝牙(BLE)传输数据的吞吐量

修改上一篇文章的程序,client定时发送数据,server把收到的数据写入flash而不发送到串口。测试BLE传输数据能达到的最大吞吐量,结果如下:1)2.5 KB/s @interval = 40 ms, latency = 0, client每40 ms调用gecko_cmd_gatt_write_characteristic_value发送200字节数据;2)5 KB/s @interval = 20 ms, latency = 0, client每40 ms调用gecko_cmd_gatt

2021-07-12 17:55:47 2475

原创 EFR32蓝牙串口透传程序流程

从设备(server) 主设备(client) @gecko_evt_system_boot_id gatt_set_max_mtu, le_gap_start_advertising 从广播;主扫描 @gecko_evt_system_boot_id gatt_set_max_mtu, le_gap_start_discovery ...

2021-07-12 17:51:44 991

原创 EFR32用例程进低功耗模式电流大的问题

用EFR32BG22做的BLE模块,烧录soc-empty例程,用Wireless Starter Kit Mainboard (BRD4001A)和Simplicity IDE里的Energy Profiler测量运行电流。发现在休眠状态(EM2)下的电流有1 mA多。经检查发现,程序里使能了调试串口打印:#define DEBUG_LEVEL 1如果关闭串口,那么休眠电流可以降低到几uA的水平(Energy Profiler里读不出精确的数字)。如果既要有调试信息,又要低功耗,那么可以在

2021-07-09 17:26:36 865 1

原创 EFR32如何在应用程序中通过BLE 进行OTA升级

Bluetooth SDK里的soc-empty例程里面包含了一个AppLoader,可以用OTA_DFU(Over The Air -Device Firmware Upgrade)的方式升级应用程序。但是这个方式需要主机端(手机APP)也按照Silabs定义的OTA profile(包括服务和特性的UUID,以及升级过程中的主从设备之间的交互流程)来做。实际应用中,通常需要按照生态系统(如腾讯连连)定义的OTA协议来对设备的软件进行升级,因此需要使用Gecko Bootloader配合应用程序来实现

2021-07-09 17:14:37 1196

原创 EFR32BG不受限制输出20dBm的方法

Silabs的协议栈对蓝牙广播信号输出>10dBm有下面3个限制:要使能AFH; 环境中要有15个以上的可用信道(没有其他无线信号占用这些频道),否则会自动把输出功率降到10dBm。 要用BLE 5.0定义的Extended advertisements,但是BLE 4.x的设备(目前的大部分手机)无法接收这种广播信息。但是可以通过下面的方法绕开这些限制,实现输出20dBm的iBeacon:在iBeacon例程上,修改了两个地方,如下:/* Gecko configuration p

2021-07-09 17:00:57 431

原创 如何把某个EFR32型号的工程修改给另一个型号用

修改工程属性中的Board/Part/SDK:修改工程属性中的编译设置的Includes中的与型号相关的路径:有三个:"${workspace_loc:/${ProjName}/platform/Device/SiliconLabs/EFR32MG22/Include}""${workspace_loc:/${ProjName}/platform/Device/SiliconLabs/EFR32MG22/Source}""${workspace_loc:/${ProjName}/

2021-07-09 16:55:38 181

原创 EFR32 xG1x的bootloader被擦除

问题描述:用Simplicity Studio的调试功能下载程序到芯片,CPU不停在main入口处,而是直接跑飞。用Debug界面上的复位按钮把芯片复位,可以看到CPU停在地址0x0FE10000处,但是反汇编窗口显示该处全是0xFF。如下图表,此处是bootloader。用Simplicity Studio或Simplicity Commander是不会擦除这个区域的。但是如果用Segger J-Flash的整片擦除功能,那么就会把这个区域擦掉,如下消息所示:Connecting …Conn

2021-07-09 16:49:08 766

原创 EFR32BG蓝牙进行空中升级(OTA)时会把NVM擦掉

问题描述:使用emdrv/nvm保存数据,当使用IAR编译器时没有问题,但是使用GNU编译器,进行空中升级(OTA)时会把NVM擦掉。经分析程序和调试观察,发现存放NVM数据的变量——nvmData,在使用IAR编译器时和使用GNU编译器时分配的地址不一样。这个变量的定义如下:#define SL_ATTRIBUTE_ALIGN(X) attribute ((aligned(X)))#ifdef ICCARMstatic const uint8_t nvmData[NVM_PAGE_SIZE *

2021-07-09 16:32:13 407

在MCU上用软件实现仪表步进电机的驱动

步进电机由于具有角位移和输入脉冲数成正比并且没有累积误差的特点,而被广泛的用作汽车仪表的显示部件,其中具有代表性的是伟力驱动技术(深圳)有限公司的VID29系列步进电机。在多数情况下,人们会使用专用的驱动芯片来驱动步进电机,主控制器只需要给出方向控制信号和控制转动步数的脉冲就行了。另外,也有集成了步进电机驱动电路的MCU,如Freescale的MC9S12HY系列,其使用方法也比较简单。然而,在很多较低端的汽车仪表,如微型车、农用车、三轮货车和摩托车的仪表上,人们为了降低成本,希望能够不用专用驱动芯片或相对较贵的带驱动电路的MCU,而是用普通的MCU直接去驱动步进电 机。本应用笔记介绍了在Freescale的HCS08系列MCU上,如何用软件来实现对VID29系列步进电机的直接驱动。

2014-04-03

飞思卡尔Kinetis单片机内部EEPROM的使用方法

本文档是飞思卡尔内部培训的讲义,详细讲解了Kinetis系列单片机内部用FLASH模拟EEPROM的原理和使用方法,并附有完整的例程。

2014-04-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除