傅工笔记
文章平均质量分 65
fuzhiqiang76
傅工,年四十有余,以做芯片技术支持为生。其人貌不惊人,胸有点墨;喜好编程,技虽不高,却常助人debug,为生计使然,非无自知之明也。熟知单片机、C语言,亦晓物联网、电机控制,略懂Linux、Python。
展开
-
用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 · 857 阅读 · 1 评论 -
在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 · 636 阅读 · 0 评论 -
移植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 · 1305 阅读 · 0 评论 -
EFR32如何把调试接口SWD管脚改为串口使用
有时,客户的板子上没有引出到外面的串口,原因可能是:应用需要的IO管脚数量多,把管脚占用完了;或者板子面积有限,无法放下更多连接器;如此等等。但是当板子要做RF性能测试时,必须要有一个串口连接到电脑或仪器上。因此,就需要把调试接口(SWD)管脚改为串口来使用。下面以配合BGTOOL使用的NCP TARGET例程来说明,修改方法如下:修改hal-config-board.h中的串口管脚定义:#define BSP_UARTNCP_TX_PIN (2U...原创 2021-07-14 11:19:57 · 1098 阅读 · 0 评论 -
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 · 542 阅读 · 0 评论 -
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 · 933 阅读 · 0 评论 -
EFR32上用DMA实现UART高速数据传输
当用UART来做高速大数据量传输时,需要结合DMA来使用,以便减轻CPU的负担,避免影响其他程序功能。(Silabs官方开发板上的Jlink CDC串口(VCOM)默认只能支持115200的波特率,若要用其他波特率,需要在Jlink的admin终端里去修改。)因为DMA一次传输一块数据(如100字节),但UART传输数据没有固定长度的帧,所以需要加入一个超时机制,每隔一段时间把收到的零散数据取出处理。EFR32系列的USART模块带有一个硬件定时器,可以用它来产生接收超时中断。不多解释了,上代码:原创 2021-07-14 11:06:00 · 1541 阅读 · 0 评论 -
如何用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 · 1129 阅读 · 0 评论 -
Simplicity Studio v5工程配置printf串口输出
Simplicity Studio v5集成开发环境进一步强化了“面向组件(Component)编程”的设计理念。虽然这个理念在Windows和Android等的应用程序设计中早已深入人心,但是跟传统的单片机编程的习惯有相当大的差异。下面,以如何把printf输出到串口终端为例,略窥SS v5的组件的使用方法。打开软件组件选择窗口,添加开发板的控制组件:添加了以后,点击“Configure”按钮以打开组件配置窗口:在组件配置窗口中使能开发板(底板)上的VCOM电路:原创 2021-07-14 10:33:53 · 1434 阅读 · 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 · 1165 阅读 · 0 评论 -
如何让用户可以修改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 · 1046 阅读 · 0 评论 -
蓝牙(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 · 2593 阅读 · 0 评论 -
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 · 1061 阅读 · 0 评论 -
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 · 920 阅读 · 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 · 1322 阅读 · 0 评论 -
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 · 472 阅读 · 0 评论 -
如何把某个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 · 204 阅读 · 0 评论