Siliconlabs

本系列设计指南的第五篇文章将教您如何像Pro一样构建源代码。在Simplicity Studio中构建代码是很简便的,因为安装程序会为您设置所有内容,您可以在安装程序完成后几分钟内开始调试项目。但不要过分依赖构建工具。这些工具不能代替你完成所有工作,而且您可能对这些工具感到失望。把C语言转换为二进制,然后写到你的MCU这一过程背后有许多步骤。

1 不要忘记复制或连接emlib文件

当您从头开始创建一个新项目并开始使用em_cmu.h或em_emu.h等emib库时,您将需要在新项目的emlib目录中复制或连接这些头文件的实现文件。Simplicity Studio自动链接到所有标准emlib库的头文件(.h文件),但不链接到实现文件。因此,您可以访问包含这些库文件的Simplicity Studio安装文件夹,并将其复制到emlib目录中,或使用Simplicity Studio的project Properties连接到这些文件。

复制或连接实现文件有不同的好处和代价。如果将实现文件复制到项目中,则项目将保留一个库文件的实现的私有副本,该文件不会随着Simplicity Studio版本的更新而改变。但是,头文件将随着Simplicity Studio版本的更新而改变。这可能会在库文件的声明和实现之间产生一些不匹配。如果连接到实现文件,您的库文件将随着Simplicity Studio版本的更新而改变,这可能会对您的软件产生不利影响。最适合您的解决方案是将头文件和实现文件复制到项目中,并删除头文件的链接。

请注意,如果您忘记添加库的实现文件的链接或副本,则仅在头文件中实现的某些功能仍然可以正常工作,而.c文件中实现的功能有时会在构建输出中给出不明显的错误。

2 从上到下解决问题

无论何时构建代码,编译器将向Simplicity Studio中的构建输出控制台窗口发送大量信息。窗口滚动,如果它发现错误,您的构建控制台将停在它发现的最后一个错误处。你不应该调试最后一个错误。调试编译器找到的第一个问题。在构建过程中稍后发生的警告和/或错误可能是由第一个错误引起的,如果您尝试解决由根问题引起的后续问题,您将会逐步解决错误。您还可以使用Simplicity Studio构建控制台底部的“Problems”选项卡。

3 不要忽略警告

默认状态下,编译器在构建过程中忽略警告。如果您的代码生成错误,构建将失败,但如果它仅生成警告,则构建将成功,然后可以使用该程序来写入MCU。您可能甚至不会注意到在构建控制台窗口上的警告。你必须向后并寻找任何具有淡黄色背景的行。确保您明白警告在告诉您什么。一些警告,如未使用的变量警告,您可以安全地忽略。但是,如果您想使用对计算很重要的变量,则警告将帮助您从逻辑上不正确的解决方案中拯救出来。如果您解决了所有的警告,则在构建过程开始时,您将看不到带任何色彩的背景。

为了在调试期间监视功能的输出,有时候会留下未使用的变量警告,这不是问题。这种情况下,您可以使用C编译器属性指令告诉编译器,未使用的变量是有意的,如以下代码:

uint32_t__attribute__((unused)) foo = some_function_with_return_value_to_inspect() ;

或者,您可以在整个代码中创建一个预处理器指令:
#defineUNUSED __attribute__((unused))
void some_function()
{
intUNUSED foo = some_function_with_return_value_to_inspect();
}

还有一件事情,你可以去除功能中未使用的参数。有时,您不需要在预定义的函数中使用给您的所有功能,如在中断处理程序或其他系统定义的回调函数中。通过在自定义实现中声明函数参数为void,您将告诉编译器您不打算在实现中使用这些参数。

void some_function(int foo)
{
(void) foo;
}

请注意,如果您碰巧错过在构建窗口的某处的警告,则会将该文件标记为已构建,并且在该模块发生更改之前不会重新构建,因此直到再次进行更改您将看不到警告。这可能会导致在不相关的代码被修改时,在后来的版本中出现问题。您可以随时通过从Project Clean...菜单选项清除构建环境,然后重新运行构建工具来强制重建所有文件。

您可以将编译器配置为将警告视为错误,如果您志在清理所有警告。将此选项设置为:

Project > Properties > C/C++ Build Settings >Warnings > Warnings asErrors (-Werror)

4 解释构建输出大小报告

当您构建项目时,一堆文本在构建输出控制台上滚动。完成后,如果构建成功,在显示“Build Succeeded”之前的最后一件事是运行大小工具:

arm-none-eabi-size"energy_profile_only.axf"
textdata bss dec hex filename
1188104 32 1324 52c energy_profile_only.axf

这个工具是给你一个关于你刚刚建立的代码需要的闪存和RAM的报告。这里是什么这些东西的意义:

文本:
EFM32闪存保留,用于编程指令和常量的字节。中断矢量表也被包括在该存储中。
数据:
由初始化数据的值被用于在预留的EFM32闪存中的字节数。这些都是会被分配到程序启动或函数调用的普通变量的值。
BSS:
程序启动时RAM保留的字节数,是程序所需的全局变量的总和,在堆顶部结束。
Dec:
文本+数据+ BSS的总和。这个数字有没有实际意义。

如果您尝试构建一个具有比您的特定EFM32部分可用内存更多的RAM的文件,那么您甚至不会访问构建报告。你会得到一个相当直接的编译器错误。例如:
int really_big_array[10000];
void some_function()
{
really_big_array[0] = 0;
}
int main(void)
{
/* Chip errata */
CHIP_Init();

some_function();
}

结果:
c:/...bin/ld.exe:some_program.axf section `.bss' will not fit in region `RAM'
c:/...bin/ld.exe:region RAM overflowed with stack
c:/...bin/ld.exe:region `RAM' overflowed by 7368bytes

请记住,这是在程序开始运行时分配的内存。程序启动后使用的内存量将根据调用的函数和动态分配的内存而改变。

5 对项目属性中的构建过程进行更改

项目属性菜单选项有许多设置可以控制您的构建。这个工具避免了复杂的命令行操纵,并将所有设置存储在项目目录中的.project和.cproject文件中。在Project> Properties > C/C++ Build Settings菜单中配置构建过程的最重要的方面。在这里,可以选择整体构建,无论您正在构建能够调试或准备发布的项目。然后,Memory Layout, C Compiler,Assembler, 和Linker tools都可以单独控制,这使您具有相同的功能和灵活性,就像您已经从命令行运行这些工具一样。

调试版本允许您单步执行并检查变量和内存的内容,但对于性能或代码大小来说不是最佳的。选项树上的顶级节点是Debug Settings,它允许您控制调试级别。

发布版本针对更好的性能和代码大小优化,可以在GNU ARM C编译器 Optimizations菜单中的相同Settings区域内控制优化级别。您可以看到,选择“Release vs. Debug”将优化级别从Most(-O3)更改为None(-O0)。

Settings菜单中的Memory Layout菜单项可让您将程序以闪存和RAM的形式放在您指定的地址上。如果您的需要很复杂,您可以使用自定义链接描述文件,或者只需点击Override default flash options或Override default RAM options的选项。通过覆盖默认的闪存选项的原点,您可以将多个程序写入同一个 EFM32芯片而不擦除其他。这是引导程序的配置方式。

引导加载程序通常从地址0开始,并且大小受限(使用LENGTH参数),以便使构建工具警告您的引导程序是否变得太大,无法适应分配的空间。然后,您的应用程序(Simplicity Studio中完全不同的项目)以高于引导加载程序的地址启动。这样,通过JTAG从Simplicity Studio加载您的应用程序代码不会擦除引导加载程序。请注意,为了使您的应用程序代码以零以外的地址运行,引导加载程序必须使用应用程序的地址正确加载程序计数器,以便应用程序可以从复位运行。有关引导加载程序的更多详细信息,请参见第16章。

6 在构建文件中进一步调查构建工具输入和输出

当您的构建过程完成并且成功构建,Simplicity Studio将构建过程的输出文件放置在项目中的两个目录之一中。这些目录称为GNU ARM v4.8.3 - Debug或GNA ARMv4.8.3 - Release,具体取决于您的构建是否是调试或

这些目录是构建过程的工作文件夹,不应直接修改 - 它们将被覆盖在每个构建中,因此可以从版本控制系统中排除。这些目录包含用作某些构建工具和某些工具的输出的输入的文件。但是,您可以检查构建过程的结果,以查看哪些工具正在执行。详细描述这些文件超出了本章的范围,但下表提供了一个总结。

makefile和* .mk文件:
根据Project Properties的设置,用于配置编译器的脚本或“make”工具,由Simplicity Studio自动生成。

.ld
基于Project Properties的设置,Simplicity Studio代表您生成的链接描述文件。链接在编译器之后运行。

.map
链接工具的输出。该文件包含有关内存中构建工具放置您的功能和数据的信息。

.axf
对象代码加调试器信息。该文件由Simplicity Studio调试器使用,可以在设备上实时调试软件

.hex
您构建的机器代码的ASCII文本表示

.bin
机器码二进制图像。这是在编程期间最终将转换为Flash的文件以及用于引导加载程序的源文件。

在下一节中,我们将介绍最后一步,在EFM32上调试软件。

围观 72

来源:SiliconLabs微信公众号

在上一节中,您了解了一些软件开发的基本实践和提示。我们在本节继续讨论这些主题,包括内联函数,读取和写入闪存(包括用户页面闪存),以及如何避免缓冲区溢出。我们将讨论类型转换的潜在问题,以及如何在出现问题时用配置锁解决问题。

根据下列重点步骤写好代码,一切都会更好!――续
(本系列1到8部分请参加往期文章:
http://community.silabs.com/t5/Official-Blog-of-Silicon-Labs/Essential-B...

九 内联函数的影响与限制

如果您在函数的前面定义关键字“inline”,则告诉编译器您希望将该函数复制到代码中,就像是直接输入代码而不是作为函数。作为程序员,你希望这可以加快代码执行速度。每当在C中调用函数时,输入参数的内容,在函数完成时,代码应该与返回地址一起被放置到栈上,然后代码跳转以执行函数。通过内联函数,您打算绕过该将数据移入和移出堆栈的时间。然而,C编译器或多或少地会用到这一技巧,因为小的函数将由编译器自动内联。编译器将忽略对大型函数的这种内联建议,编译器已经确定这些函数不会从加速中获益。
内联函数不能包含本地静态变量。由于函数内容要在代码中替换,因此对函数作用域私有的静态变量没有意义。内联函数没有作用域。

十 读写闪存的区别

在EFM32中从闪存的任何区域读取数据非常简单。可以使用指向内存地址的指针访问闪存,如:
volatile uint8_t* address = 0x1000;
uint8_t my_value =*address;

通过在地址变量前面放置星号,您可以解除引用指针,这将提供系统地址0x1000的字节大小的内容。从闪存检索的字节数将根据my_value的变量类型而有所不同。例如,定义为uint64_t的my_value将从地址0x1000到0x1007同时获取8个字节。因此,执行my_value ++作为64位无符号整数指向0x1008。

写入闪存是一个更复杂的业务。所有闪存将存储器组织成“页面”,其将可写入单元组合在一起,成为只能作为一组擦除的chuck。因此,如果要写入单个字节的非易失性存储器,则必须先擦除整个页面。对于程序员来说,这意味着你必须首先读取整个页面的内存,将它存储在RAM中,擦除页面,然后将修改的字节写回整个页面,你在操作的中间不能失去电源,否则你将永远失去了那个页面的数据。通常也有时间含义,因为擦除和写入页面比读取值需要更多的时间。当一页闪存被擦除时,该页的所有内容被复位为1,或在字节大小的存储器查看器中为0xFF。因此,当你写一个字节到内存,你只是清除那些不是1的位。
要写入EFM32闪存,另一个要求是,写入闪存的功能必须驻留在RAM中,而不是在正常执行代码所在的闪存中,在那里相同的代码正被执行。这要求任何意图写入闪存的函数也将被执行的RAMFUNC声明,就像在ramfunc.h库实用程序文件中定义的那样。

十一 将持久数据存储在Flash用户页面闪存中

主闪存从地址0开始,并根据EFM32模型有着不同的容量上限。有关特定芯片的主闪存结束的位置,请查看参考手册。除了内置闪存,还有一个内存区域,用于外部闪存扩展,其位于内部主存储器之外,最高可达24 MB。上一节中所述的任何读取或写入主闪存的操作都可用于访问主闪存。但是,每次对芯片编程时,或者如果器件被擦除,存储在程序使用的区域中的数据将被新的代码覆盖。因此,当执行闪存更新过程时,例如,在引导加载器中,通常使用对主闪存的读取或写入。您当然可以随意使用位于程序大小以上的闪存,只要您意识到如果芯片通过器件擦除操作或JTAG编程序列擦除,它将被擦除。

EFM32提供了一个单独的闪存存储器页,它不会被器件擦除操作或JTAG编程操作擦除。闪存的这个区域称为用户页,并从地址0x0FE00000开始。可用的内存量是单页,并且闪存页面的大小根据EFM32芯片的型号而变化。有关闪存页面的大小,请查看数据手册或参考手册。您可以将此页面用于从设备擦除操作(例如设备序列号,设备校准数据或每个设备特定的任何数据)开始,从引导到引导的设备上保留的任何内容。

十二 避免缓冲区溢出和可能造成的破坏

当使用计算机开发代码时,您很幸运能在具有操作系统,内置文件系统和显示屏幕的系统上开发。当你的软件遇到麻烦,操作系统开始采取行动,帮助你,并通知你,你试图访问超出程序范围内的内存,或者你造成了一些故障。在开发嵌入式代码时,你没有这些帮助。没有操作系统来监视事情,以确保你的程序保持在一个很好定义的边界。如果你的代码决定写数据到地址零或一百万,MCU将尝试做它被告知的任何事情。它不能告诉你,你不知道你在做什么,因为没有限制你的程序可以做什么。你种情况有好坏两个方面。

嵌入式开发人员面临的一个大问题是缓冲区溢出。在嵌入式中工作意味着对存储器地址的大量直接操作。如果你的程序开始表现不规律,或者你看到一个看起来改变其值而不设置的变量,缓冲区溢出可能是罪魁祸首。

首先要注意的事是显而易见的。如果定义一个长x个字节的数组,请不要写超出x-1。如果在名为foo的数组中有x个项目,则只能将foo [0]映射到foo [x-1]。坏事是,如果你寻址foo [x],foo [x + 1],等等,你的代码仍然有效。 MCU将满意地写入任何其他变量恰好超出foo [x-1]的位置。然后你的项目开始出现问题。

当你调整指针,而将指针转换为不同的类型时,这也可以失去控制。例如:

void some_function()
{
// Array of just 4 bytes
uint8_t my_array[4];

// Pointer to group of 4 bytes
uint32_t * my_ptr =(uint32_t *) my_array;
// foo is assigned all 4 bytes of my_array,
int foo =*my_ptr;

// then my_ptr is incremented by one
// which to my_ptr's type means 4 bytes
// So my_ptr is now sitting out of bounds
my_ptr++;
}

以上演示了为什么使用在创建时是单向键入的结构,但稍后由不同类型的指针使用需要小心的原因。你可以做类型转换,但并不意味着你应该做。

另一种可以遇到缓冲区溢出问题的方法是忘记局部范围的限制。在C中,函数完成的大部分工作都是在传递给函数的指针上执行的。C函数的返回值通常被限制为“状态”字节,因为简单的值很容易从堆栈中的C函数返回,而其他结构很难返回。例如,一个简单的数组是局部的一个函数:

// This function will generate a compiler warning:
// warning: function returns address of local variable
int* some_function()
{
int my_array[4];
return my_array;
}
// This function has no warning!
int* some_other_function()
{
int my_array[4];
int* foo = my_array;
return foo;
}

一旦函数返回,分配给my_array的内存将被系统回收并分配给需要内存的下一个东西。如果从C函数返回一个指向本地数组的指针,编译器不会警告你,MCU会做你所要做的事情。如果在函数返回之后没有新的内存分配,代码有时会工作。你的解决方案将是间歇性的!

// This is a better way, pass pre-allocated pointers intothe function
// “int my_array[]” and “int * my_array” are identicalfor function parameters
void some_new_function(int my_array[])
{
my_array[0]= 1;
}

十三 精通类型转换

当你在嵌入式开发中“触及核心”时,你会经常使用小量的信息,所以你最终经常使用有限的可变大小(例如8位寄存器)寄存器,从一种类型转换到另一种类型。本节的一些例子展示了在uint8_t类型和uint32_t类型上增加指针时,你必须注意对地址的影响。此外,还必须了解C编译器如何解释和转换类型。

将类型从一种类型转换到另一种类型实际上不执行任何转换。它不是一个函数,而只是一种告诉编译器如何解释数据的方法。当你分配不同类型的变量,C编译器应该警告你,但编译器并不总是警告你这一点。例如,考虑将有符号整数转换为无符号整数的情况,如下所示:
int8_t a = 0; // Range is -128 to +127
uint8_t b = 0; // Range is 0 to 255
long c = 0; // Range is huge, both positive and negative
a =-64; // a can be negative
b = 64; // b can only be positive
c = a + b; // c is 0
a = b; // Converting a signed to unsigned is OK, in this case
c = a - b; // c is again 0
b = 128; // b is now bigger than a can represent
a = b; // a is now converted to -128
c = a - b; // c = -128 - 128 = -256!

这个例子显示了当你的变量变大时会遇到的麻烦。事情工作正常一段时间,但然后当你的变量超过范围,他们开始失败。确保在转换类型时知道您想要什么。大小为8的uint不能容纳超过0到255范围的任何内容,8位的int不能容纳超出-128到+127的任何内容。简单地把一个大的uint8_t作为一个int8_t不能将你的int8_t变为一个更大的int。它仍然限制在+127。如果你想增加它的范围,你必须使用更大的类型,如int16_t。

十四 使用配置锁来缓解故障代码的问题

有时候,当嵌入式工程师对指针进行数学运算时,我们会使用我们的软件来影响硬件。一种保护你的代码不因缓冲区溢出和其他糟糕的指针算法而造成严重错误的方法是使用配置锁。许多EFM32外设上可用的配置锁需要一个特殊值写入配置锁寄存器,以允许更改外设配置。这防止错误行为代码改变设备的整体配置。

编码成功的关键

从现有示例开始,然后使用命名良好的变量和大量注释记录您的更改。进一步了解C语言,并了解在何处以及如何声明变量和函数。不要尝试写入尚未擦除的闪存或超出变量可访问范围的内存。

在下一节中,我们将学习如何在SimplicityStudio IDE中更好地控制软件构建。

围观 110

光模块是光纤通信中的重要器件,主要由光接收功能、光发射功能、数字诊断功能三部分组成,实现光信号和电信号的相互转换。目前主要应用在数据通信、传输网络、存储网、云计算等领域。

数字诊断功能设计

数字诊断功能主要是对光模块的供电电压、模块温度、偏置电流、接收光功率、发射光功率5个模拟量的信号进行实现监测,通过这些参数判断光模块的工作状况,便于光通信链路的维护。

目前数字诊断通用的设计方案有两类。一类是使用固定功能的器件实现光模块的相关协议,这种芯片功能齐全、设计简单,但价格比较贵、设计不灵活、扩展性不好。另一类是使用MCU+EEPROM+数字电位器的方案,这种方案采用三个IC,整体PCB的尺寸比较大,设计较为复杂,可靠性降低。除了上述两类方案外,本文将介绍的是采用单颗MCU的解决方案。这种新方案具有高精度,可靠性好,性价比高等优点,相信会是未来光模块数字诊断的大趋势。

高集成MCU助力光模块信号实时监测

新方案推荐选择芯科科技(Silicon Labs)公司的EFM8LB1系列MCU。该系列产品具有如下的特点与优势,使其更适合光模块设计使用:

芯片主频72MH,可高速处理模拟及数字信号;
集成14位精度的多通道ADC,采样精度高于同类产品,完全满足光模块对信号精度的要求;
集成4路12位精度的DAC,无需使用外部的数字电位器,可减小PCB尺寸和BOM成本;
集成I2C SLAVE功能,速度可达3.4Mbps,可满足光模块对高速通讯速率的要求;
集成±3 °C的温度传感器,无需使用外部的温度传感器;
QFN24 3*3mm小封装,减小了光模块的PCB尺寸。

以下是基于EFM8LB MCU方案的结构图(图1)及软件流程图(图2)。


图1:基于EFM8LB MCU方案的结构图


图2:软件流程图

来源:SiliconLabs公众号

围观 68

来源:SiliconLabs

近期,SiliconLabs(芯科科技)发布了汽车级EFM8 MCU,超低功耗的EFM8SB1 Sleepy Bee和EFM8BB1/BB2 Busy Bee。这些新型的汽车级8位MCU专为车内触摸界面和汽车电动控制应用而设计,有三个改变车内镜子,顶灯和座椅的主要原因。

优异的性能

AEC-Q100认证的EFM8SB1系列提供了先进的片上电容触摸技术,以取代物理按钮。与所有EFM8 MCU一样,这些器件通过先进的特性和功能提供同类最佳的8位性能,包括高速流水线8051内核,超低功耗,精密模拟和增强型通信外设,片上振荡器,小型 -footprint封装和获得专利的交叉开关架构,支持灵活的数字和模拟外设多路复用,以简化PCB设计和I / O引脚布线。汽车级EFM8SB1设备支持从零下40 到零上85 oC的外部温度,内核速度高达25MHz,闪存达8 kB。该MCU集成了12位模数转换器(ADC),高性能定时,温度传感器,和增强型SPI,I2C 和 UART序列端口。片上高精度电容到数字转换器提供了超低的,小于1 µA的唤醒触摸功能和12个强大的电容触摸通道,无需在许多应用中使用on/off开关。

EFM8BB1/ BB2器件支持零下40至零上125 oC的温度范围,适用于必须满足严
格的汽车认证,在不同温度范围内工作,同时在各种温度下都能提供高性能的应用。EFM8BB1器件为成本敏感型设计提供最优的性价比,而BB2产品则提供增强的模拟和数字外设性能。这些MCU是模拟密集型车身控制应用(例如座椅调节,风扇控制,车窗升降器和油箱传感器)的不错选择。

领先的性价比

EFM8BB1/ BB2 Busy Bee MCU为成本敏感型应用提供了性能,能效和价值的平衡。随着核心速度扩展到50 MHz和2-64 kB闪存大小,MCU提供了一系列高性能外设,包括高分辨率12位ADC,高速12位DAC,低功耗比较器,电压参考,增强吞吐量通信外设和内部振荡器,封装尺寸小至3 mm x 3 mm。这种独特的单芯片集成消除了对分立模拟组件的需求,降低了系统成本和电路板空间。

大幅简化设计

EFM8SB1系列设计来用于处理各种舱内触摸接口和车身电子电动控制应用,提供先进的片上电容触摸技术,可轻松的替代物理按钮。EFM8BB1 / BB2 Busy Bee系列具有高性能模拟和数字外设,使这些设备成为控制电动后视镜,头灯和座椅的通用选择。

SiliconLabs支持触摸感应接口设计,其电容感应库在Simplicity Studio™开发工具套件中可获得,提供了将电容感应接口添加到汽车应用所需的所有功能和算法。Simplicity Studio为设计人员提供了立即可用于生产的固件,从扫描按钮到过滤噪声。通过使用电容传感分析器可视化实时数据和电容传感按钮的噪声电平,开发人员可以轻松地定制触摸和无触摸阈值和噪声过滤设置,大大简化了对车载用户界面添加电容触摸。

欲了解更多SiliconLabs汽车级EFM8系列MCU的更多技术信息,请访问:http://cn.silabs.com/products/mcu/8-bit/efm8-busy-bee/pages/efm8-busy-be...

围观 40

我们知道设计师每天都面临着一系列紧张的设计挑战,以不断的将产品推向市场。这就是为什么我们总是充满激情的原因,因为我们可以发布真正先进的,行业领先的创新解决方案,以帮助我们的客户– 正如我们的新的BGM12x系统级封装(SiP)模块。欢迎了解详细的BGM12x蓝牙SiP模块的各项功能优势。

作为业界最小的具有集成天线的蓝牙低功耗SiP模块,BGM12x为设计人员提供了一种有效地将许多物联网应用小型化的终极方式,其既具有成本效益,又不牺牲性能。我们认为BGM12x有望改进许多应用类型的创新,包括运动和健身可穿戴设备,智能手表,个人医疗设备,无线传感器节点和其他空间受限的连接设备。

BGM12x的最大优势之一就是通过集成天线,无线电,MCU和软件堆栈,帮助减少传统开发周期,从而减轻设计人员的压力。借助BGM12x,工程部门不必花费任何时间进行天线设计和认证测试。而且很简单,市场上没有任何其他具有类似的与尺寸和性能组合的产品,结合了高性能天线和一个保持更新的蓝牙堆栈。除此之外,设计师可以利用最受欢迎的ARM Cortex-M4处理器。

此外,使用无线模块减少了设计时间和降低了长期成本和风险,这只是所有好处的一部分。通过成熟的即开即用系统,设计人员可以跳过复杂的RF设计,并继续为其核心应用增加价值– 也就是所有对IoT开发有意义的事物。而且其尺寸非常小,使其非常容易用于电路板间隙仍然是一个关键问题的双层PCB设计。

我们也很高兴,像所有的Blue Gecko模块,设计师可以以基于模块的设计开始,但很容易的,以最小的系统重新设计需求和重复使用全部软件,转移到Blue Gecko SoC,因为非常相似的技术和相同的API。其次,它可以帮助设计师节省大量的时间,增加灵活性,减少长期的问题。

就灵活性而言,我们也很高兴BGM12x得到我们高效的无线软件开发套件(SDK)的支持,使设计人员能够使用主机或BGScript完全独立的操作。我们的Bluegiga BGScript工具可让设计人员快速创建蓝牙应用,而无需使用外部MCU来运行应用逻辑,从而最终降低系统成本和电路板成本,加快上市时间。

BGM12x蓝牙SiP模块特性概述:
● 同类最佳SiP模块尺寸:6.5 mm x 6.5 mm x 1.5 mm
● 集成芯片天线具有出色的射频性能(70%的天线效率)和射频选项,用于连接外部天线
● 输出功率:+3 dBm至+8 dBm,支持范围为10米至200米
● 基于Silicon Labs的Blue Gecko SoC,结合2.4 GHz收发器与40 MHz ARM Cortex-M4处理器内核以及256 kB闪存和32 kB RAM
● 节能蓝牙解决方案消耗9.0 mA(峰值接收模式)和8.2 mA @ 0 dBm(峰值发射模式)
● 硬件加密加速器,支持高级AES,ECC和SHA算法
● 行业验证的Silicon Labs蓝牙4.2堆栈,和经常性的功能增强
● 通过全球RF认证快速推向市场
● 易于使用的开发工具:Simplicity Studio,Energy Profiler,BGScript
● 全球应用工程支持

如何获得该模块
我们总鼓励人们通过入门套件或示例模块来探索我们的新技术,BGM12xBlue Gecko也不例外。点击下方链接了解如何获得第一手的技术资料。
http://cn.silabs.com/products/wireless/bluetooth/Pages/bluegecko-bluetoo...

白皮书:最小化物联网设计
为了更好地理解BGM12x对无线应用开发的影响,我们强烈建议您查看我们的白皮书,该白皮书由Silicon Labs Tom Nordman和Pasi Rahikkala撰写,概述了有价值的信息,以供设计师了解,因为他们是推动物联网开发的主动力,白皮书包括天线集成和系统级封装模块。我们很高兴看到帮助客户使用BGM12x模块在自己的产品组合中发现和实施的创新,以使物联网领域变得更加丰富,更加动态化。

来源: Siliconlabs

围观 65
订阅 RSS - Siliconlabs