AWorks中开发设备驱动一般方法

ZLG致远电子 2018-06-11 08:59 次阅读

本文导读

本文详细介绍了AWorks中开发设备驱动的一般方法。基于这些通用的方法,用户可以尝试独立开发一些设备的驱动,以进一步加深对AWbus-lite的理解。同时,当后续遇到一些AWorks 暂不支持的设备时,也可以自行开发设备相应的驱动。

本文为《面向AWorks框架和接口的编程》第三部分硬件篇——第13章——第4小节:驱动开发的一般方法。

13.4  驱动开发的一般方法

上面以LED为例,从接口定义到驱动开发都进行了详细的介绍,对AWbus-lite中相关的概念有了更加深入的理解。完整的设备相关程序主要分为三个部分:

  • 通用接口

位于最上层,与具体硬件无关,由应用程序直接访问,构成可以跨平台复用的应用程序。虽然通用接口看似简单,但要完成其完善的定义并不容易,往往需要经过大量项目的积累,从接口功能和设计原则等多个方面考虑,才能定义出既简洁又实用的通用接口,一般来讲,通用接口无需用户定义,由广州致远电子有限公司统一定义和维护。

  • 接口实现

位于中间层,完成如抽象方法、LED服务、METHOD类型等的定义。中间层同样与具体硬件无关,主要使用抽象方法的形式实现上层定义的通用接口。该层往往在定义通用接口时由广州致远电子有限公司实现。对于驱动开发者,仅需了解这里定义的各个抽象方法,以便在开发具体驱动时,根据具体硬件实现各个抽象方法。

  • 具体驱动实现

位于最底层,根据具体硬件完成抽象方法的实现,定义Method对象列表,提供相应的服务。随着AWorks的不断发展和完善,迄今为止已经积累了大量的设备驱动,常见设备均已支持。由于实际硬件的千差万别,用户可能遇到AWorks暂不支持的设备(暂无对应驱动),此时,用户可以自行开发设备驱动。

在LED驱动开发的介绍中,由于很多概念初次遇到,因而花费了较多篇幅介绍这些基本概念,略显繁琐。实质上,驱动开发的核心就是完成一个驱动信息结构体常量的定义,比如LED驱动开发的结果,就是完成了结构体常量

__g_drvinfo_led_gpio的定义(详见程序清单13.48)。下面,针对驱动开发进行简要的梳理,归纳出驱动开发的一般步骤。

1、 定义驱动名;

2、 确定总线类型和设备类型;

3、 定义实际设备类型;

4、 定义设备信息类型;

5、 实现三个阶段的初始化函数;

6、 实现设备要提供的服务,比如LED服务;

7、 定义Method对象,以便上层获取设备提供的服务;

8、 定义驱动结构体常量,实现驱动注册函数。

在上一章中,直接使用了PCF85063驱动定义的驱动名、设备类型、设备信息类型等,完成了PCF85063硬件资源的定义(详见程序清单12.12)。下面,将按照驱动开发的一般步骤,尝试基于AWorks中现有的RTC架构,开发PCF85063实时时钟芯片的驱动。深入理解PCF85063驱动的具体由来。

PCF85063是NXP半导体公司推出的一款低功耗实时时钟/日历芯片,它提供了实时时间的设置与获取、闹钟、可编程时钟输出、定时器/报警/半分钟/分钟中断输出等功能。引脚封装详见图13.3,其中,SCL和SDA为I2C接口引脚,VDD和VSS分别为电源和地;OSCI和OSCO为32.768KHz的晶振连接引脚,作为PCF85063的时钟源;CLKOUT为时钟信号输出,供其它外部电路使用;INT为中断引脚,主要用于闹钟等功能。

图13.3 PCF85063引脚定义

13.4.1  定义驱动名

作为PCF85063的驱动,可以直接将驱动名定义为:"pcf85063",即:

基于此,基础驱动信息中p_drvname的值为:AWBL_PCF85063_NAME。

13.4.2  确定总线类型和设备类型

确定驱动所处的总线类型,对PCF85063作简要了解可知,该芯片通过I²C总线访问,芯片所处总线的类型即为:AWBL_BUSID_I²C。总线类型是一个非常重要的信息,驱动结构体常量、设备类型的定义均与总线类型相关。

确定驱动对应设备的类型,是普通设备还是特殊的总线控制器设备。对于PCF85063设备,其不能再继续扩展下游总线,仅能提供RTC功能,是普通设备,即对应的设备类型为:

AWBL_DEVID_DEVICE。

基于此,基础驱动信息中bus_id的值为:

AWBL_BUSID_I²C | AWBL_DEVID_DEVICE

(或省略AWBL_DEVID_DEVICE,直接设置为

AWBL_BUSID_I²C)。

13.4.3  定义设备类型

实际设备类型从基础设备类型派生而来,以添加设备相关的私有成员。在AWBus-lite中,I²C总线上的设备基础类型定义为:

struct awbl_i2c_device。其定义详见程序清单13.53。

程序清单13.53 struct awbl_i2c_device类型定义

由此可见,struct awbl_i2c_device类型是从AWBus-lite基础设备类型派生而来的,当前并未添加任何其它成员,主要是为了方便后续扩展,增加I²C总线从机设备相关的私有成员。

基于此,PCF85063设备类型的定义形式详见程序清单13.54。

程序清单13.54 PCF85063设备类型定义(1)

虽然PCF85063并未直接从AWBus-lite基础设备类派生,但本质上,其还是属于AWBus-lite基础设备类型的派生类。对应类图详见图13.4。

图13.4 PCF85063设备类关系

显然,要完成PCF85063设备类型的定义,重点是考虑需要增加哪些其它成员。PCF85063设备的核心功能是为系统提供RTC服务,在AWBus-lite中,定义了RTC服务结构体类型struct awbl_rtc_service,其具体定义详见程序清单13.55。

程序清单13.55 RTC服务类型定义(awbl_rtc.h)

其中,p_next用于指向下一个RTC服务,使系统可以以链表的形式组织多个RTC服务。p_servinfo为RTC服务相关的信息,提供RTC服务时,必须指定RTC服务的信息,其类型struct awbl_rtc_servinfo的定义详见程序清单13.56。

程序清单13.56 RTC服务信息定义(awbl_rtc.h)

由此可见,RTC服务信息中仅包含ID号信息。每个RTC服务都具有一个唯一ID,当用户使用通用接口访问RTC服务时,需要传入一个ID号,用于指定需要使用的RTC服务。系统将传入的ID号与各个RTC服务对应的ID号一一比对,进而查找到指定的RTC服务。

p_servfuncs指向一个虚函数表,其类型struct awbl_rtc_servopts包含了RTC服务定义的抽象方法,详见程序清单13.57。

程序清单13.57 RTC抽象方法的定义(awbl_rtc.h)

显然,要使PCF85063能够提供RTC服务,驱动就必须实现这里定义的抽象方法,抽象方法的具体实现将在提供RTC服务小节中详细介绍。

p_cookie由驱动设置,系统在调用抽象方法时,将原封不动将其的作为抽象方法的第一个参数,传递给驱动使用。

PCF85063可以提供RTC服务,在设备类型中,应该包含一个RTC服务结构体成员,实现RTC服务实质上就是完成RTC服务中各个成员的赋值,系统上层获取RTC服务就是获取指向RTC服务结构体变量的指针。基于此,可以更新PCF85063设备类型的定义,详见程序清单13.58。

程序清单13.58 PCF85063设备类型定义(2)

当前仅仅从PCF85063的主要功能出发,完成了PCF85063设备类型的定义,若在开发过程中,发现需要在设备类型中增加新的成员,可以随时动态添加。

13.4.4定义设备信息类型

PCF85063可以提供RTC服务,提供RTC服务时,需要一并设置相应的RTC服务信息(为p_servinfo成员赋值),以供系统使用。当前的RTC服务信息仅包含一个ID号(详见程序清单13.56),ID号是一种唯一标识,不同设备提供的RTC服务对应的ID号是不同的,具体数值应由用户分配,为此,用户在使用PCF85063时,应该提供RTC服务信息,基于此,PCF85063设备信息类型的定义程序清单13.59。

程序清单13.59 PCF85063设备信息类型定义(1)

此外,PCF85063是一种I²C从机器件,I²C从机器件具有一个从机地址,该地址可以由用户指定。为此,设备信息可以新增一个addr地址信息。完整的定义详见程序清单13.60。

程序清单13.60  PCF85063设备信息类型定义(2)

13.4.5  实现三个阶段的初始化函数

实现三个阶段的初始化函数,以便为基础驱动信息中的驱动入口点p_busfuncs(详见程序清单13.19)赋值。在具体实现前,可以先搭建好软件结构,详见程序清单13.61。

程序清单13.61 三个阶段初始化函数的结构性代码

其中,__g_pcf85063_drvfuncs的地址即可作为驱动入口点p_busfuncs的值。

在实现各个初始化函数前,需要梳理出具体要执行哪些初始化操作。对于PCF85063,本驱动仅使用其提供的通用实时时钟功能,即获取或设置当前时间(年、月、日、时、分、秒等时间信息),闹钟、中断、时钟输出等功能均不使用。PCF85063在上电后,其时间即会正常运行,闹钟等功能处于关闭状态,由此可见,时钟方面,并不需要作任何特殊的操作。

特别地,PCF85063可以通过CLKOUT引脚输出时钟信号,信号的频率可以通过控制和状态寄存器2(control and status register2,寄存器地址为0x01)的低三位(bit2 ~ bit0)进行设定,详见表13.8。这些信息更加详细的说明可以通过PCF85063的数据手册获得。

表13.8 CLKOUT控制值与输出频率的关系

控制值的默认值为000,即输出频率为32768。由于本驱动并未使用CLKOUT功能,因此,应该将其输出关闭,避免其对外部电路产生影响,这就需要将控制值修改为111。

PCF85063需要通过I²C总线对其中的寄存器值进行访问。在AWBus-lite中,提供了I²C读写函数,用于对I²C从机设备进行读写,接口原型详见表13.9。

表13.9 I²C标准接口函数

在外设通用接口的介绍中,讲解了I²C通用接口(详见表7.14,接口命名前缀为“aw_”),对比可以发现,它们的形式非常类似,不同之处的仅有两点。

  • 操作的对象类型不同

在这里,以“awbl_”为前缀的读写接口操作的对象(第一个参数)是AWBus-lite中的I²C从机设备,类型为struct awbl_i2c_device,该类型的从机设备挂载在AWBus-lite中,基于AWBus-lite拓扑结构,可以知道该从机设备挂载的位置,从而获得其对应的I²C总线控制器,进而完成读写操作。

以“aw_”为前缀的通用I²C读写接口操作的对象是用户使用aw_i2c_mkdev()接口定义的通用I²C从机设备,类型为aw_i2c_device_t,这类设备是应用程序直接操作的设备,并没有挂载在AWBus-lite中,其对应的I²C总线控制器无法通过AWbus-lite的拓扑结构获得,因而,在定义设备时,必须通过ID号指定该从机设备对应的总线ID,系统通过ID找到对应的I²C总线控制器,进而完成读写操作。

显然,在PCF85063驱动程序中,I²C总线操作的对象是PCF85063。

PCF85063设备类型是基于

struct awbl_i2c_device类型派生而来的,而

struct awbl_i2c_device类型是基于AWBus-lite基础设备类型派生而来的,因此,在各阶段初始化函数中,若要对PCF85063进行读写操作,则可以将基础设备类型的p_dev指针(其实际指向的是PCF85063设备)直接强制转换为struct awbl_i2c_device类型的指针使用。

  • 参数个数不同

在通用I²C读写接口中,除p_dev外,仅

subaddr、p_buf和nbytes三个参数,分别表示寄存器子地址、读/写数据缓存、读/写数据字节数。而这里的读写接口多了flags和addr两个参数,分别表示从机设备属性和从机设备地址,实际上,通用I²C接口也有这两个信息,不过是在使用aw_i2c_mkdev()定义从机设备时,存储在了从机设备中,对于通用I²C接口,这两个信息在aw_i2c_mkdev()接口中指定。本质上,它们表示的含义是完全相同的。

从机属性的定义详见表7.15,主要指定了从机地址的位数、是否忽略无应答和器件内子地址(通常又称之为“寄存器地址”)的字节数;从机地址即I²C设备的从机地址。

例如,要将控制和状态寄存器2(寄存器地址为0x01)的低3位修改为111,以禁能CLKOUT输出,范例程序详见程序清单13.62。

程序清单13.62 禁能CLKOUT输出的范例程序

程序中,首先将p_dev转换为了PCF85063设备类型指针,并通过p_dev获得了设备信息,以获取其中的从机地址信息。然后使用读取接口读取出地址0x01的值,若其低三位不为111,则修改为111并重新写入寄存器中。

该段程序作为PCF85063的初始化程序,应该处于哪一阶段呢,由于I²C是一种相对低速的通信接口,读写数据往往比较耗时(毫秒级别),因此,建议放在第三阶段中。为此,可以完善第三阶段初始化函数的实现,详见程序清单13.63。

程序清单13.63 第三阶段初始化函数的实现

程序中,为了程序的简洁和可读性,使用宏的形式对p_dev的强制转换、设备信息的获取以及寄存器地址常量进行了定义。

由于不再需要执行其他初始化操作,因此,第一阶段和第二阶段的初始化函数可以为空。

13.4.6  实现通用服务

PCF85063可以提供RTC服务,在提供RTC服务前,需要完成设备中rtc_serv的赋值,其类型为struct awbl_rtc_service,回顾其具体定义,详见程序清单13.64。

程序清单13.64 RTC服务类型定义(awbl_rtc.h)

1.  p_next成员赋值

p_next用于系统组织多个RTC服务,对于单个RTC服务的提供者,其值设置为NULL。详见程序清单13.65。

程序清单13.65 p_next成员的赋值

2.  p_servinfo成员赋值

p_servinfo用于指向RTC服务信息,RTC服务信息由用户通过设备信息提供,基于此,其值直接设置为指向设备信息中的rtc_servinfo即可,详见程序清单13.66。

程序清单13.66 p_servinfo成员的赋值

3.  p_servopts成员赋值

p_servopts是实现RTC服务的核心,其定义了RTC抽象方法,驱动需要实现这些抽象方法, struct awbl_rtc_servopts类型的定义详见程序清单13.57,其中定义了三个抽象方法:

  • time_get:获取时间

  • time_set:设置时间

  • dev_ctrl:控制函数,当前未使用,保留给后续扩展,设置为NULL即可在具体实现前,可以先搭建好软件结构,详见程序清单13.67。

程序清单13.67 实现RTC服务中定义的抽象方法结构性代码

其中,__g_pcf85063_servopts的地址即可作为RTC服务中p_servopts的值。接下来,需要具体实现时间获取和时间设置函数。

在PCF85063中,地址0x04 ~ 0x0A的寄存器存储了时间信息,详见表13.10。对这些寄存器的读写即可完成时间信息的获取和设置。

表13.10 时间信息相关寄存器

注意,在寄存器中,数值的存储形式是BCD格式,即数值的十位和个位分别使用4位二进制数(一位十六进制数)进行表示。例如,秒值为23,则十位2使用4位二进制表示,即0010,个位3使用4位二进制表示,即0011,最终的结果即为0010 0011。对于秒值,由于十位的最大值为5,需要使用3位二进制表示,因此,秒值占用的实际有效位为7位(十位占用3位,个位占用4位)。不同秒值对应的寄存器值详见表13.11。

表13.11 秒值对应的寄存器值

分值与秒值的有效范围相同,占用7位有效位;对于小时值,PCF85063支持24小时制(默认)和12小时制,但在AWorks平台中,细分时间统一使用了24小时制,基于此,PCF85063也仅使用默认的24小时制,此时,小时值的有效范围为0 ~ 23,由于十位的最大值为2,需要使用2位二进制表示,因此,小时值占用的实际有效位为6位(十位占用2位,个位占用4位);对于日期值,其有效范围为1 ~ 31,十位最大值为3,需要使用2位二进制表示,因此,日期值占用的实际有效位为6位(十位占用2位,个位占用4位);对于星期值,其有效范围为0 ~ 6,仅包含个位,且最大值为6,只需要使用3位二进制数即可表示,因此,星期值占用的实际有效位为3位(仅个位占用3位);对于月份值,其有效范围为1 ~ 12,十位最大值为1,需要使用1位二进制表示,因此,月份值占用的实际有效位为5位(十位占用1位,个位占用4位);对于年份值,8位寄存器值全部用于表示年份值,十位和个位均占用4位,对于BCD码,使用4位二进制表示一位十进制数,个位和十位的最大值均为9,因此,年份值的有效范围为0 ~ 99。

为便于BCD码数据和实际数值之间相互转换,在AWorks中,定义了两个宏辅助宏,详见程序清单13.68。

程序清单13.68 BCD码转换辅助宏(aw_common.h)

对于获取时间,可以读取出各个寄存器的值,然后为p_tm细分时间结构体中的各个成员赋值,范例程序详见程序清单13.69。

程序清单13.69 时间获取函数的实现范例

程序中,将p_cookie强制转换为指向设备自身的指针。这是由于在为RTC服务中的p_cookie成员赋值时,往往将其赋值为指向设备自身的指针,下一小节将详细介绍。

读取时间信息时,直接从秒寄存器开始,连续读取了7个寄存器的值,以便一次性读取出所有时间信息。读取的时间值为BCD码,在为细分时间赋值前需要将其转换为实际数值。特别地,在细分时间中,tm_year是从1900年开始计算的,而PCF85063的年值有效范围为0 ~ 99,实际年份的表示范围则为1900 ~ 1999,满足不了实际需求。为了扩大表示范围,当tm_year小于70时(即PCF85063中年值寄存器的值小于70时),将tm_year的值增加100。如此一来,当年值寄存器的值为0 ~ 69时,实际表示的年值为100 ~ 169,当值为70 ~ 99时,表示的年值依旧就是70 ~ 99,使得年值的范围扩大到了70 ~ 169,对应的年份范围即为1970 ~ 2069,1970也是很多操作系统中的时间起点。

时间设置是一个相反的过程,即将细分时间中的值设置到PCF85063的相应寄存器中,范例程序详见程序清单13.70。

程序清单13.70 时间设置函数的实现范例

程序中,首先将细分时间值依次存储到data数组中,然后一次性写入所有时间信息。值得注意的是,在细分时间中,tm_mon表示月份,其值为实际月份减一(有效值为0 ~ 11)。而在PCF85063中,月份寄存器中的有效值为1 ~ 12,表示的是实际月份,因此,在将细分时间值写入PCF85063的寄存器时,需要作加1操作,以将tm_mon转换为实际月份。特别地,在驱动中,将tm_year的范围限制在了70 ~ 169,以表示年份1970 ~ 2069。若tm_year的值超过该范围,则表示是无效时间。年值寄存器的有效范围为0 ~ 99,根据规则(小于70时加上100),年值为100 ~ 169时,寄存器的值应为0 ~ 69 ;年值为70 ~ 99时,寄存器的值保持不变,同样为70 ~ 99。年值寄存器的值不能超过100,大于100时,应该减去100,程序中,巧妙的将tm_year的值对100取余作为最终年值寄存器的值,完成了这一操作。

4.  p_cookie成员赋值

p_cookie用于系统在调用设备实现的抽象方法时,“原封不动”的传递给各个抽象方法的p_cookie参数。这样一来,传入抽象方法中的p_cookie与RTC服务中的p_cookie是完全相同的。通常情况下,p_cookie都起到一个p_this的作用,用于指向设备自身,基于此,直接将RTC服务中p_cookie设置为p_this,详见程序清单13.71。

程序清单13.71 p_cookie成员的赋值

正因为如此,在程序清单13.69和程序清单13.70所示的RTC抽象方法的实现中,可以直接将p_cookie强制转换为指向设备自身的指针。

至此,清楚了RTC服务中各成员应该设置的具体值,可以在系统获取RTC服务时,再进行相关成员的赋值。

13.4.7  定义Method对象

已知获取RTC服务的Method类型为:

awbl_rtcserv_get。为了使PCF85063可以向系统提供RTC服务,需要使用该类型定义Method对象,核心需要实现一个用于系统获取RTC服务的入口函数,范例程序详见程序清单13.72。

程序清单13.72 获取RTC服务的入口函数实现范例

基于此,可以完成一个Method对象的定义,即:

一个驱动提供的所有Method对象应该存放在一个列表中,由于PCF85063设备仅能提供RTC服务,因此,Method对象列表中仅包含一个用于获取RTC服务的Method对象,详见程序清单13.73。

程序清单13.73 PCF85063设备驱动Method对象列表定义

其中,__g_pcf85063_dev_methods即可作为基础驱动信息中p_methods的值。

13.4.8  定义驱动结构体常量,实现驱动注册函数

驱动信息常量的实际类型与设备所处的总线类型相关。PCF85063设备挂在I²C总线上,I²C总线上的所有设备驱动对应的信息结构体类型为awbl_i2c_drvinfo_t,其是直接从基础驱动信息类型派生而来的,具体定义详见程序清单13.74。

程序清单13.74 awbl_i2c_drvinfo_t类型定义(awbl_i2cbus.h)

由此可见,其并未扩展任何其它新的成员,和基础驱动信息是完全一样的,可以定义用于描述PCF85063驱动的信息常量,详见程序清单13.75。

程序清单13.75 定义描述PCF85063驱动的信息常量

用户若需使用该驱动,还需要将驱动注册到系统中,可以提供一个用于注册PCF85063驱动的专用函数,其实现详见程序清单13.76。

程序清单13.76 注册PCF85063驱动的专用函数

为便于查阅,PCF85063完整的驱动文件内容详见程序清单13.77和程序清单13.78。

程序清单13.77 PCF85063驱动头文件(awbl_pcf85063.h)

程序清单13.78 PCF85063驱动源文件(awbl_pcf85063.c)

热门推荐

原文标题:AWorks软件篇 — 深入理解 AWbus-lite(开发设备驱动)

文章出处:【微信号:ZLG_zhiyuan,微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

以NFC核心板为例讲述基于AWorks平台开发的具体方法

ZLG致远电子推出了一系列“MCU+无线”核心板,本文以NFC核心板为例讲述基于AWorks平台开发....

的头像 ZLG致远电子 发表于 06-22 09:16 113次 阅读
以NFC核心板为例讲述基于AWorks平台开发的具体方法

AWBus-lite的拓扑结构及应用设计

为了管理系统中各式各样的硬件设备(或虚拟硬件设备),AWorks推出了领先的轻量级总线管理框架:AW....

的头像 ZLG致远电子 发表于 06-21 09:10 282次 阅读
AWBus-lite的拓扑结构及应用设计

一文了解几种常见的RTC器件

本文介绍了几种常见的RTC器件:PCF85063、RX8025T和DS1302,使读者进一步体会使用....

的头像 ZLG致远电子 发表于 06-21 09:07 336次 阅读
一文了解几种常见的RTC器件

AWorks外围器件:驱动EEPROM和SPI Nor Flash存储器

一个应用的实现往往离不开大量的外围器件,如存储设备,RTC设备、显示设备等等。为了建立完整的生态系统....

的头像 ZLG致远电子 发表于 06-20 09:01 396次 阅读
AWorks外围器件:驱动EEPROM和SPI Nor Flash存储器

AWorks软件设计,邮箱、消息队列和自旋锁使用方法

本文介绍了邮箱、消息队列和自旋锁的使用方法。信号量只能用于任务间的同步,不能传递更多的信息,为此,A....

的头像 ZLG致远电子 发表于 06-13 09:13 859次 阅读
AWorks软件设计,邮箱、消息队列和自旋锁使用方法

面向AWorks框架和接口编程温度检测模块的软件详细资料概述

AWorks作为一个物联网生态系统,底层需要大量的信号(温度、电压、电流……)采集模块,以实现对外部....

的头像 ZLG致远电子 发表于 06-12 19:27 366次 阅读
面向AWorks框架和接口编程温度检测模块的软件详细资料概述

设备驱动在AWbus-lite中驱动设备正常工作

一个硬件设备正常工作的前提是系统中存在对应的驱动。AWorks提供了大量常用硬件设备的驱动,用户通常....

的头像 ZLG致远电子 发表于 06-12 09:06 481次 阅读
设备驱动在AWbus-lite中驱动设备正常工作

AWorks中开发设备驱动一般方法

发表于 06-11 16:45 911次 阅读
AWorks中开发设备驱动一般方法

怎样才能设计出稳定可靠电源

目前市面上的电源模块品类繁多,初期应用都能满足要求,但随着时间的考验就开始经不起考验了。电源作为系统....

的头像 ZLG致远电子 发表于 06-05 09:24 1524次 阅读
怎样才能设计出稳定可靠电源

面向AWorks框架管理文件的方法和数据结构

文件系统是在存储设备中(SD Card、NAND Flash…)组织文件的方法和数据结构,用于管理文....

的头像 ZLG致远电子 发表于 06-05 09:18 749次 阅读
面向AWorks框架管理文件的方法和数据结构

面向AWorks框架时间管理程序设计

实际应用中,时间管理往往是必不可少的。例如:定时完成某件事情、周期性地触发某一动作、测量评估程序运行....

的头像 ZLG致远电子 发表于 05-30 09:33 1200次 阅读
面向AWorks框架时间管理程序设计

I²C总线、UART总线和A/D转换器应用设计

在传统的基于寄存器的开发模式中,使用一个外设往往要阅读英文手册,理解寄存器每一位的含义,一步一步操作....

的头像 ZLG致远电子 发表于 05-28 08:57 2630次 阅读
I²C总线、UART总线和A/D转换器应用设计

基于ARM9、Cortex-A系列高性能SoC无线核心板设计

基于AWorks平台的,集MCU、DDR2、NandFlash、硬件看门狗、无线芯片(Wi-Fi、N....

的头像 ZLG致远电子 发表于 05-21 09:39 1410次 阅读
基于ARM9、Cortex-A系列高性能SoC无线核心板设计

只需七步,就可了解逻辑分析仪测试

时序和协议是数字系统调试的两大关键点,也是逻辑分析仪最能发挥价值的地方。如何使用逻辑分析仪快速地完成....

的头像 ZLG致远电子 发表于 04-19 09:44 1304次 阅读
只需七步,就可了解逻辑分析仪测试

储能行业如何有效解决电能质量问题?

时下,储能行业正在大力发展,锂离子电池和铅蓄电池是该领域应用最多的两种技术,但除了电池,还有哪些问题....

的头像 ZLG致远电子 发表于 04-11 09:30 1122次 阅读
储能行业如何有效解决电能质量问题?

解决芯片量产问题,MCU成最大焦点

随着越来也多的电子厂商不断为物联网(IoT)推出新产品,全球MCU出货量正出现巨大成长动能。特别是当....

的头像 ZLG致远电子 发表于 03-30 08:49 2328次 阅读
解决芯片量产问题,MCU成最大焦点

三句话讲清环路分析,轻松检测控制系统稳定性

尽管环路分析是检测控制系统稳定性的重要手段,但是测试过程中有诸多细节需要注意。如何快速理解环路分析的....

的头像 ZLG致远电子 发表于 03-21 08:04 1408次 阅读
三句话讲清环路分析,轻松检测控制系统稳定性

面对大烧录量和严格性能要求,如何高效快速生产汽车零组件

一辆光鲜亮丽的汽车上有琳琅满目的电子部件,每一个电子部件往往都拥有它自己的芯片,每个芯片又有它独立的....

的头像 ZLG致远电子 发表于 03-19 08:44 2943次 阅读
面对大烧录量和严格性能要求,如何高效快速生产汽车零组件

Zigbee无线模块在流速计上的应用方案

新时代的智慧城市,要求全面提升监控力度和智能化管理水平。我国广阔的水域,将会建设更多无人值班监测点,....

的头像 ZLG致远电子 发表于 03-12 09:40 2765次 阅读
Zigbee无线模块在流速计上的应用方案

如何通过技巧快速进行选型?电源设计浅谈

电容是开关电源中的再普通不过的器件,它可以用来降低纹波噪声,可以用来提高电源的稳定性以及瞬态响应性,....

的头像 ZLG致远电子 发表于 03-10 09:34 3577次 阅读
如何通过技巧快速进行选型?电源设计浅谈

一个好电源设计,为何要非常重视输出纹波噪声

纹波噪声是衡量电源的一个重要指标,一个好的电源必须要把输出纹波噪声控制在一个合理的范围内。但一般有哪....

的头像 ZLG致远电子 发表于 03-05 08:35 2905次 阅读
一个好电源设计,为何要非常重视输出纹波噪声

以太网无法取代CAN的原因是什么?

CAN总线通过物理信号来进行连接,而以太网则是交换机连接。CAN总线的结构非常简单,仅需拉两条线而已....

发表于 03-02 09:48 313次 阅读
以太网无法取代CAN的原因是什么?

如何解决照明灯具的测试测量痛点

家用照明灯具在出厂时,都是需要经过测量装备严格的检测,当照明灯在正常工作或特定模式下时,电压、电流和....

的头像 电子发烧友网工程师 发表于 02-20 03:28 2115次 阅读
如何解决照明灯具的测试测量痛点

电压波动与电压闪变对比分析

电压闪变与波动,两个形影不离的兄弟,经常一起出现在我们的视野中。闪变外向,我们可以从外表觉察到它的变....

的头像 电子发烧友网工程师 发表于 02-16 09:40 1259次 阅读
电压波动与电压闪变对比分析

如何确保对吸尘器的心脏进行可靠“体检”

人类正是由于心脏不断地跳动才得以生存;吸尘器也是一样,只有心脏安好,才能更好的吸尘。人类为了确保身....

的头像 电子发烧友网工程师 发表于 02-15 03:33 1160次 阅读
如何确保对吸尘器的心脏进行可靠“体检”

分析电能质量分析仪一个案例中的测试效果

小到家庭,大到企业,能耗问题一直以来都是大家所关注重视的问题。中国企业的能耗一直很高,国家也努力促使....

的头像 ZLG致远电子 发表于 02-08 09:44 2576次 阅读
分析电能质量分析仪一个案例中的测试效果

ZLG致远电子E6000率先支持新国标 电压暂降和短时中断的定义

国家标准2013年第25号批准发布公告,由国网福建电科院负责编制的国家标准《电能质量电压暂降与短时中....

的头像 电子发烧友网工程师 发表于 02-05 11:11 2047次 阅读
ZLG致远电子E6000率先支持新国标 电压暂降和短时中断的定义

电子产品性能提升中,如何防止“安全”掉链子

最火手游“王者荣耀”将玩家分成“青铜、白银、黄金...”等段位。笔者从青铜开始打到最强王者。是不是电....

的头像 ZLG致远电子 发表于 02-05 09:44 2336次 阅读
电子产品性能提升中,如何防止“安全”掉链子

互联网温控器芯片应用及整体方案

LG致远电子基于NXP的KL16、Semtech的SX1278芯片开发的低功耗、高性能的LoraNe....

的头像 周立功单片机 发表于 02-05 09:19 2475次 阅读
互联网温控器芯片应用及整体方案

一款优质电源必然具备:启动性设计

一款优质电源必然具备启动性能好、转换效率高等特点,但你有没有想过宽压电源的输入电压范围那么广,而电源....

的头像 ZLG致远电子 发表于 02-02 09:33 5692次 阅读
一款优质电源必然具备:启动性设计

为什么你的手机实际内存比标称内存要少很多

现在市面上存在NAND FLASH和eMMC这两种的大容量存储介质,就是各类移动终端及手机的主要存储....

发表于 01-29 07:40 1027次 阅读
为什么你的手机实际内存比标称内存要少很多

13.56MHz读写卡模块通信接口及选型指南

论选择I2C 或UART 通信方式,只要基于实例句柄编程,则应用程序与具体的通信方式无关。

的头像 周立功单片机 发表于 01-25 09:09 2598次 阅读
13.56MHz读写卡模块通信接口及选型指南

深入理解AMetal,掌握蜂鸣器和温度采集接口设计

在接口实现中,没有与硬件相关的实现代码,仅仅是简单的调用了抽象方法。抽象方法需要由具体的温度采集设备....

的头像 周立功单片机 发表于 01-17 08:29 3288次 阅读
深入理解AMetal,掌握蜂鸣器和温度采集接口设计

一款基于法拉电容的UPS电路设计思路

您是否有遇到使用中的程序无故丢失?产品调试非常稳定,布置到现场后频繁系统崩溃和数据遗失,亦或产品应用....

的头像 ZLG致远电子 发表于 01-15 09:06 2505次 阅读
一款基于法拉电容的UPS电路设计思路

开发者在的很多管理者,需了解平台产品开发战略

在2017年9月5日深圳举行的“‘名家芯思维’之2017年物联网核心技术和应用国际研讨会”上,周立功....

的头像 ZLG致远电子 发表于 12-13 07:14 3596次 阅读
开发者在的很多管理者,需了解平台产品开发战略

使用AM335x系列芯片该注意哪些问题

ARM研发的路漫长而有趣,众人皆知的开发优势和面对问题时的一筹莫展,让人对ARM又爱又恨,而你与AR....

的头像 ZLG致远电子 发表于 12-13 06:08 4723次 阅读
使用AM335x系列芯片该注意哪些问题

智能灯具中zigbee无线技术方案解析

灯具的控制主要分为开关控制与调光控制。开关控制利用继电器控制灯具的通断电;调光控制利用PWM、模拟信....

的头像 ZLG致远电子 发表于 11-29 06:28 6355次 阅读
智能灯具中zigbee无线技术方案解析

面向AMetal框架RTC实时时钟应用实战

在MicroPort 系列扩展模块中,除主芯片为PCF85063 的RTC 模块外,还有RX8025....

的头像 ZLG致远电子 发表于 11-13 09:03 1837次 阅读
面向AMetal框架RTC实时时钟应用实战

如何长时间的进行功率分析与数据记录?

在工程师的日常测试中,功率分析是最基本的需求,在功率测量的同时,往往伴随需要波形录制和分析,很多工程....

发表于 09-08 09:19 634次 阅读
如何长时间的进行功率分析与数据记录?

家电行业低功耗测试解决方案

毫无疑问,在大家的日常生活中各式各样的家用电器为我们的生活带来了很多方便,近年来,大家在购买家电的时....

发表于 08-03 14:23 363次 阅读
家电行业低功耗测试解决方案

通讯管理机新方案解决办法

变电所,调度站运用的通讯管理机——高额的制造成本又让许多制造厂家和使用者望而却步,如何才能有效的控制....

发表于 07-20 14:01 548次 阅读
通讯管理机新方案解决办法

ZLG致远电子发布P800isp量产型在线编程器

ZLG致远电子深入编程行业十余年,已经逐渐成长为国内编程器领导品牌。这一次,我们主动寻求改变,深度创....

发表于 07-19 18:38 675次 阅读
ZLG致远电子发布P800isp量产型在线编程器

功率计不仅仅是用来看电参数的

概要:功率计是行业内做功耗测试最常用的仪表,但80%以上的用户却不知道,除了常规的电参数测试以外,它....

发表于 05-25 09:02 953次 阅读
功率计不仅仅是用来看电参数的

CAN现场处置的“法宝”

近年来,CAN总线凭借优秀的抗干扰能力及通讯仲裁机制得到越来越广泛的应用,虽然CAN总线技术资料比较....

发表于 05-24 17:41 750次 阅读
CAN现场处置的“法宝”

致远电子发布 USB-PD 快充测试方案

USB-PD(Power Delivery)是基于USB Type-C的供电标准,最大功率可达100....

发表于 05-17 18:10 1287次 阅读
致远电子发布 USB-PD 快充测试方案

CAN应用层协议详解之DeviceNet协议

DeviceNet是基于CAN总线技术并符合全球工业标准的开放型通信网络。定位于工业控制的设备级网络....

发表于 04-12 17:37 2399次 阅读
CAN应用层协议详解之DeviceNet协议

硬件设计如何选择连接器

电子产品的设计越来越趋向于模块化,不同功能模块经过有机结合可快速打造出优质、性能各异的产品,而其中模....

发表于 04-12 17:22 799次 阅读
硬件设计如何选择连接器

【算法研究】如何对电机进行精确控制?

电机作为各种电器和机械的动力源,无论在工业应用还是个人项目上,几乎每位工程师和电子爱好者都会接触,可....

发表于 04-06 19:01 2484次 阅读
【算法研究】如何对电机进行精确控制?