您的当前位置:首页正文

ZLG致远电子AW280 SDK 用户手册 V1.00

2020-09-14 来源:好走旅游网


User Manual EasyARM_IMX28x SDK用户手册

AWorks

UM01010101 V1.00 Date: 2016/04/11 产品用户手册

类别 关键词 摘 要 内容 AWorks SDK、Eclipse 本文档描述了简单介绍了EPC-AW287I硬件平台,同时简单介绍了aw_28a_sdk软件包结构、配置方法等。 广州致远电子股份有限公司

广州致远电子股份有限公司 EasyARM_IMX28x SDK 用户手册

AWorks 修订历史

版本 V1.00 日期 2016/04/011 原因 创建文档 产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

1

广州致远电子股份有限公司 EasyARM_IMX28x SDK 用户手册

AWorks 目 录

1. 硬件平台简介 ........................................................................................................... 1

1.1

1.2

硬件平台结构 ............................................................................................................... 1 AW28核心板 ............................................................................................................... 2 1.2.1 核心板简介 ....................................................................................................... 2 1.2.2 产品特性 ........................................................................................................... 3

2. aw_28a_sdk 软件包 .................................................................................................. 4

2.1 2.2

AWorks架构 ................................................................................................................. 4 SDK目录结构 .............................................................................................................. 4 2.2.1 apollo目录 ............................................................................................................ 5 2.2.2 documents 目录 ................................................................................................... 6 2.2.3 examples_eclipse目录 .......................................................................................... 7 2.2.4 projects_eclipse目录 ............................................................................................ 8 2.2.5 tool目录 ............................................................................................................... 9 2.3 工程结构 ....................................................................................................................... 9

2.3.1 interface ................................................................................................................. 9 2.3.2 user_code .............................................................................................................. 9 2.3.3 user_cpp_code ..................................................................................................... 10 2.3.4 user_config .......................................................................................................... 10 2.3.5 其他文件 ......................................................................................................... 11

3. 工程资源配置 ......................................................................................................... 12

3.1

设备配置 ..................................................................................................................... 12 3.1.1 GPIO、DMA、INT、CLK................................................................................ 13 3.1.2 WDT .................................................................................................................... 13 3.1.3 Timer ................................................................................................................... 14 3.1.4 UART .................................................................................................................. 15 3.1.5 I2C ....................................................................................................................... 17 3.1.6 OCOTP ................................................................................................................ 19 3.1.7 SPI ....................................................................................................................... 19 3.1.8 SDIO ................................................................................................................... 21 3.1.9 SDCard ................................................................................................................ 25 3.1.10 Nand Flash ...................................................................................................... 26 3.1.11 DC Buzzer ....................................................................................................... 27 3.1.12 GPIO LED ....................................................................................................... 28 3.1.13 PWM ............................................................................................................... 28 3.1.14 PWM Buzzer ................................................................................................... 30 3.1.15 ADC ................................................................................................................ 30 3.1.16 Touch Screen ................................................................................................... 31 3.1.17 LCD ................................................................................................................. 32 3.1.18 PHY ................................................................................................................. 32 3.1.19 EMAC ............................................................................................................. 33 3.1.20 SWITCH ......................................................................................................... 34

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

2

广州致远电子股份有限公司 EasyARM_IMX28x SDK 用户手册

AWorks 3.1.21 GPIO KEY ...................................................................................................... 34 3.1.22 CAN ................................................................................................................ 36 3.1.23 SPI Flash ......................................................................................................... 37 3.1.24 EEPROM......................................................................................................... 39 3.1.25 DS2460 ............................................................................................................ 40 3.1.26 RTC ................................................................................................................. 42 3.1.27 ZigBee ............................................................................................................. 45 3.1.28 USB host ......................................................................................................... 46 3.1.29 USB device ...................................................................................................... 47 3.2 驱动配置 ..................................................................................................................... 48

3.2.1 USB Mass Storage .............................................................................................. 48 3.2.2 USB Pl2303 ......................................................................................................... 49 3.3 组件配置 ..................................................................................................................... 49

3.3.1 Console ................................................................................................................ 49 3.3.2 Shell .................................................................................................................... 50 3.3.3 Event ................................................................................................................... 50 3.3.4 Network ............................................................................................................... 51 3.3.5 Ftp sever .............................................................................................................. 51 3.3.6 File System .......................................................................................................... 51 3.4 系统资源配置 ............................................................................................................. 53

3.4.1 aw_main线程 ..................................................................................................... 53

4. 免责声明 ................................................................................................................. 53

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

3

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 1. 硬件平台简介

EPC-AW287I是广州致远电子股份有限公司精心推出的一款工控开发主板,主板以Freescale基于ARM9内核的i.MX28x多媒体应用处理器为核心,处理器主频高达454MHz,支持64MB DDR2和8MB SPI FLASH,同时提供了众多的外设资源,可以满足消费电子和工业控制等应用,具体信息请参考:www.zlg.cn/IPC/AW287.php。

为了使用户能够快速地熟悉该主板,广州致远电子股份有限公司提供成熟的硬件解决方案、开发主板预装实用的AWorks操作系统,并且提供完善的测试 demo 和相应的配套文档;完整的软硬件架构使您只需专注于开发产品的应用程序,使您能够轻松地实现TCP/IP通信、CAN-bus现场总线通信、USB通信以及大容量存储等功能,使您的嵌入式系统设计更加简洁方便,缩短了产品的开发周期,增强了产品的市场竞争力。

1.1 硬件平台结构

平台功能框图如下所示:

电源电路(12V转5V)3×13排针 将核心板其他资源引出RF接口系统配置电源接口电源电路(5V转3.3V)12V网口0RJ45接口网口1RJ45接口LCD软排线接口GPIO×12液晶屏触摸屏SPI×1CANUART×6×2NET0NET1HOSTOTGSDIO×1PHY0AW28AAW28XP2EF核心板I2C×1ADC×4PHY1GPIO×27USB1 HOST接口座RTCEPC-AW287I工控板JTAG无源蜂鸣器USB0 HOST接口座3×13排针 将核心板其他资源引出TF卡座复位调试串口 RS232电平USB0DEVICE

图1.1 EPC-AW287I 功能框图

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

1

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks

图1.2 EPC-AW287I 产品图片

1.2 AW28核心板

EPC-AW287I硬件平台由核心板AW28XP2EF和底板组成,核心板有多个型号,如i.MX280、i.MX283、i.MX287等。 1.2.1 核心板简介

AW28XP2EF系列核心板是由广州致远电子股份有限公司精心设计的一款低功耗、高性能的无线核心板,该核心板采用了Freescale(飞思卡尔)基于ARM9内核(ARM926EJ-S™)的i.MX28系列处理器,主频454MHz,支持众多通讯接口,如UART、I2C、I2S、Ethernet、USB、SSP等,支持液晶显示和四线式电阻式触摸屏,与此同时核心板还加入了无线通讯模块,可轻松实现Zigbee无线数据通信。处理器内部集成了电源管理单元PMU,减小了系统功耗,大大效简化了系统电源设计,降低了产品设计成本,使得该处理器非常适用于低成本、低功耗、高性能的通用嵌入式工业控制和消费电子市场。

AW28XP2EF系列无线核心板集MCU、DDR2、SPI Flash、硬件看门狗、无线通讯模块于一身,具有高性能、接口齐全、低功耗、成本低等特点,可以在工业温度范围(-30℃~85℃)内稳定工作,可以满足各种条件苛刻的工业应用,如:工业控制、现场通信等领域;此外,严格的EMC和高低温测试保证了核心板在严酷的环境下也能稳定地工作。

如图1.3所示,为i.MX287带ZigBee核心板:

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

2

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks

图1.3 i.MX287带ZigBee核心板

1.2.2 产品特性

 CPU:Freescale i.MX283/ i.MX287;  运行频率:454MHz;  板载64MB DDR2 SDRAM;  板载8MB SPI Flash;  支持FastZigbee无线通讯;  内置电源管理单元PMU;  板载独立硬件看门狗;

 支持多种文件系统,支持SD/MMC卡、U盘读写;  支持1路USB2.0 HOST、1路USB2.0 OTG;  支持2路10M/100M以太网接口,支持交换机功能;  支持多达5路串口、2路CAN;  支持1路SD Card接口;

 2路I²C、1路SPI、1路I²S及8路12位ADC(含1路高速ADC、4路复用);  内置LCD控制器,分辨率最高达800×480;  支持4线电阻式触摸屏接口;  支持JTAG调试接口;  支持多种升级方式;  采用8层PCB工艺;  尺寸30mm×48mm;  低工作电压:3.3V±2%;

 所有元器件均符合工业级-30℃~+85℃要求

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

3

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 2. aw_28a_sdk 软件包

软件包名为aw_28a_sdk_1.00(不同版本,版本号会有区别,请以实际获取的AWorks SDK包版本为准)。为叙述方便,下文简称软件包为 SDK,使用{SDK}表示软件包的路径。 当前SDK已适配EPC-AW287I硬件平台,用户只要做少量配置即可使用。下面将介绍AWorks架构、SDK结构、工程结构以及用户在使用外设组件等资源前需要配置的事项。

2.1 AWorks架构

AWorks是一个创新的嵌入式软件平台,它把各种软件组件集成在一起,提供了数量庞大且高质量的服务。大量现成的软件不仅节省了用户的研发投入,还能提高产品的质量。通过简单的剪裁和配置之后,它甚至能够在只有几K内存的小资源平台上运行。

尽管AWorks本身已经提供了众多高品质的可复用组件,AWorks同样也支持用户将自己的软件组件集成到平台中。

AWorks对底层硬件做了良好的抽象和封装,最大程度上降低了上层应用与底层硬件的耦合。上层应用不再绑死在某款MCU上,有利于产品的升级和维护。

图2.1 AWorks架构

2.2 SDK目录结构

{SDK}下有5个文件夹,如图2.2所示。

 apollo目录存放SDK使用头文件、示例代码、配置文件以及库文件等  documents目录存放相关说明文档  examples_eclipse目录存放示例工程  projects_eclipse目录存放模板工程等

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

4

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks  tool目录存放i.MX28x烧写工具等

图2.2 SDK目录结构

2.2.1 apollo目录

apollo目录结构如图2.3所示:

图2.3 apollo目录结构

1. 3rdparty

该目录下存放着第三方源码文件,如FatFs、LwIP以及Lua等,用户可以将下载并授权的第三方源码放置在这个目录下。目前AWorks很好地支持第三方库使用,如LwIP、FatFs、UFFS、Lua、emWin等。

2. bsp

BSP(Board Support Package)板级支持包,包括芯片启动代码以及AWorks系统内存管理等。

3. components

该目录主要存放AWorks组件,如awbus总线,芯片通用驱动,IO系统、文件系统、GUI、以太网适配层、pthread等组件。

4. cpu

该目录下存放具体硬件平台驱动,如i.MX28x的LCD、NET、GPIO等。 5. examples

为了让用户可以快速掌握基于AWorks平台的应用开发,SDK提供一个examples目录。该目录下存放基于AWorks标准接口例程C文件,目录结构如图2.4所示。其中“peripheral”即外设,包括设备操作如LED、GPIO、I2C等;系统组件“component”如事件机制、文件系统、以太网、GUI、shell等;以及系统资源“system”操作如线程、信号量、消息队列等。 产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

5

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks

图2.4 examples目录结构

注:这些示例的工程文件在{SDK}/ examples_eclipse ,请参考2.2.3。

6. interface

interface就是AWorks平台提供的全部抽象接口,在配置完硬件实例后,用户只需调用interface下的接口,即可实现相关应用。

注:使用一些第三方库接口时(如LwIP和emWin),需要参考库对应的.h文件,这部分AWorks没有统一抽象接口。

7. lib

lib目录下存放着AWokrs平台编译后的库文件。 8. psp

AWorks是可以跨平台运行的,包括Win32平台、uC/OS以及RTK。为了兼容不同平台,需要通过PSP(Platform Support Package)平台支持包进行适配,这里提供了RTK的适配。

9. rtk

RTK是AWorks自带的抢占式多任务实时操作系统内核,完全自主研发。支持无限多任务,抢占式调度支持64个优先级,支持相同优先级任务调度,支持优先级继承,支持同步机制(互斥量、消息队列)等。 2.2.2 documents 目录

documents目录中存放了5个文件,分别为《easy_arm_imx28x_sdk 快速入门文档.pdf》、《easy_arm_imx28x_sdk用户手册.pdf》、《easy_arm_imx28x_sdk新建库工程文档.pdf》、《Apollo 标准服务参考手册.chm》以及《IMX28x固件烧写启动指导手册.pdf》,结构如图2.5所示:

图2.5 document目录结构

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

6

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 1. SDK快速入门文档

快速入门文档介绍了获取到SDK后,如何快速的搭建好开发环境,成功运行、调试第 一个程序。建议首先阅读。

2. SDK用户手册

用户手册详细介绍了AWorks架构、目录结构、平台资源以及各外设常见的配置方法。 3. SDK新建库工程文档

该文档用一个示例库工程简明介绍了如何将基于AWorks平台代码编译成静态库。 4. AWorks API 参考手册

API 参考手册详细描述了SDK各层中每个API函数的使用方法,往往还提供了API函数的使用范例。在使用API之前,应该通过该文档详细了解API的使用方法和注意事项。

5. IMX28x烧写启动指导手册

该文档描述了如何将SDK编译后文件烧写到IMX28x硬件平台中,实现脱机运行。 2.2.3 examples_eclipse目录

该目录下即为example示例代码对应的Eclipse工程文件,与例程源文件目录结构保持一致,即目录结构与图2.4一致,这些工程均可以直接打开。

注:打开工程方法,请参考《easy_arm_imx28x_sdk 快速入门文档.pdf》。

以LED工程为例,打开Eclipse并导入工程后,如图2.6所示,其中demo_std_led.c就是{SDK}/apollo/examples/peripheral/led 目录下的文件,demo_std_led_entry()即为demo_std_led.c提供的接口。

图2.6 LED工程

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

7

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks

图2.7 LED examples目录

/**

* \\brief 例程入口 */

void demo_std_led_entry (void) {

int led_num = 0;

while (1) {

aw_led_on(led_num); aw_mdelay(500); aw_led_off(led_num); aw_mdelay(500); } }

可以编译示例代码,并直接在EPC-AW287I开发板上进行调试,查看相对应的现象。 2.2.4 projects_eclipse目录

该目录下包含以下几个工程,如图2.8所示:

图2.8 project_eclipse目录

1. 模板工程img_easy_arm_imx28x_debug

为了方便用户快速掌握“新建”工程及了解工程结构,SDK提供一个模板工程。具体如何进行编译、调试以及“新建”工程,请参考{SDK}/documents/《easy_arm_imx28x_sdk 快速入门文档.pdf》。

注:具体工程结构请看2.3。

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

8

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 2. 示例库工程lib_test_project

为了方便用户快速掌握将代码编译成静态库,SDK提供一个示例库工程,具体如何进行编译,请参考{SDK}/documents/《easy_arm_imx28x_sdk新建库工程文档.pdf》。

3. 库工程lwip

为了方便用户将LwIP编译成静态库,SDK提供一个该库工程,具体如何进行编译,请参考{SDK}/documents/《easy_arm_imx28x_sdk新建库工程文档.pdf》。 2.2.5 tool目录

该目录下面主要是存放一些SDK使用的工具,如“IMX28x烧写”,可以实现AW28A开发板脱机运行,具体操作请参考{SDK}/documents/《IMX28x固件烧写启动指导手册V1.00.pdf》。

2.3 工程结构

下面以示例工程img_easy_arm_imx28x_debug为例,介绍工程结构。打开该工程后,如图2.9所示,目录分为interface、user_code、user_cpp_code、user_config以及其他文件。

图2.9 工程模板结构

2.3.1 interface

interface就是AWorks平台提供的全部抽象接口,在配置完硬件实例后,用户只需调用interface下的接口,即可实现相关应用。接口使用说明可以查看《Apollo 标准服务参考手册.chm》或者查看示例程序{SDK}/examples。 2.3.2 user_code

user_code目录包括main.c等,用户的应用层代码也可以放在该目录下。 1. 对于应用层来说,其入口地址是aw_main(),它定义在main.c中

/* 用户程序入口 */ int aw_main (void) {

AW_INFOF((\"Application start up!\\n\"));

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

9

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks /* 蜂鸣器鸣叫500毫秒 */ aw_buzzer_beep(500);

/* 初始化任务task0 */

AW_TASK_INIT(task0, \"task0\ APP_TASK0_PRIO, APP_TASK0_STACK_SIZE, task0_entry, (void *)LED2);

/* 启动任务task0 */

/* 主任务永久循环 */

/* 点亮LED */

AW_FOREVER {

aw_led_on(LED1);

aw_mdelay(500); /* 延时500ms */ aw_led_off(LED1); /* 熄灭LED */ aw_mdelay(500); /* 延时500ms */ } return 0; }

AW_TASK_STARTUP(task0);

/* 任务实体 */ /* 任务名字 */ /* 任务优先级 */ /* 任务堆栈大小 */ /* 任务入口函数 */ /* 任务入口参数 */

2.3.3 user_cpp_code

当前SDK支持C++,用户可以将C++代码放在该目录下,这里SDK提供一个C++测试用例test_cpp.cpp。 2.3.4 user_config

user_config目录下的主要是用户的配置文件,目录结构如所示:

图2.10 user_config目录结构

下面逐个简单介绍下:

1. awbl_hwconf_usrcfg

该目录下存放着各个硬件设备的配置文件,具体说明参考3.1。 2. aw_prj_config.c

该文件主要是实现AWorks驱动注册、组件初始化等操作,用户一般不做修改。 3. aw_prj_params.h

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

10

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 这个是非常重要的文件,它方便地实现了对外设、软件组件以及设备的裁剪。用户只要使能某个开关宏定义,就可以直接开启相关功能,具体说明参考3。

4. aw_prj_usr_app_init.c

该文件主要实现板级初始化操作,如MMU,并跳转到用户程序执行。这里有整个程序运行的起始地址:

#define __SYS_MEM_ADDR_START 0x40000000

如果要修改这个值,需要同步修改工程分散加载文件(SDK中默认是imx28x_ddr_64m.ld,ORIGIN)以及调试脚本(SDK中默认是jlink_ddr_64m.gdb,monitor reg pc)文件,不然会导致程序不能调试运行。 2.3.5 其他文件

1. *.ld是工程的分散加载文件

SDK默认使用imx28x_ddr_64m.ld,这里有整个程序的运行地址,如下所示:

/***************************************************************************** 内存布局定义

*****************************************************************************/ MEMORY {

/* ROM (rx) : ORIGIN = 0x00000000, LENGTH = 64K */ /* On-Chip RAM */ RAM (rw) : ORIGIN = 0x40000000, LENGTH = 64M /* DDR2 */ IRAM (rw) : ORIGIN = 0x00000100, LENGTH = 128K /* On-Chip RAM */ }

其中ORIGIN为运行地址,LENGTH为内存DDR容量。

2. *.gdb是工程的调试脚本文件

在程序运行前,需要通过调试器设置硬件环境,如初始化DDR、设置时钟等,这些操作就是通过GDB调试器解析这个调试脚本文件,执行相应初始化操作。SDK默认使用jlink_ddr_64m.gdb,这里有整个程序的运行地址,如下所示:

#set cpu to svc mode(on cpu reset) monitor reg cpsr = 0xd3 #debug in ram monitor reg pc = 0x40000000 其中monitor reg pc就是设置运行地址。

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

11

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 3. 工程资源配置

由于系统正常工作时,往往需要使用一些必要的资源(如外设、组件等)和关闭一些不使用的资源,即实现资源的配置(可裁减性)。 同时,这些资源也需要初始化后才能正常使用。为了操作方便,默认情况下,这些资源都在系统启动时自动完成初始化,在进入用户入口函数 aw_main()后,这些资源就可以直接使用,非常方便。

这些资源的配置包括设备配置、驱动配置、组件配置以及系统资源配置。为了方便用户操作,AWorks将这些配置统一放在{PROJECT}\config\\aw_prj_params.h中。

配置方法:开启某个外设、组件或驱动时,只要在aw_prj_params.h中定义对应的资源宏(#define XXXX)即可,关闭资源只要将对应资源宏屏蔽或不定义即可。

下面将逐个介绍:

3.1 设备配置

对于设备的可裁减性,AWorks设计了非常方便的操作。AWorks统一将设备放在一个设备列表中管理,其定义在{PROJECT}\config\\awbl_hwconf_usrcfg\\ awbus_lite_hwconf_usrcfg.c,打开后如下所示:

……

/* 硬件设备列表 */

aw_const struct awbl_devhcf g_awbl_devhcf_list[] = {

AWBL_HWCONF_IMX28_INTC /* iMX28 中断控制器(必须配置) */ AWBL_HWCONF_IMX28_GPIO /* iMX28 GPIO(必须配置) */ AWBL_HWCONF_IMX28_DMA /* iMX28 DMA(必须配置) */

AWBL_HWCONF_IMX28_WDT /* iMX28 WDT */ AWBL_HWCONF_GPIO_WDT /* GPIO WDT */

AWBL_HWCONF_IMX28_TIMER0 /* TIMER0 */ AWBL_HWCONF_IMX28_TIMER1 /* TIMER1 */ AWBL_HWCONF_IMX28_TIMER2 /* TIMER2 */

AWBL_HWCONF_IMX28_TIMER3 /* TIMER3 */

AWBL_HWCONF_IMX28_DUART /* iMX28 DUART */ AWBL_HWCONF_IMX28_AUART0 /* iMX28 AUART0 */ AWBL_HWCONF_IMX28_AUART1 /* iMX28 AUART1 */ AWBL_HWCONF_IMX28_AUART2 /* iMX28 AUART2 */ AWBL_HWCONF_IMX28_AUART3 /* iMX28 AUART3 */

AWBL_HWCONF_IMX28_AUART4 /* iMX28 AUART4 */

AWBL_HWCONF_NS16550_UART0 /* NS16550 UART0 */

AWBL_HWCONF_IMX28_I2C0 /* iMX28 I2C0 */

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

12

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks AWBL_HWCONF_IMX28_I2C1 /* iMX28 I2C1 */

…… };

/* 硬件设备列表成员个数 */

aw_const size_t g_awbl_devhcf_list_count = AW_NELEMENTS(g_awbl_devhcf_list);

在设备列表g_awbl_devhcf_list中,每一个AWBL_HWCONF_XXX代表一个设备。 原理:系统启动后,会对照设备列表g_awbl_devhcf_list,对已开启的设备依次逐个调用其底层驱动程序进行初始化。这样在进入用户程序后,设备已初始化,用户只需要调用标准接口,就可以进行设备操作。

注:设备列表g_awbl_devhcf_list中的设备开启与关闭配置是由aw_prj_params.h决定的,该文件用户不做修改,设备初始化顺序是由设备在列表g_awbl_devhcf_list中的先后顺序决定的。

设备配置方法:开启外设时需要在aw_prj_params.h定义一个设备配置宏,关闭外设则屏蔽对应设备配置宏,如SPI Flash开启配置:

#define AW_DEV_NOR_FLASH /* NOR Flash 设备驱动 */

具体的外设配置,如SPI Flash使用控制器的哪个SPI主机、设置传输速率等,需要在{PROJECT}\config\\aw_hwconf_usrcfg中对应的文件设置,如图3.1所示。命名规则为“awbl_hwconf_”+“外设名”,如SPI Flash对应的文件为awbl_hwconf_spi_flash.h。

图3.1 设备配置文件列表

注:当前SDK外设配置是基于EPC-AW287I开发板的,具体外设配置需要参考对应电路图设计。

3.1.1 GPIO、DMA、INT、CLK

这些全局外设,如GPIO、DMA、INT、CLK,由于需要在全局使用,因此在系统启 动时已默认配置,用户不做配置。 3.1.2 WDT

系统只要配置了WDT设备,就会自行喂硬件看门狗。SDK中支持两种WDT:

注:调试情况下,最好不要开启WDT,并且需要将外部看门狗禁能,不然会导致系统复位。

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

13

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 1. AW_DEV_IMX28_WDT

这个是i.MX28x芯片内部的看门狗,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_WDT /* iMX28 watchdog */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\ awbl_hwconf_imx28_wdt.h,打开后如下所示:

……

/* iMX28 WDT 设备信息 */

aw_local aw_const struct imx283_wdt_param __g_imx283_wdt_param = { 0x80056000, }; ……

/* iMX28 WDT寄存器基地址*/

1000 /* WDT周期(ms) */

外设配置说明:其中重要的配置WDT周期,这里设置是1000ms。 2. AW_DEV_GPIO_WDT

这个是用外部WDT设备,这种WDT喂狗操作是通过GPIO引脚周期性翻转电平。配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_GPIO_WDT /* GPIO watchdog */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\ awbl_hwconf_gpio_wdt.h,打开后如下所示:

……

/* GPIO WDT 设备信息 */

aw_local aw_const struct gpio_wdt_param __g_gpio_wdt_param = { PIO2_7, /* 喂狗的GPIO引脚 */ 1200 /* WDT周期(ms) */ }; ……

外设配置说明:对于用户来说,需要配置喂看门狗引脚以及WDT周期。其中WDT周期需要对照看门狗芯片数据手册。如果设置的周期值过大,系统会因为没有及时喂狗,导致重启。

注意:当前SDK只能配置一个看门狗,原因是如果配置了多个,那么以在设备列表g_awbl_devhcf_list中最后配置的WDT有效,但会导致之前的WDT无法喂狗,系统重启。

3.1.3 Timer

i.MX28芯片共有4个硬件定时器,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_TIMER_0 /* IMX28 TIMER0 */ #define AW_DEV_IMX28_TIMER_1 /* IMX28 TIMER1 */ #define AW_DEV_IMX28_TIMER_2 /* IMX28 TIMER2 */ #define AW_DEV_IMX28_TIMER_3 /* IMX28 TIMER3 */

如上所示,当前已经使能了4个硬件定时器。如果不需要这么多,可以将对应的设备宏屏蔽。具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg} \\awbl_hwconf_imx28_timerX.h,用户一般不做修改。

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

14

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 注:系统运行时,会占用一个硬件定时器,用于产生系统节拍。所以如果用户需要使用硬件定时器,那么至少需要配置2个硬件定时器。

3.1.4 UART

i.MX28芯片有两类串口:一种是DUART,即调试串口,波特率最高为115200;一种是AUART,即应用串口,波特率最高可达到3.25Mb/s。

1. AWBL_HWCONF_IMX28_DUART

这个是DUART设备,配置该设备需要在aw_prj_params.h定义设备宏:

#define AWBL_HWCONF_IMX28_DUART /* iMX28 DUART */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\ awbl_hwconf_imx28_duart.h,打开后如下所示:

aw_local void __imx28x_duart_plfm_init (void) {

/* 配置 rxd 引脚*/

aw_gpio_pin_cfg(PIO3_2, PIO3_2_DUART_RX |

AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_12MA); /* 配置 txd 引脚 */

aw_gpio_pin_cfg(PIO3_3, PIO3_3_DUART_TX |

AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_12MA);

/* 使能时钟 */

aw_clk_enable(IMX28_CLK_UART); } ……

/* DUART 设备实例内存静态分配 */

aw_local struct awbl_imx28x_duart_chan __g_uart0_dev;

#define AWBL_HWCONF_IMX28_DUART

\\

{ \\ \"imx28x_duart\ \\ IMX28_DUART_COMID, \\ AWBL_BUSID_PLB, \\ 0, \\ (struct awbl_dev *)&__g_uart0_dev.dev, \\ &__g_uart0_devinfo \\ }, ……

外设配置说明:对于用户来说,重要的是配置DUART Tx和Rx的引脚,引脚号可以参考awbl_imx28x_gpio_private.h。

外设使用说明:用户在调用uart标准接口时(interface/aw_serial.h),使用的串口号要与IMX28_DUART_COMID的值一致(以DUART设备为例),以接口aw_serial_read为例,如下所示:

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

15

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks IMX28_DUART_COMID 定义在aw_prj_params.h中: #define IMX28_DUART_COMID COM0

接口原型:

ssize_t aw_serial_read (int com, char *p_buffer, size_t maxbytes);

举例说明:

aw_serial_read (COM0, p_buffer, maxbytes);

注:目前SDK将DUART默认作为控制台组件AW_COM_CONSOLE以及shell组件的使用串口。

2. AWBL_HWCONF_IMX28_AUARTx

这个是AUART设备,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_AUART0 /* iMX28 AUART0 */ #define AW_DEV_IMX28_AUART1 /* iMX28 AUART1 */ #define AW_DEV_IMX28_AUART2 /* iMX28 AUART2 */ #define AW_DEV_IMX28_AUART3 /* iMX28 AUART3 */ #define AW_DEV_IMX28_AUART4 /* iMX28 AUART4 */

i.MX28 芯片共有5个应用串口AUART,如上所示当前已全部使能。

注:i.MX28系列芯片有MX280、MX283和MX287,不同芯片应用串口数量不一样,需要参考IMX28

芯片手册。

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_auartX.h,以AUART0为例,打开后如下所示:

……

aw_local void __imx28_auart0_plfm_init (void) {

/* 配置 rxd 引脚 */

aw_gpio_pin_cfg(PIO3_0, PIO3_0_AUART0_RX | AW_GPIO_PULL_UP | AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_8MA); /* 配置 txd 引脚 */

aw_gpio_pin_cfg(PIO3_1, PIO3_1_AUART0_TX | AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_8MA); // /* 配置硬件流控 cts 引脚 */

// aw_gpio_pin_cfg(PIO3_2, PIO3_2_AUART0_CTS | // AWBL_IMX28X_GPIO_3V3 | // AWBL_IMX28X_GPIO_12MA); // /* 配置硬件流控 rts 引脚 */

// aw_gpio_pin_cfg(PIO3_3, PIO3_3_AUART0_RTS | // AWBL_IMX28X_GPIO_3V3 | // AWBL_IMX28X_GPIO_12MA); // /* 配置 rs485 控制引脚 */

// aw_gpio_pin_cfg(PIO3_24, PIO3_24_GPIO |

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

16

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks // AW_GPIO_OUTPUT | // AWBL_IMX28X_GPIO_3V3 | // AWBL_IMX28X_GPIO_12MA); }

aw_local void __imx28_auart0_rs485_dir (uint8_t dir) {

// aw_gpio_set(PIO3_24, dir); } ……

#define AWBL_HWCONF_IMX28_AUART0

\\

{ \\ AWBL_IMX28_AUART_NAME, \\ IMX28_AUART0_COMID, \\ AWBL_BUSID_PLB, \\ 0, \\ (struct awbl_dev *)&__g_imx28_auart0_dev.dev, \\ &__g_imx28_auart0_devinfo \\ },

外设配置说明:对于用户来说,重要的是配置AUART 的Tx、Rx、Cts、Rts、485控制引脚,这些引脚可以参考awbl_imx28x_gpio_private.h。

外设使用说明:用户在调用uart标准接口时(interface/aw_serial.h),使用的串口号要与IMX28_AUART0_COMID的值一致(以AUART0设备为例),以接口aw_serial_read为例,如下所示:

IMX28_AUART0_COMID 定义在aw_prj_params.h中: #define IMX28_AUART0_COMID COM1 #define IMX28_AUART1_COMID COM2 #define IMX28_AUART2_COMID COM3 #define IMX28_AUART3_COMID COM4 #define IMX28_AUART4_COMID COM5

接口原型:

ssize_t aw_serial_read (int com, char *p_buffer, size_t maxbytes);

举例说明:

aw_serial_read (COM1, p_buffer, maxbytes);

3. AWBL_HWCONF_NS16550_UART0

这个是16550标准的串口设备,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_NS16550_UART0 /* 16550 UART 兼容设备 */

i.MX28不支持这种设备,因而用户不需要配置该设备。 3.1.5 I2C

i.MX28芯片支持I2C设备,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_I2C_0 /* iMX28 I2C0 */

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

17

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks #define AW_DEV_IMX28_I2C_1 /* iMX28 I2C1 */

如上所示当前配置了两个I2C设备。

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_i2cX.h,以I2C0为例,打开后如下所示:

……

aw_local void __imx28_i2c0_plfm_init (void) {

/* IO配置 */

aw_gpio_pin_cfg(PIO3_24, PIO3_24_I2C0_SCL |

AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_12MA);

aw_gpio_pin_cfg(PIO3_25, PIO3_25_I2C0_SDA |

AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_12MA); };

/* 设备信息 */

aw_local aw_const struct awbl_imx28_i2c_devinfo __g_imx28_i2c0_devinfo = { {

IMX28_I2C0_BUSID, /* 控制器所对应的总线编号 */ AW_CFG_IMX28_I2C_BUS_SPEED, /* 控制器总线速度 */ 10000 /* 超时 */ },

IMX28X_I2C0_BASE_ADDR, INUM_I2C0_ERROR_IRQ, 24000000,

__imx28_i2c0_plfm_init, }; ……

外设配置说明:对于用户来说,重要的是配置SCL、SDA引脚,这些引脚可以参考awbl_imx28x_gpio_private.h。

外设使用说明:用户在调用I2C标准接口时(interface/aw_i2c.h),使用的设备号busid要与IMX28_I2C0_BUSID的值一致(以I2C0设备为例),以接口aw_i2c_mkdev为例,如下所示:

IMX28_I2C0_BUSID 定义在aw_prj_params.h中: #define IMX28_I2C0_BUSID 0 #define IMX28_I2C1_BUSID 1

接口原型:

aw_local aw_inline void aw_i2c_mkdev ( aw_i2c_device_t *p_dev, uint8_t busid, uint16_t addr, uint16_t flags)

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

18

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 举例说明:

aw_i2c_mkdev (p_dev, 0, addr, flags);

3.1.6 OCOTP

OTP( One Time Programmable)即只能一次性编程的设备,特点烧写一次后就不能再更改数值,常用于烧写密钥或MAC地址等。

i.MX28芯片支持OCOTP(On-Chip OTP)设备,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_OCOTP /* iMX28 OCOTP */

系统默认已开启。 3.1.7 SPI

SDK支持两类SPI设备,一类是i.MX28芯片自带的SPI控制器,一类是用GPIO模拟SPI设备。具体如下:

1. AW_DEV_IMX28_SSP_X

这是i.MX28芯片自带的SPI控制器。配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_SSP_0 /* iMX28 SSP0 */ #define AW_DEV_IMX28_SSP_1 /* iMX28 SSP1 */ #define AW_DEV_IMX28_SSP_2 /* iMX28 SSP2 */ #define AW_DEV_IMX28_SSP_3 /* iMX28 SSP3 */

如上所示,共配置了4个SPI设备。

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_sspX.h,以SPI0为例,打开后如下所示:

/* 平台相关初始化 */

aw_local void __imx28_ssp0_plfm_init (void) {

/* 配置SCK引脚 */

aw_gpio_pin_cfg(PIO2_10, PIO2_10_SSP0_SCK | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA);

/* 配置MOSI引脚 */

aw_gpio_pin_cfg(PIO2_8, PIO2_8_SSP0_CMD | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA | AW_GPIO_PULL_UP);

/* 配置MISO引脚 */

aw_gpio_pin_cfg(PIO2_0, PIO2_0_SSP0_D0 | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA | AW_GPIO_PULL_UP);

};

aw_local void __imx28_ssp0_mosi_gpio_func(void) {

aw_gpio_pin_cfg(PIO2_8, PIO2_8_GPIO | AW_GPIO_INPUT |

AW_GPIO_PULL_UP | AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_8MA ); }

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

19

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks

aw_local void __imx28_ssp0_mosi_func(void) {

aw_gpio_pin_cfg(PIO2_8, PIO2_8_SSP0_CMD | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA);

}

/* 设备信息 */

aw_local aw_const struct awbl_imx28_ssp_devinfo __g_imx28_ssp0_devinfo = { {

IMX28_SSP0_BUSID, },

IMX28X_SSP0_BASE_ADDR, INUM_SSP0_ERROR_IRQ, IMX28_CLK_SSP0,

/* ssp0寄存器基地址 */ /* 中断编号 */ /* 输入时钟ID */

/* 总线编号 */

96000000, /* 输入时钟频率 ,此值决定了SPI允许的的最大和最小速率,不能设为0 */ IMX28_DMA_CHANNEL_SSP0, /* DMA通道号 */ IMX28X_APBH_BASE_ADDR, /* DMA基址 */ INUM_SSP0_DMA_IRQ, /* DMA中断编号 */ 6, /* 传输任务优先级 */

__imx28_ssp0_mosi_gpio_func, /* MOSI引脚设置为gpio功能 ,并且输出电平为高 */ __imx28_ssp0_mosi_func, /* MOSI功能 */ __imx28_ssp0_plfm_init, /* 平台相关初始化 */ };

外设配置说明:对于用户来说,重要的是配置SCK、MOSI和MISO引脚、以及

__imx28_ssp0_mosi_gpio_func函数与__imx28_ssp0_mosi_func函数。而片选引脚CS则是在调用SPI接口时传入。这些引脚可以参考awbl_imx28x_gpio_private.h。

外设使用说明:用户在调用SPI标准接口时(interface/ aw_spi.h),使用的设备号busid要与IMX28_SSP0_BUSID的值一致(以SSP0设备为例),以接口aw_spi_mkdev为例,如下所示:

IMX28_SSP0_BUSID 定义在aw_prj_params.h中: #define IMX28_SSP0_BUSID 0 #define IMX28_SSP1_BUSID 1 #define IMX28_SSP2_BUSID 2 #define IMX28_SSP3_BUSID 3

接口原型:

aw_local aw_inline void aw_spi_mkdev ( aw_spi_device_t *p_dev, uint8_t busid, uint8_t bits_per_word, uint16_t mode, uint32_t max_speed_hz, int cs_pin,

void (*pfunc_cs)(aw_spi_device_t *p_dev, int state))

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

20

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 举例说明:

aw_spi_mkdev (p_dev, 0, bits_per_word, mode, max_speed_hz, cs_pin, NULL);

2. AW_DEV_GPIO_SPI_X

这是通过GPIO引脚模拟SPI时序设备,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_GPIO_SPI_0 /* GPIO 模拟 SPI */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_gpio_spi0.h,以GPIO_SPI0为例,打开后如下所示:

/* 设备信息 */

aw_local aw_const awbl_gpio_spi_devinfo_t __g_gpio_spi0_devinfo = { {

IMX28_GPIO_SPI0_BUSID, /* 总线编号 */ },

PIO2_10, /* sck引脚号 */ PIO2_8, /* mosi引脚号 */ PIO2_0, /* miso引脚号 */

0xFF, /* 接收数据时,MOSI输出值 */

NULL, /* 提供GPIO输出函数,不提供(NULL)则使用系统默认接口 */ 10, /* 驱动传输任务优先级 */ NULL, /* 平台相关初始化 */ }; ……

外设配置说明:对于用户来说,重要的是配置SCK、MOSI、MISO引脚以及接收数据时,MOSI输出值,而片选引脚CS则是在调用SPI接口时传入。

外设使用说明:用户在调用SPI标准接口时(interface/aw_spi.h),使用的设备号busid要与IMX28_GPIO_SPI0_BUSID的值一致(以GPIO_SPI0设备为例),以接口aw_spi_mkdev为例,如下所示:

IMX28_GPIO_SPI0_BUSID 定义在aw_prj_params.h中: #define IMX28_GPIO_SPI0_BUSID 4

接口原型:

aw_local aw_inline void aw_spi_mkdev ( aw_spi_device_t *p_dev, uint8_t busid, uint8_t bits_per_word, uint16_t mode, uint32_t max_speed_hz, int cs_pin,

void (*pfunc_cs)(aw_spi_device_t *p_dev, int state)) 举例说明:

aw_spi_mkdev (p_dev, 4, bits_per_word, mode, max_speed_hz, cs_pin, NULL);

3.1.8 SDIO

SDIO设备一般用于读写SD卡,SDK支持两类SDIO设备,一类是i.MX28芯片自带的SDIO总线控制器,一类是SPI模式的SDIO设备。具体如下:

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

21

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 注:如果需要操作SD卡,还需要配置SDcard。

1. AW_DEV_IMX28_SDIOX

这是i.MX28芯片自带的SDIO控制器,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_SDIO0 /* iMX28 SDIO 总线控制器 */

注:由于IMX28_SPI0与IMX28_SDIO0共用引脚,所以不能在aw_prj_params.h同时配置这两个设备。

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_sdioX.h,以SDIO0为例,打开后如下所示:

……

/* SD卡状态检测函数 */

aw_local bool_t __sdio_ssp0_detect (awbl_sdio_slot_t *p_slot) {

uint8_t cd_state, ro_state;

cd_state = aw_gpio_get(PIO2_9) ? SDIO_CD_STUBBS : SDIO_CD_PLUG; ro_state = aw_gpio_get(PIO0_17) ? SDIO_READ_ONLY : SDIO_WRITE_EN;

if (p_slot->cd_state == cd_state) { return FALSE; }

p_slot->cd_state = cd_state; p_slot->ro_state = ro_state; return TRUE; }

/* 平台相关初始化 */

aw_local void __imx28_sdio_ssp0_plfm_init (void) {

/* 配置功能引脚 */

aw_gpio_pin_cfg(PIO2_10, PIO2_10_SSP0_SCK | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA );

aw_gpio_pin_cfg(PIO2_8, PIO2_8_SSP0_CMD | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA | AW_GPIO_PULL_UP);

aw_gpio_pin_cfg(PIO2_0, PIO2_0_SSP0_D0 | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA | AW_GPIO_PULL_UP);

aw_gpio_pin_cfg(PIO2_1, PIO2_1_SSP0_D1 | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA | AW_GPIO_PULL_UP);

aw_gpio_pin_cfg(PIO2_2, PIO2_2_SSP0_D2 | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA | AW_GPIO_PULL_UP);

aw_gpio_pin_cfg(PIO2_3, PIO2_3_SSP0_D3 | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA | AW_GPIO_PULL_UP);

/* SD卡插入检测引脚配置*/

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

22

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks |

aw_gpio_pin_cfg(PIO2_9, PIO2_9_GPIO | AWBL_IMX28X_GPIO_3V3

AWBL_IMX28X_GPIO_8MA | AW_GPIO_INPUT | AW_GPIO_PULL_UP);

/* SD 卡只读检测引脚配置 */

aw_gpio_pin_cfg(PIO0_17, PIO0_17_GPIO |

AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_8MA |

AW_GPIO_INPUT |

AW_GPIO_FLOAT);

/* 使能 SSP0 时钟 */

aw_clk_enable(IMX28_CLK_SSP0);

awbl_sdio_link_slot(

&(__g_imx28_sdio_ssp0_dev.host), &__g_imx28_ssp0_slot0, __sdio_ssp0_detect, card_buf, sizeof(card_buf), 0 ); }; ……

外设配置说明:对于用户来说,重要的是配置包括:

(1). 配置SDIO功能引脚、SD卡插入检测引脚以及SD卡只读检测引脚。SDIO功能引脚可以参考awbl_imx28x_gpio_private.h,而SD卡插入检测引脚(如上为PIO2_9)、SD卡只读检测引脚(如上为PIO0_17)需要参考具体电路图设计。

(2). SD卡状态检测函数实现,如上为__sdio_ssp0_detect()。当前电路设计为SD卡插入后PIO2_9为低电平,因而:

cd_state = aw_gpio_get(PIO2_9) ? SDIO_CD_STUBBS : SDIO_CD_PLUG;

SD卡只读时,PIO0_17为高电平,因而:

ro_state = aw_gpio_get(PIO0_17) ? SDIO_READ_ONLY : SDIO_WRITE_EN;

2. AW_DEV_SPI_SDIOX

这是通过SPI实现SDIO设备,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_SPI_SDIO0 /* SPI 模式的 SDIO 总线控制器 */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_spi_sdioX.h,以SPI_SDIO0为例,打开后如下所示:

……

/* SD卡状态检测函数 */

aw_local bool_t __spi_sdio0_detect (awbl_sdio_slot_t *p_slot) {

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

23

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks uint8_t cd_state, ro_state;

cd_state = aw_gpio_get(PIO2_9) ? SDIO_CD_STUBBS : SDIO_CD_PLUG; ro_state = aw_gpio_get(PIO0_17) ? SDIO_READ_ONLY : SDIO_WRITE_EN;

if (p_slot->cd_state == cd_state) { return FALSE; }

p_slot->cd_state = cd_state; p_slot->ro_state = ro_state; return TRUE; }

/* 平台相关初始化 */

aw_local void __sdio_spi0_plfm_init (void) {

/* SD卡插入检测引脚配置*/

aw_gpio_pin_cfg(PIO2_9, PIO2_9_GPIO |

AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_8MA |

AW_GPIO_INPUT | AW_GPIO_PULL_UP); /* SD 卡只读检测引脚配置 */

aw_gpio_pin_cfg(PIO0_17, PIO0_17_GPIO

|

AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA |

AW_GPIO_INPUT |

AW_GPIO_FLOAT);

awbl_sdio_link_slot(

&(__g_sdio_spi0_dev.host), &__g_sdio_spi0_slot0, __spi_sdio0_detect, card_buf, sizeof(card_buf), 0 }; ……

#define AWBL_HWCONF_SPI_SDIO0 \\ { \\ AWBL_SDIO_SPI_NAME, \\ 0, \\

);

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

24

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks AWBL_BUSID_SPI, \\ IMX28_SSP0_BUSID, \\ &(__g_sdio_spi0_dev.host.super.super), \\ &__g_sdio_spi0_devinfo \\ }, ……

外设配置说明:对于用户来说,重要的是配置包括:

(1). 由于这种SDIO设备需要依赖SPI设备,因而需要先配置一个SPI设备。SPI_SDIO设备通过SPI设备号绑定对应的SPI设备,如上所示,这里配置了IMX28_SSP0_BUSID,因而绑定的是IMX28_SPI0设备,需要在aw_prj_params.h中配置:

#define AW_DEV_IMX28_SSP_0 /* iMX28 SSP0 */

(2). 配置SD卡插入检测引脚以及SD卡只读检测引脚。SD卡插入检测引脚(如上为PIO2_9)、SD卡只读检测引脚(如上为PIO0_17)需要参考具体电路图设计。 (3). SD卡状态检测函数实现,如上为__spi_sdio0_detect()。当前电路设计为SD卡插入后PIO2_9为低电平,因而:

cd_state = aw_gpio_get(PIO2_9) ? SDIO_CD_STUBBS : SDIO_CD_PLUG;

SD卡只读时,PIO0_17为高电平,因而:

ro_state = aw_gpio_get(PIO0_17) ? SDIO_READ_ONLY : SDIO_WRITE_EN;

3.1.9 SDCard

该设备为SD卡设备,使用前需要配置SDIO设备。配置SDCard设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_SDCARD /* SD 卡设备 */

注:由于SPI_SDIO速度慢,因而SDIO设备推荐使用IMX28_SDIO

外设使用说明:SD卡设备在使用时,一般都是需要文件系统,如FatFs,配置文件系统时参考3.3.6。当系统检测到SD卡插入时,会将其虚拟为块设备,其串口打印信息如下:

Found a new memory card:

Device Name: /dev/sd0 Product name: SD8GB Capacity: 7600 MB Manufacturing date: 2015-06

如上所示,当前块设备名为“/dev/sd0”,那么用户就可以通过文件系统接口操作它,如下:

/* 文件系统格式化 */

if ((ret = aw_make_fs(“/dev/sd0”, “vfat”, &fmt)) != AW_OK) { AW_ERRF((\"failed: %d\\n\ return; }

AW_INFOF((\"make fs OK\\n\")); /* 文件系统挂载 */

ret = aw_mount(\"/export\ “/dev/sd0”, “vfat”, 0); if (ret != AW_OK) {

AW_ERRF((\"/export mount /dev/mtd0 error: %d!\\n\return;

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

25

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks }

AW_INFOF((\"mount OK\\n\"));

3.1.10 Nand Flash

i.MX28支持Nand Flash操作,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_NAND_FLASH /* NAND Flash 设备 */

#define AW_DEV_IMX28_GPMI /* iMX28x GPMI 总线控制器(自动配置),默认提供给NAND \\

FLASH使用 */

其中AW_DEV_NAND_FLASH为Nand Flash设备,而AW_DEV_IMX28_GPMI是GPMI总线控制器设备,默认情况下是提供给AW_DEV_NAND_FLASH设备使用的,因而用户只需关心AW_DEV_NAND_FLASH设备配置。

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_nandflash.h,打开后如下所示:

……

/** \\brief partition table information */

aw_local aw_const struct awbl_nandflash_partition_info __g_nandflash_ptab_info[] = { {\"/dev/mtd0\ 0, 1023}, // {\"/dev/mtd1\ 1024, 2047} };

/** \\brief static memory of partition table */ aw_local struct awbl_nandflash_partition

__g_nandflash_ptab[AW_NELEMENTS(__g_nandflash_ptab_info)];

/** \\brief NandFlash device information */

aw_const aw_local struct awbl_nandflash_info __g_nandflash_devinfo = { {

(void *)AWBL_IMX28_GPMI_CE0, // {NANDFLASH_K9F2G08_TIMING}, {NANDFLASH_MX30LF1G08_TIMING}, // {NANDFLASH_MX30LF2G28_TIMING},

// NANDFLASH_K9F2G08_ECC_STRENGTH NANDFLASH_MX30LF1G08_ECC_STRENGTH // NANDFLASH_MX30LF2G28_ECC_STRENGTH },

// NANDFLASH_K9F2G08, NANDFLASH_MX30LF1G08, // NANDFLASH_MX30LF2G28, __g_nandflash_ptab_info, __g_nandflash_ptab,

AW_NELEMENTS(__g_nandflash_ptab) };

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

26

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks ……

外设配置说明:对于用户来说,只要在__g_nandflash_devinfo配置对应的Nand芯片型号与__g_nandflash_ptab_info配置适当的分区表,目前SDK只支持:

NANDFLASH_K9F2G08 NANDFLASH_MX30LF1G08 NANDFLASH_MX30LF2G28

如上配置所示,当前选定的是NANDFLASH_MX30LF1G08芯片。__g_nandflash_ptab_info的配置是将整个Nand Flash划分存储块,并给存储块取名字。

注:Nand Flash设备在使用时,一般都是需要文件系统,如UFFS,配置文件时系统参考3.3.6。

如上配置表示:

存储块名:\"/dev/mtd0\" 起始块号:0 结束块号:1023

外设使用说明:其中存储块名将作为文件系统(如UFFS)格式化或挂载的块设备名称,结束块号不能超过Nand芯片块数量。如用文件系统操作时:

/* 文件系统格式化 */

if ((ret = aw_make_fs(“/dev/mtd0”, “uffs”, &fmt)) != AW_OK) { AW_ERRF((\"failed: %d\\n\ return; }

AW_INFOF((\"make fs OK\\n\")); /* 文件系统挂载 */

ret = aw_mount(\"/export\ “/dev/mtd0”, “uffs”, 0); if (ret != AW_OK) {

AW_ERRF((\"/export mount /dev/mtd0 error: %d!\\n\return; }

AW_INFOF((\"mount OK\\n\"));

3.1.11 DC Buzzer

DC Buzzer即直流蜂鸣器,该设备通过GPIO引脚驱动,只要输入高或低电平就可以鸣叫。配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_DC_BUZZER /* dc buzzer */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_dc_buzzer.h,打开后如下所示:

……

/* 直流蜂鸣器设备信息 */

aw_local aw_const struct dc_buzzer_param __g_dc_buzzer_param = { PIO1_21, /* 驱动的 GPIO 引脚*/ FALSE, /* 输入低电平是否鸣叫 */ }; ……

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

27

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 外设配置说明:对于用户来说,只要配置驱动的GPIO引脚以及输入低电平是否鸣叫,如上所示,该配置表示蜂鸣器在引脚PIO1_21输出高电平鸣叫。

注:SDK只支持一个Buzzer实例。

3.1.12 GPIO LED

目前SDK支持GPIO驱动的LED设备,即该设备通过GPIO引脚驱动,只要输入高或低电平就可以点亮。配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_GPIO_LED /* GPIO LED */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_gpio_led.h,打开后如下所示:

……

/* LED设备GPIO信息 */

aw_local aw_const uint16_t __g_led_gpios[] = { PIO2_6, /* RUN */ PIO2_5 /* ERR */ };

/* LED设备信息 */

aw_local aw_const struct awbl_led_gpio_param __g_led_gpio_param = {

__g_led_gpios, /**< \\brief led 编号及对应gpio引脚 */ { 0,

AW_NELEMENTS(__g_led_gpios)-1

}, /**< \\brief led 起始编号和结束编号 */ AW_NELEMENTS(__g_led_gpios), /**< \\brief led 数量 */ TRUE /**< \\brief led 极性 */ }; ……

外设配置说明:对于用户来说,只要配置驱动的GPIO引脚列表__g_led_gpios以及输入低电平是否点亮(极性),如上所示,该配置表示RUN与ERR灯在低电平点亮。 外设使用说明:用户在调用LED标准接口时(interface/ aw_led.h),传入的LED设备号要与__g_led_gpios列表对应(设备号从0开始),以接口aw_led_on为例,如下所示:

接口原型:

aw_err_t aw_led_on (int id);

举例说明:

aw_led_on(0); /* 点亮RUN灯,则LED设备号传入0 */ aw_led_on(1); /* 点亮ERR灯,则LED设备号传入1 */

3.1.13 PWM

i.MX28芯片支持PWM设备,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_PWM /* iMX28 PWM */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_pwm.h,产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

28

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 打开后如下所示:

…… /**

* \\brief imx28 PWM 设备配置信息 *

* \\attention PWM ID要与PWM引脚功能对应,如PIO3_29_PWM_4引脚,对应PWM4,请勿改为其它PWM

ID。 需要使用哪个PWM通道,将其注释打开即可。

*/

aw_local awbl_imx28_pwm_devcfg_t __g_imx28_pwm_devcfg_list[] = {

/* PWM ID , GPIO, PWM引脚功能, 默认引脚功能 */

// {PWM0, IMX28_PWM0_GPIO, PIO3_16_PWM_0, PIO3_16_GPIO | AW_GPIO_OUTPUT}, // {PWM0, IMX28_PWM0_GPIO, PIO3_4_PWM_0, PIO3_4_GPIO | AW_GPIO_OUTPUT}, // {PWM1, IMX28_PWM1_GPIO, PIO3_17_PWM_1, PIO3_17_GPIO | AW_GPIO_OUTPUT}, // {PWM1, IMX28_PWM1_GPIO, PIO3_5_PWM_1, PIO3_5_GPIO | AW_GPIO_OUTPUT}, // {PWM2, IMX28_PWM2_GPIO, PIO3_18_PWM_2, PIO3_18_GPIO | AW_GPIO_OUTPUT}, {PWM3, IMX28_PWM3_GPIO, PIO3_28_PWM_3, PIO3_28_GPIO | AW_GPIO_OUTPUT}, // {PWM3, IMX28_PWM3_GPIO, PIO3_20_PWM_3, PIO3_20_GPIO | AW_GPIO_OUTPUT}, {PWM4, IMX28_PWM4_GPIO, PIO3_29_PWM_4, PIO3_29_GPIO | AW_GPIO_OUTPUT}, // {PWM4, IMX28_PWM4_GPIO, PIO3_21_PWM_4, PIO3_21_GPIO | AW_GPIO_OUTPUT}, // {PWM5, IMX28_PWM5_GPIO, PIO3_22_PWM_5, PIO3_22_GPIO | AW_GPIO_OUTPUT}, // {PWM6, IMX28_PWM6_GPIO, PIO3_23_PWM_6, PIO3_23_GPIO | AW_GPIO_OUTPUT}, // {PWM7, IMX28_PWM7_GPIO, PIO3_26_PWM_7, PIO3_26_GPIO | AW_GPIO_OUTPUT} }; /**

* \\brief imx28 PWM 设备信息配置 *

* \\attention 结构体成员 PWM服务相关信息pwm_servinfo,使用哪些PWM通道,填入所使用的最小、最

大PWM ID。如:单独使用了PWM4,则pwm_servinfo为 {PWM4, PWM4} ,使用到的pwm通道数 pnum为1;如果使用了PWM0、PWM6两个通道,则pwm_servinfo为 {PWM0, PWM6} ,pnum为2。

*/

aw_local awbl_imx28_pwm_devinfo_t __g_imx28_pwm_devinfo = { {

PWM0, PWM7 },

&__g_imx28_pwm_devcfg_list[0], 2,

IMX28_CLK_PWM,

IMX28X_PWM_BASE_ADDR, }; ……

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

29

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 外设配置说明:对于用户来说,只要配置PWM列表__g_imx28_pwm_devcfg_list以及__g_imx28_pwm_devinfo。 用户使用哪个PWM,就要在__g_imx28_pwm_devcfg_list中配置对应PWM引脚,__g_imx28_pwm_devinfo配置可参考该配置的注释说明。

外设使用说明:用户在调用PWM标准接口时(interface/ aw_pwm.h),传入的PWM设备号要与__g_imx28_pwm_devcfg_list列表对应(PWM ID),以接口aw_pwm_enable为例,如下所示:

接口原型:

aw_err_t aw_pwm_enable(int pid);

举例说明:

aw_pwm_enable (PWM3); /* 使能PWM3 */

3.1.14 PWM Buzzer

PWM Buzzer即用PWM驱动的蜂鸣器设备,一般都是无源蜂鸣器,因而使用该设备前需要配置PWM设备。配置PWM Buzzer设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_PWM_BUZZER /* pwm buzzer */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_pwm_buzzer.h,打开后如下所示:

……

aw_local aw_const awbl_pwm_buzzer_param_t __g_pwm_buzzer_param = { PWM4, /* PWM通道ID */

366166, /* PWM波形输出周期(单位: 纳秒) */ 50 /* 初始响度(占空比) 50% ,范围0-100 */ }; ……

外设配置说明:对于用户来说,需要配置PWM ID、PWM周期以及蜂鸣器响度,并且要保证对应的PWM_ID在__g_imx28_pwm_devcfg_list中已配置。

注:SDK只支持一个 Buzzer实例,因而PWM_Buzzer和DC_Buzzer不能同时配置。

3.1.15 ADC

i.MX28支持两种类型的ADC:一类是LRADC(Low-Resolution ADC);一类是HSADC(High-Speed ADC),采样率可达2 Msps;。

1. AW_DEV_IMX28_LRADC

该设备为低速ADC,精度为12-bit,可用于触摸屏采样使用等。配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_LRADC /* iMX28 Low-Resolution ADC */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_lradc.h, 用户不用做修改。

外设使用说明:LRADC输入电压不可超过3.3V,通道共有7路,其中2、3、4、5默认配置提供给触摸屏使用,如果开启触摸屏设备,那么用户使用通道只有0、1、6。LRADC用ADC标准接口(interface/aw_adc.h)操作,以aw_adc_sync_read接口为例:

/* ADC通道索引 */

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

30

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks #define ADC0 0

#define ADC1 (ADC0 + 1) #define ADC2 (ADC0 + 2) #define ADC3 (ADC0 + 3) #define ADC4 (ADC0 + 4) #define ADC5 (ADC0 + 5) #define ADC6 (ADC0 + 6)

接口原型:

aw_err_t aw_adc_sync_read ( aw_adc_channel_t ch, void *p_val, uint32_t samples, bool_t urgent);

举例说明:

aw_adc_sync_read(ADC0, p_val, samples, urgent); aw_adc_sync_read(ADC1, p_val, samples, urgent); aw_adc_sync_read(ADC6, p_val, samples, urgent);

2. AW_DEV_IMX28_HSADC

该设备为高速ADC,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_HSADC /* iMX28 High-Speed ADC */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_hsadc.h, 用户不用做修改。

外设使用说明:HSADC输入电压不可超过1.85V。HSADC用ADC标准接口(interface/aw_adc.h)操作,以aw_adc_sync_read接口为例:

#define ADC23 (23)

接口原型:

aw_err_t aw_adc_sync_read ( aw_adc_channel_t ch, void *p_val, uint32_t samples, bool_t urgent);

举例说明:

aw_adc_sync_read(ADC23, p_val, samples, urgent);

3.1.16 Touch Screen

i.MX28 芯片自带触摸屏控制器(限i.MX283和i.MX287,i.MX280没有),由于该设备依赖ADC,因而需要开启IMX28_LRADC设备。配置Touch Screen需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_TS /* IMX28 Touch Screen 控制器 */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_ts.h,用户不用做修改。

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

31

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 3.1.17 LCD

i.MX28 芯片自带LCD控制器(限i.MX283和i.MX287,i.MX280没有),由于LCD背光需要PWM驱动,因而需要开启IMX28_PWM设备,并且需要开启GUI引擎设备,如emWin、µC/GUI等,目前SDK提供对emWin的适配支持。目前SDK中有480*272的LCD屏配置,配置该LCD设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_HW480272F /* HW480272F 液晶屏 */

#define AW_DEV_EMWIN_FB /* emWin GUI引擎(自动配置),默认与AW_DEV_HW480272F使用 */

LCD外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_hw480272.h,用户一般不用做修改。

emWin GUI引擎配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_emwin_fb.h,打开后如下所示:

……

/* 设备信息 */

aw_local aw_const awbl_mxs_emwin_fb_devinfo_t __g_emwin_fb_param = {

/* lcdif_info */ {

\"mxs_hw480272f\

/** \\brief 默认面板名 */ /** \\brief 默认面板单元号 */

0,

PWM3, /** \\brief 默认背光控制的PWM号 */

NULL, /** \\brief 决定使用哪个面板 (为NULL或失败时,使用默认面

板) */

IMX28_CLK_DIS_LCDIF, /** \\brief clk_dis_lcdif 时钟ID */ IMX28_CLK_H, /** \\brief clk_h 时钟ID */ IMX28X_LCDIF_BASE_ADDR, /** \\brief LCDIF寄存器基地址 */ INUM_LCDIF_IRQ, /** \\brief LCD中断号 */ } }; ……

外设配置说明:对于用户来说,需要确保背光控制的PWM设备是使能的。

外设使用说明:用户使能LCD设备后,就可以通过emWin GUI接口去实现界面显示。 3.1.18 PHY

PHY是物理接口的收发器,它实现了以太网物理层。SDK提供DP83848通用PHY驱动,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_GENERIC_PHY0 /* DP83848 通用 PHY 设备0(自动配置),默认提供给

EMAC0使用 */

#define AW_DEV_GENERIC_PHY1 /* DP83848 通用 PHY 设备1(自动配置),默认提供给

EMAC1使用 */

其中PHY0设备默认提供给EMAC0使用,PHY1设备默认提供给EMAC1使用。 具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_generic_phyX.h,以PHY0为例,打开后如下所示:

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

32

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks ……

/* 硬件 PHY 地址 */

#define PHY0_ADDR 0x05

/* 平台相关初始化 */

aw_local void __generic_phy0_plfm_init (void) {

aw_gpio_pin_cfg( PIO3_26, PIO3_26_GPIO | AW_GPIO_OUTPUT_INIT_HIGH | AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_12MA); /**

* Hard Reset PHY */

aw_gpio_set(PIO3_26, 1); aw_udelay(100); aw_gpio_set(PIO3_26, 0);

aw_udelay(1000); /* 大于1us的低电平将会复位PHY芯片(DP83848)*/ aw_gpio_set(PIO3_26, 1); } ……

外设配置说明:对于用户来说,需要配置PHY地址以及实现PHY芯片复位函数。 3.1.19 EMAC

i.MX28芯片内部提供EMAC控制器,用于实现以太网数据链路层协议。使用以太网功能时,需要配置该设备或SWITCH设备。配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_EMAC_0 /* IMX28 EMAC0 */ #define AW_DEV_IMX28_EMAC_1 /* IMX28 EMAC1 */

注:i.MX280没有EMAC,i.MX283有EMAC0,i.MX287有EMAC0、EMAC1和SWITCH。

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_emacX.h,以EMAC0为例,打开后如下所示:

….. /*

* 该配置决定 PHY芯片时钟是由iMX28x内部提供,还是外部晶振提供,需要参考具体电路图设计 *

* 如果由内部时钟提供,需要设置为 1 * */

#define PHY0_USE_INTER_50M_CLK 1 …..

外设配置说明:对于用户来说,只要配置PHY芯片输入时钟是由i.MX28内部时钟提供,还是由外部晶振提供。

注:需要确保PHY地址与实际的电路设计一致。

外设使用说明:配置了EMAC设备后,系统会自动开启以太网协议栈,目前SDK默认产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

33

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 使用LwIP,用户可以使用LwIP的socket接口进行网络通信。 3.1.20 SWITCH

SWITCH即交换机,只有i.MX287芯片才有此设备。配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_SWITCH /* IMX28_SWITCH */

需要注意,SWITCH与EMAC设备不能同时开启,当开启SWITCH设备后,PHY0与PHY1会自动开启。

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_switch.h,打开后如下所示:

….. /*

* 该配置决定 PHY芯片时钟是由iMX28x内部提供,还是外部晶振提供,需要参考具体电路图设计 *

* 如果由内部时钟提供,需要设置为 1 * */

#define PHY_USE_INTER_50M_CLK 1 …..

外设配置说明:对于用户来说,只要配置PHY芯片输入时钟是由i.MX28内部时钟提供,还是由外部晶振提供。

注:需要确保PHY0和PHY1地址与实际的电路设计一致。

外设使用说明:配置了SWITCH设备后,系统会自动开启以太网协议栈,目前SDK默认使用LwIP,用户可以使用LwIP的socket接口进行网络通信。 3.1.21 GPIO KEY

GPIO KEY是一类将按键直接连接到控制器的GPIO引脚,通过判断引脚的高低电平判断按键状态的设备。配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_GPIO_KEY /* GPIO KEY */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\ awbl_hwconf_imx28_gpio_key.h,打开后如下所示:

……

/* 按键管脚和对应的按键值,最多支持32个按键 */ aw_const aw_local struct gpio_key_map __g_keymap[] = {

{PIO3_14, KEY_1}, {PIO3_15, KEY_2}, {PIO3_27, KEY_3}, {PIO2_12, KEY_4} };

/* 按键设备信息 */

aw_local aw_const struct gpio_key_data __g_gpio_key_data = {

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

34

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks /* KEY 初始化 */ /* 按键列表 */

/* 按键按下,是否为低电平 */ /* number of keys */

/* 使用中断时,扫描时间 ms */ /* 按键扫描周期 ms */ /* 是否使用中断 */

NULL, __g_keymap, TRUE, AW_NELEMENTS(__g_keymap),

10, 20, 0 }; ……

外设配置说明:对于用户来说,一般只要配置按键列表__g_keymap。

外设使用说明:只要开启了GPIO KEY设备,AWokrs自动将按键消息放入输入子系统中进行处理,用户只要向输入子系统注册回调函数,并在回调函数中判断按键状态,示例如下:

/* 按键处理函数 */

void key_proc0_cb (void *p_input_data, void *p_usr_data) {

case KEY_2 : if (key_data->key_state) { // 按键按下状态

AW_INFOF((\"task_key_0 : KEY2 is down : %d. \\n\ }

else { // 按键松开状态

AW_INFOF((\"task_key_0 : KEY2 is up : %d. \\n\ }

break; /* 根据键值分类处理 */ switch (key_data->key_code) {

struct aw_input_key_data *key_data = (struct aw_input_key_data *)p_input_data; if (p_input_ev->ev_type != EV_KEY) { }

return;

struct aw_input_event *p_input_ev = (struct aw_input_event *)p_input_data;

default: break; } }

/* 注册按键处理回调函数 */

if (AW_OK != aw_input_handler_register(&input_key_handler0, key_proc0_cb, NULL)) { }

AW_INFOF((\"task_key_0 : input handler register failed. \\n\"));

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

35

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 3.1.22 CAN

只有i.MX287芯片才有CAN控制器,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_GPIO_KEY /* GPIO KEY */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_flexcanX.h,以CAN0为例,打开后如下所示:

……

aw_local void __imx28_can0_plfm_init (void) {

/** \\brief configure CAN0 td rd pin */ aw_gpio_pin_cfg(PIO0_22,

PIO0_22_CAN0_TX | AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_12MA);

aw_gpio_pin_cfg(PIO0_23,

PIO0_23_CAN0_RX | AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_12MA);

/** \\brief enable FLEXCAN0 and all the clocks to FLEXCAN0 are gated on*/ aw_clk_enable(IMX28_CLK_FLEXCAN0); } ……

/** \\brief CAN0 设备信息 */

aw_local aw_const struct awbl_imx28x_can_dev_info __g_imx28_can0_devinfo = { {

IMX28_FLAX_CAN0_BUSID, /**< \\brief 当前通道号:0 */ AW_CFG_CAN0_CTLR_HS, /**< \\brief 控制器类型*/ sizeof(struct aw_can_std_msg), /**< \\brief 一帧报文长度*/ AW_CFG_CAN0_RX_BUF_SIZE, /**< \\brief 接收缓冲区大小*/ can0_rx_msg_buff, /**< \\brief 接收缓冲区首地址*/ &can0_rd_buf_ctr /**< \\brief 接收rngbuf控制字*/ },

INUM_CAN0_IRQ, /**< \\brief 中断号:8*/ __CAN0_REG_BASE, /**< \\brief 寄存器基地址*/ __imx28_can0_plfm_init /**< \\brief 平台初始化函数*/ }; ……

外设配置说明:对于用户来说,一般只要配置CAN设备的发送Tx和接收Rx引脚,引脚可以参考awbl_imx28x_gpio_private.h。

外设使用说明:用户在调用CAN标准接口时(interface/aw_can.h),使用的CAN设备号要与IMX28_FLAX_CAN0_BUSID的值一致(以CAN0设备为例),以接口aw_can_init为例,如下所示:

IMX28_FLAX_CAN0_BUSID 定义在aw_prj_params.h中: #define IMX28_FLAX_CAN0_BUSID 0 #define IMX28_FLAX_CAN1_BUSID 1

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

36

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 接口原型:

aw_can_err_t aw_can_init ( int chn, uint8_t work_mode, aw_can_baud_param_t *p_baud, aw_can_app_callbacks_t *p_app_cb);

举例说明:

aw_can_init (0, work_mode, p_baud, p_app_cb);

3.1.23 SPI Flash

SDK支持SPI Flash设备,目前支持的SPI Flash芯片系列型号是MX25L(如MX25L6445等),只要与此芯片兼容的SPI Flash都可以操作。由于SPI Flash依赖SPI设备,因而需要开启SPI 设备。配置SPI Flash需要在aw_prj_params.h定义设备宏:

#define AW_DEV_NOR_FLASH /* NOR Flash 设备 */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_spi_flash.h,打开后如下所示:

……

aw_local struct awbl_nvram_segment __g_spiflash_seglst[] = { /* 存储段名称, 单元号, 起始地址,长度 */ {\"spi_flash_nvram\ 0, 0, 8*1024*1024}, {\"spi_flash_nvram0\ {\"spi_flash_nvram1\ {\"spi_flash_nvram2\};

/* 平台相关初始化 */

aw_local void __spi_flash_plfm_init (void) { };

/* 用NVRAM接口读写SPI Flash 时,需要的块缓存,应与块大小一致*/ aw_local uint8_t __g_block_buf[4096] = {0};

aw_local aw_const awbl_spi_flash_devinfo_t __g_spi_flash_devinfo0 = { &__g_spiflash_seglst[0], /* 非易失性存储段配置列表 */ AW_NELEMENTS(__g_spiflash_seglst), /* 非易失性存储段配置列表条目数 */ __g_block_buf,

/* 使用NVRAM读写时的缓冲区 */

\"/sflash0\ /* flash 注册成块设备的名字 */ 4096, /* flash 擦除操作的块大小 */ 2048, /* flash 对应块数量 */ 256, /* flash 写操作的页大小 */

1024, /* 保留1024个块,即4MB的空间 */ AW_SPI_MODE_0, /* 接口时序模式 */ PIO2_19, /* 片选引脚 */

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

37

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 30000000, /* SPI总线时钟 */ __spi_flash_plfm_init, };

aw_local awbl_spi_flash_dev_t __g_spi_flash_dev0;

#define AWBL_HWCONF_SPI_FLASH0

\\ \\ \\ \\

{ \\ AWBL_SPI_FLASH_NAME, AWBL_BUSID_SPI, &(__g_spi_flash_dev0.spi_dev.super),

}, ……

0, \\ IMX28_SSP2_BUSID, \\ &__g_spi_flash_devinfo0 \\

外设配置说明:配置需要对照SPI Flash芯片手册,下面以MX25L6445E为例进行说明: 芯片基本信息:块大小4096B,页大小256B,块数量2048,总容量8MB。

1) 配置SPI Flash芯片信息,包括块大小(4096),块数量(2048)和页大小(256); 2) 配置SPI设备信息,包括使SPI片选引脚(PIO2_19)以及SPI设备号(IMX28_SSP2_BUSID); 3) 配置使用NVRAM接口来读写SPI Flash的信息,包括读写缓冲区(__g_block_buf)以及

NVRAM列表(__g_spiflash_seglst)。如果不使用NVRAM接口读写,该项可以不配置。 4) 配置使用文件系统来读写SPI Flash的信息,包括设备名(“/sflash0”),以及配置文件系统使用的存储块大小(块数量2048 – 保留块大小1024 = 1024)。 外设使用说明:SPI Flash可以通过NVRAM和文件系统接口进行读写,文件系统配置请参考3.3.6。

1)

char *p_name = “spi_flash_nvram”; /* 名字需要在__g_spiflash_seglst 定义 */

/* 向 SPI Flash 写入数据 */

ret = aw_nvram_set (p_name, 0, (char *)p_buf, 0, 1024); if (ret != AW_OK) { }

/* 从 SPI Flash 读出数据 */

ret = aw_nvram_get (p_name, 0, (char *)p_buf, 0, len); if (ret != AW_OK) {

aw_kprintf(\"错误: spi flash %s 读失败\\n\ return ret;

aw_kprintf(\"错误: spi flash %s 写失败\\n\return ret;

通过NVRAM读写SPI Flash

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

38

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks } 2)

通过文件系统读写SPI Flash /* 文件系统格式化 */

if ((ret = aw_make_fs(“/sflash0”, “vfat”, &fmt)) != AW_OK) { AW_ERRF((\"failed: %d\\n\ return; }

AW_INFOF((\"make fs OK\\n\")); /* 文件系统挂载 */

ret = aw_mount(\"/export\ “/sflash0”, “vfat”, 0); if (ret != AW_OK) {

AW_ERRF((\"/export mount /sflash0 error: %d!\\n\return; }

AW_INFOF((\"mount OK\\n\"));

3.1.24 EEPROM

SDK支持EEPROM,目前支持的EEPROM芯片型号包括 ON 公司的芯片 CAT24C04 CAT24L04 和 RAMTRON 公司的 FM24C04 FM24L04,只要与这类芯片兼容的EEPROM都可以操作。由于EEPROM依赖I2C设备,因而需要开启I2C设备。配置EEPROM设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_EXTEND_EP24CXX_0 /* 外扩EEPROM */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_ep24cxx_0.h,打开后如下所示:

……

aw_local aw_const struct awbl_nvram_segment __g_ep24cxx_seglst[] = { /* 存储段名称, 单元号, 起始地址,长度 */ {\"ep24cxx\

0, 0x00, 0x38}, /* whole storage space */

{\"emac\ 0, 0x80, 7}, /* mac */ {\"awaddr\ 0, 0x88, 4}, /* anywhere address */ };

/** @} grp_aw_plfm_ext_ep24cxx_usrcfg */

/* EP24CXX 设备信息 */

aw_local aw_const struct awbl_ep24cxx_devinfo __g_ep24cxx_devinfo = { 0x40, /* I2C从机地址 */ AWBL_EP24CXX_EP24C256, /* 芯片型号 */

&__g_ep24cxx_seglst[0], /* 非易失性存储段配置列表 */ AW_NELEMENTS(__g_ep24cxx_seglst) /* 非易失性存储段配置列表条目数 */ };

/* EP24CXX 设备实例内存静态分配 */

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

39

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks aw_local struct awbl_ep24cxx_dev __g_ep24cxx_dev;

#define AWBL_HWCONF_EP24CXX_0 { 1, AWBL_BUSID_I2C, IMX28_I2C1_BUSID,

\\ \\ \\ \\ \\

AWBL_EP24CXX_NAME, \\

(struct awbl_dev *)&__g_ep24cxx_dev, \\ &__g_ep24cxx_devinfo \\ }, ……

外设配置说明:设置NVRAM列表__g_ep24cxx_seglst、EEPROM的I2C地址(如上为0x40)、EEPROM使用I2C设备号(如上为IMX28_I2C1_BUSID)以及EEPROM芯片型号(如上为AWBL_EP24CXX_EP24C256)。

外设使用说明:EEPROM通过NVRAM接口(interface/aw_nvram.h)进行读写,如下所示

char *p_name = “ep24cxx”; /* 名字需要在__g_ep24cxx_seglst定义 */

/* 向 EEPROM 写入数据 */

ret = aw_nvram_set (p_name, 0, (char *)p_buf, 0, 32); if (ret != AW_OK) { }

/* 从 EEPROM 读出数据 */

ret = aw_nvram_get (p_name, 0, (char *)p_buf, 0, 32); if (ret != AW_OK) {

aw_kprintf(\"错误: eeprom %s 读失败\\n\ return ret; }

aw_kprintf(\"错误: eeprom %s 写失败\\n\return ret;

3.1.25 DS2460

带EEPROM的SHA-1协处理器DS2460是ISO/IEC10118-3安全散列算法(SHA-1)的硬件实施方案,可用于产品加密。由于DS2460依赖I2C设备,因而需要开启I2C设备。配置DS2460设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_EXTEND_DS2460_0 /* 外扩DS2460 */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_ds2460_0.h,打开后如下所示:

……

aw_local aw_const struct awbl_nvram_segment __g_ds2460_seglst[] = { /* 存储段名称, 单元号, 起始地址,长度 */

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

40

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks */ */

{\"ds2460\ 0, 0x80, 0x38}, /* whole storage space {\"reserved\ 0, 0xfe, 0x38} /* reserved space };

/** @} grp_aw_plfm_ext_ds2460_usrcfg */

/* DS2460 设备信息 */

aw_local aw_const struct awbl_ep24cxx_devinfo __g_ds2460_devinfo = { 0x40, /* I2C从机地址 */ AWBL_EP24CXX_DS2460, &__g_ds2460_seglst[0], };

/* DS2460 设备实例内存静态分配 */

aw_local struct awbl_ep24cxx_dev __g_ds2460_dev;

#define AWBL_HWCONF_DS2460_0 { 1,

\\ \\ \\ /* 芯片型号 */

/* 非易失性存储段配置列表 */

AW_NELEMENTS(__g_ds2460_seglst) /* 非易失性存储段配置列表条目数 */

AWBL_EP24CXX_NAME, \\ AWBL_BUSID_I2C, \\ IMX28_I2C0_BUSID, \\ (struct awbl_dev *)&__g_ds2460_dev, &__g_ds2460_devinfo }, ……

\\ \\

外设配置说明:DS2460配置类似EEPROM,需要配置NVRAM列表__g_ds2460_seglst、DS2460的I2C地址(如上为0x40)以及I2C设备号(如上为IMX28_I2C0_BUSID)。

外设使用说明:DS2460通过NVRAM接口(interface/aw_nvram.h)进行读写,如下所示

char *p_name = “ds2460”; /* 名字需要在__g_ep24cxx_seglst定义 */

/* 向 DS2460 写入数据 */

ret = aw_nvram_set (p_name, 0, (char *)p_buf, 0, 32); if (ret != AW_OK) { }

/* 从 DS2460 读出数据 */

ret = aw_nvram_get (p_name, 0, (char *)p_buf, 0, 32); if (ret != AW_OK) {

aw_kprintf(\"错误: ds2460 %s 读失败\\n\

aw_kprintf(\"错误: ds2460 %s 写失败\\n\return ret;

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

41

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks return ret; }

3.1.26 RTC

RTC也是一种非常常用的外设,目前SDK共支持4种RTC,如下所示: 1. AW_DEV_IMX28_RTC

这是i.MX28 芯片内部的RTC模块,配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_RTC /* iMX28 RTC */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_rtc.h,打开后如下所示:

……

/* 设备信息 */

aw_local aw_const awbl_imx283_rtc_devinfo_t __g_imx283_rtc_param = { { 0 },

0x80056000 }; ……

/* 寄存器基地址 */

/* RTC设备编号 */

外设配置说明:对于用户来说,一般不用修改。

外设使用说明:系统会自动通过RTC(RTC设备编号为0)同步系统时间,因而如果需要设置或获取系统时间,用户可以调用系统时间接口(interface/aw_time.h),

/* 获取系统时间 */

aw_err_t aw_tm_get (aw_tm_t *p_tv); /* 设置系统时间 */

aw_err_t aw_tm_set (aw_tm_t *p_tm);

而不用直接调用RTC接口(interface/aw_rtc.h)。

2. AW_DEV_EXTEND_PCF8563_0

这是RTC芯片PCF8563设备,由于该设备是通过I2C驱动,因而需要配置I2C设备。配置PCF8563需要在aw_prj_params.h定义设备宏:

#define AW_DEV_EXTEND_PCF8563_0 /* PCF8563 RTC */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_pcf8563_0.h,打开后如下所示:

……

/* PCF8563 设备信息 */

aw_local aw_const struct awbl_pcf8563_devinfo __g_pcf8563_0_devinfo = { {

0 /* RTC 设备编号 */ },

0x51 /* I2C 从机地址 */ };

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

42

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks /* PCF8563 设备实例内存静态分配 */

aw_local struct awbl_pcf8563_dev __g_pcf8563_0_dev;

#define AWBL_HWCONF_PCF8563_0 { 0, AWBL_BUSID_I2C, IMX28_I2C1_BUSID, (struct awbl_dev *)&__g_pcf8563_0_dev, }, ……

\\ \\ \\ \\ \\ \\

AWBL_PCF8563_NAME, \\

&__g_pcf8563_0_devinfo \\

外设配置说明:对于用户来说,需要配置I2C从机地址(如上为0x51)以及I2C设备号(如上为IMX28_I2C1_BUSID)。 外设使用说明:系统会自动通过RTC(RTC设备编号为0)同步系统时间,因而如果需要设置或获取系统时间,用户可以调用系统时间接口(interface/aw_time.h),

/* 获取系统时间 */

aw_err_t aw_tm_get (aw_tm_t *p_tv); /* 设置系统时间 */

aw_err_t aw_tm_set (aw_tm_t *p_tm);

而不用直接调用RTC接口(interface/aw_rtc.h)。

3. AW_DEV_EXTEND_JYRTC1_0

这是RTC芯片JYRTC-1设备,由于该设备是通过I2C驱动,因而需要配置I2C设备。配置JYRTC-1需要在aw_prj_params.h定义设备宏:

#define AW_DEV_EXTEND_JYRTC1_0 /* JYRTC1 RTC */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_jyrtc1_0.h,打开后如下所示:

……

/* JYRTC1 设备信息 */

aw_local aw_const awbl_jyrtc1_devinfo_t __g_jyrtc1_0_devinfo = { {

0 /* RTC 设备编号 */ },

0x32 /* I2C 从机地址 */ };

/* JYRTC1 设备实例内存静态分配 */

aw_local struct awbl_jyrtc1_dev __g_jyrtc1_0_dev;

#define AWBL_HWCONF_JYRTC1_0

\\ \\ \\

43

{ AWBL_JYRTC1_NAME,

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 0, \\ AWBL_BUSID_I2C, \\ IMX28_I2C1_BUSID, (struct awbl_dev *)&__g_jyrtc1_0_dev, }, ……

\\ \\

&__g_jyrtc1_0_devinfo \\

外设配置说明:对于用户来说,需要配置I2C从机地址(如上为0x32)以及I2C设备号(如上为IMX28_I2C1_BUSID)。 外设使用说明:系统会自动通过RTC(RTC设备编号为0)同步系统时间,因而如果需要设置或获取系统时间,用户可以调用系统时间接口(interface/aw_time.h),

/* 获取系统时间 */

aw_err_t aw_tm_get (aw_tm_t *p_tv); /* 设置系统时间 */

aw_err_t aw_tm_set (aw_tm_t *p_tm);

而不用直接调用RTC接口(interface/aw_rtc.h)。

4. AW_DEV_EXTEND_RX8025_0

这是RTC芯片RX8025-T设备,由于该设备是通过I2C驱动,因而需要配置I2C设备。配置RX8025-T需要在aw_prj_params.h定义设备宏:

#define AW_DEV_EXTEND_RX8025_0 /* RX8025 RTC */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_rx8025_0.h,打开后如下所示:

……

/* RX8025 设备信息 */

aw_local aw_const awbl_rx8025_devinfo_t __g_rx8025_0_devinfo = { {

0 /* RTC 设备编号 */ },

0x32 /* I2C 从机地址 */ };

/* RX8025 设备实例内存静态分配 */

aw_local struct awbl_rx8025_dev __g_rx8025_0_dev;

#define AWBL_HWCONF_RX8025_0 { AWBL_RX8025_NAME,

\\ \\ \\

0, \\ AWBL_BUSID_I2C, \\ IMX28_I2C1_BUSID, \\ (struct awbl_dev *)&__g_rx8025_0_dev },

\\

&__g_rx8025_0_devinfo \\

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

44

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks ……

外设配置说明:对于用户来说,需要配置I2C从机地址(如上为0x32)以及I2C设备号(如上为IMX28_I2C1_BUSID)。 外设使用说明:系统会自动通过RTC(RTC设备编号为0)同步系统时间,因而如果需要设置或获取系统时间,用户可以调用系统时间接口(interface/aw_time.h),

/* 获取系统时间 */

aw_err_t aw_tm_get (aw_tm_t *p_tv); /* 设置系统时间 */

aw_err_t aw_tm_set (aw_tm_t *p_tm);

而不用直接调用RTC接口(interface/aw_rtc.h)。 3.1.27 ZigBee

ZM516X系列ZigBee无线模块是广州致远电子股份有限公司基于NXP JN5168 芯片开发的低功耗、高性能型 ZigBee 模块,它提供一个完整的基于 IEEE802.15.4 标准 ISM (2.4-2.5GHz)频段的应用集成方案。支持FastZigBee、ZNET、JenNet-IP、ZigBee-PRO、 RF4CE 等协议,可快速应用于工业控制、工业数据采集、农业控制、矿区人员定位、智能 家居,智能遥控器等场合。

ZM516X 系列 ZigBee 模块,将完整的射频收发电路集成在一个模块上,将无线通讯产品复杂的通讯协议内嵌在内置的 MCU 中,化繁为简,大幅简化开发过程,使得用户产品更快的投入市场,增加用户产品的竞争力,更好的把握住先机。

由于该设备是通过UART驱动的,因而需要配置UART设备。配置ZigBee需要在aw_prj_params.h定义设备宏:

#define AW_DEV_ZB_MODULE0 /* ZHIYUAN ZigBee Module */

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_zb_module0.h,打开后如下所示:

……

/* 平台相关初始化 */

aw_local void __zb_module_plfm_init(void) {

/* 设置复位引脚 */

aw_gpio_pin_cfg(PIO0_0, PIO0_0_GPIO |

AW_GPIO_OUTPUT_INIT_HIGH | AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_12MA); /* 复位芯片 */ aw_gpio_set(PIO0_0, 1); aw_udelay(200); aw_gpio_set(PIO0_0, 0); aw_udelay(200); aw_gpio_set(PIO0_0, 1);

/* 设置 ISP 引脚输出高电平 */

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

45

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks aw_gpio_pin_cfg(PIO0_3, PIO0_3_GPIO |

AW_GPIO_OUTPUT_INIT_HIGH | AWBL_IMX28X_GPIO_3V3 | AWBL_IMX28X_GPIO_12MA); aw_gpio_set(PIO0_3, 1); };

/* zigbee模块设备信息 */

aw_local aw_const struct zb_module_device_data __g_zb_module_data = {

0, /**< \\brief zigbee 设备编号,同一系统上每个模块的ID要不一样 */ IMX28_AUART1_COMID, /**< \\brief 使用的串口设备号 */ 115200, /**< \\brief 串口波特率 */ __zb_module_plfm_init /**< \\brief 平台相关初始化 */ }; ……

外设配置说明:对于用户来说,需要配置ZigBee设备编号(如上为0)、使用的串口设备号、串口波特率以及实现芯片初始化函数(复位芯片并将ISP引脚输出高电平)。 外设使用说明:用户在调用ZigBee标准接口时(interface/aw_zb_module.h),使用的设备号id要与配置的设备号的值一致,以接口aw_zb_send为例,如下所示:

接口原型:

/**

* \\brief 向zigbee模块发送nbytes个字节数据 *

* 这个接口向zigbee模块发送nbytes个字节数据。若设备的内部缓冲不够,将做如下处理: * 剩余的数据不会被写入,返回值为已经发送的数据个数 *

* \\param[in] id 模块编号

* \\param[in] p_buf 要写入模块的数据缓冲区指针 * \\param[in] nbytes 要写入的字节个数 *

* \\return 成功发送的数据个数,小于0为失败,失败原因可查看 errno */

ssize_t aw_zb_send(uint32_t id, const void *p_buf, size_t nbytes);

举例说明:

aw_zb_send (0, p_buf, nbytes);

3.1.28 USB host

i.MX28芯片提供一个USB host控制器和一个USB OTG控制器(OTG既可以作为device也可以是host),配置该设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_USB_HOST0 /* iMX28 USB host0 */ #define AW_DEV_IMX28_USB_HOST1 /* iMX28 USB host1 */

其中Host0是OTG控制器配置的。

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

46

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 外设配置说明:Host1具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\ awbl_hwconf_imx28_usbh1.h,用户一般不做修改。

Host0是OTG控制器,需要通过控制USB_OTG_ID引脚来配置OTG是device还是host,具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\awbl_hwconf_imx28_usbh0.h。

……

aw_local void __imx28_usb_hc0_plfm_init (void) {

uint32_t temp;

/* 配置 USB_OTG_ID 的引脚,低电平时,OTG 为 host */

aw_gpio_pin_cfg(PIO3_18, PIO3_18_GPIO | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA | AW_GPIO_OUTPUT | AW_GPIO_PULL_UP);

aw_gpio_set(PIO3_18, 0);

…… }; ……

当USB_OTG_ID引脚输入低电平时,OTG配置为Host0,当USB_OTG_ID引脚输入高电平时,是device0。因而使用host0时,需要将USB_OTG_ID引脚设置为低电平。

外设使用说明:如果需要读写U盘等USB主机操作,需要配置对应的USB驱动。 3.1.29 USB device

i.MX28芯片提供USB OTG控制器(OTG既可以作为device也可以是host),配置device设备需要在aw_prj_params.h定义设备宏:

#define AW_DEV_IMX28_USB_DEVICE0 /* iMX28 USB device0 */

注:AW_DEV_IMX28_USB_HOST0与AW_DEV_IMX28_USB_DEVICE0不能同时被开启。

具体外设配置{PROJECT}\config\\aw_hwconf_usrcfg}\\ awbl_hwconf_imx28_device0.h,打开后如下所示:

……

aw_local void __imx28_usbd0_plfm_init (void) {

……

/* 配置 USB_OTG_ID 的引脚,高电平时,OTG 为 device */

aw_gpio_pin_cfg(PIO3_18, PIO3_18_GPIO | AWBL_IMX28X_GPIO_3V3 |

AWBL_IMX28X_GPIO_8MA | AW_GPIO_OUTPUT | AW_GPIO_PULL_UP);

aw_gpio_set(PIO3_18, 1); …… } ……

/* 设备信息 */

aw_local aw_const struct awbl_imx28_usbd_info __g_imx28_usbd0_info = { {

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

47

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks \"/dev/usbd0\",

AWBL_USBD_CFG_SELF_POWERED },

IMX28X_USBCTRL0_BASE_ADDR, IMX28X_USBPHY0_BASE_ADDR, INUM_USB0_IRQ,

IMX28_CLK_USB_PHY_CLK0, __imx28_usbd0_plfm_init }; ……

外设配置说明:Host0是OTG控制器,需要通过控制USB_OTG_ID引脚来配置OTG是device还是host,当USB_OTG_ID引脚输入低电平时,OTG配置为Host0,当USB_OTG_ID引脚输入高电平时,是device0。

 因而要使用device,需要将USB_OTG_ID引脚设置为高电平。  设置USB device设备名(如上为“\"/dev/usbd0\"”) 其他设置用户不做修改。

外设使用说明:通过USB device设备名(如上为“\"/dev/usbd0\"”),找到对应的device设备,使用如下所示:

/* 找一个控制器 */

p_usbd = awbl_usbd_find_dev (\"/dev/usbd0\");

if (p_usbd == NULL) { }

AW_INFOF((\"TEST USBD: could not find a USBD controller.\\n\")); return;

3.2 驱动配置

为了方便用户配置,外设的驱动在外设开启后,系统会自动添加其驱动。但对于一些特殊的驱动,需要用户自行开启,如下所示: 3.2.1 USB Mass Storage

如果需要读写U盘等USB大容量存储设备,则需要配置这个驱动,并且需要配置USB Host设备。配置该驱动需要在aw_prj_params.h定义驱动宏:

#define AW_DRV_AWBL_USB_MASS_STORAGE

U盘读写操作说说明:U盘插入后会被枚举为块设备,块设备名字需要查看调试信息打印,如下所示:

USB:found a device.

USB MS: found a mass storage device. USB MS: has 1 luns.

USB MS: luns0's capacity is: 7600 MB USB MS: /dev/ms2-ud0.

当前为“/dev/ms2-ud0”。这样用户就可以用FatFs文件系统(配置参考3.3.6)对其进行格式化、挂载以及读写操作,如下所示:

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

48

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks /* 文件系统格式化 */

if ((ret = aw_make_fs(“/dev/ms2-ud0”, “vfat”, &fmt)) != AW_OK) { AW_ERRF((\"failed: %d\\n\ return; }

AW_INFOF((\"make fs OK\\n\"));

/* 文件系统挂载 */

ret = aw_mount(\"/export\ “/dev/ms2-ud0”, “vfat”, 0); if (ret != AW_OK) {

AW_ERRF((\"/export mount /dev/mtd0 error: %d!\\n\return; }

AW_INFOF((\"mount OK\\n\"));

3.2.2 USB Pl2303

PL2303是Prolific公司生产的一种高度集成的RS232-USB接口转换器,该驱动需要配置一个USB host设备。配置该驱动需要在aw_prj_params.h定义驱动宏:

/**

* \\name USB转串口PL2303芯片驱动,此驱动依赖USB host设备,因而需要配置一个USB host设备 * * @{ */

#define AW_DRV_AWBL_USB_PL2303

组件使用说明:当PL2303 USB转串口设备插入到USB host后,系统会自动分配一个UART设备号,用户可以用这个设备号通过UART标准接口(interface/aw_serial)即可操作PL2303,如下即为插入后打印信息:

USB:found a device.

Manufacturer: Prolific Technology Inc. Product: USB-Serial Controller USB serial: found a new usb serial, com 1.

3.3 组件配置

3.3.1 Console

Console即控制台,实现将输出信息显示在串口软件上,可以方便用户调试。配置该组件需要在aw_prj_params.h定义组件宏:

/**

* \\name 控制台组件,控制 aw_kprintf 输出使能,还包括AW_INFOF,AW_ERRF,AW_LOGF等 * @{ */

#define AW_COM_CONSOLE

组件配置说明:控制台Console配置包括选择串口号以及配置波特率,具体在aw_prj_params.h中,如下所示:

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

49

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks /******************************************************************************* 控制台配置

*******************************************************************************/ /**

* \\addtogroup grp_aw_plfm_vdebug_usrcfg * @{ */

/** \\brief 控制台启动时,是否显示欢迎标识:0-不显示 1-显示 */ #define AW_CFG_CONSOLE_SHOW_BANNER 1

/** \\brief 控制台串口号 */

#define AW_CFG_CONSOLE_COMID

/** \\brief 控制台波特率 */

#define AW_CFG_CONSOLE_BAUD_RATE 115200

/** @} grp_aw_plfm_vdebug_usrcfg */

IMX28_DUART_COMID

系统默认使用IMX28_DUART设备,用户一般不做修改。

组件使用说明:用户调用AW_INFOF、AW_ERRF以及aw_kprintf等调试打印函数,就会将信息打印在串口软件上。 3.3.2 Shell

Shell是一个命令解释器,它接收用户输入的命令并把它送入内核去执行。这种Shell是通过串口UART获取用户输入,配置该组件需要在aw_prj_params.h定义组件宏:

#define AW_COM_SHELL_SERIAL /**< \\brief 使能串口shell */

组件配置说明:该组件配置包括shell线程优先级、线程堆栈大小以及使用的串口设备号,具体在aw_prj_params.h中,如下所示:

#define AW_CFG_SHELL_THREAD_PRIO 6u /**< \\brief serial shell 线程优先级 */ #define AW_CFG_SHELL_THREAD_STK_SIZ 8192u /**< \\brief serial shell 线程堆栈大小 */ /**< \\brief serial shell 使用的串口设备号 */

#define AW_CFG_SHELL_SERIAL_COMID IMX28_DUART_COMID

3.3.3 Event

AWorks支持事件系统,用户可以通过事件系统,方便地实现消息通知机制。配置该组件需要在aw_prj_params.h定义组件宏:

#define AW_COM_EVENT /**< \\brief 使能事件系统(自动配置) */

注:当使用外设KEY、触摸屏以及文件系统等组件时,event组件会自动配置。但是如果那些外设或组件没有配置,而用户需要使用event时,则需要使能该组件,系统不会自动配置。

组件配置说明:该组件配置包括Event线程优先级、线程堆栈大小以及事件系统中消息个数,具体在aw_prj_params.h中,如下所示:

#define AW_CFG_EVENT_TASK_STK_SIZE 2048 #define AW_CFG_EVENT_TASK_PRIO

/**< \\brief 事件框架处理任务堆栈大小 */

8 /**< \\brief 事件框架处理任务优先级 */

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

50

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks #define AW_CFG_EVENT_MSG_NUM 16 /**< \\brief 事件框架最大并发消息个数 */

AWorks的输入子系统是基于Event实现的,当需要使用输入子系统接口时(interface/aw_input.h),就需要配置该组件。配置该组件需要在aw_prj_params.h定义组件宏:

#define AW_COM_AWBL_INPUT_EV /**< \\brief 使能输入事件管理 (自动配置)*/

目前AWorks有两种输入事件,按键事件AW_COM_AWBL_INPUT_EV_KEY以及绝对事件AW_COM_AWBL_INPUT_EV_ABS。在外设AW_DEV_GPIO_KEY和AW_DEV_IMX28_TS使能后,配置会自动开启。 3.3.4 Network

当需要使用以太网协议栈时,需要配置该组件,目前AWokrs仅提供LwIP协议栈,配置该组件需要在aw_prj_params.h定义组件宏:

#define AW_COM_NETWORK /**< \\brief 使能网络协议栈(自动配置) */

注:当使用外设emac、switch时,network组件会自动配置。但是如果那些外设没有配置,而用户需要使用网络协议栈时,则需要配置该组件,系统不会自动配置。

3.3.5 Ftp sever

FTP是File Transfer Protocol(文件传输协议)的英文简称,用于internet上的文件双向传输。目前AWorks仅提供ftp sever功能,配置该组件需要在aw_prj_params.h定义组件宏:

#define AW_COM_FTPD /**< \\brief ftp server 组件 */

组件配置说明:ftp sever组件配置包括ftp连接最大数目、ftp线程优先级、堆栈大小以及buffer大小,具体在aw_prj_params.h中,如下所示:

#define FTPD_MAX_SESSIONS #define FTPD_LISTEN_TASK_PRIO #define FTPD_LISTEN_TASK_STK_SIZE #define FTPD_CMD_BUF_SIZE

10 /**< \\brief FTPD 最大同时连接数目 */ 6 /**< \\brief FTPD 任务优先级 */ 4096 /**< \\brief FTPD 栈大小 */

0x10000 /**< \\brief FTPD 运行buffer 大小 */

组件使用说明:ftp运行时,需要依赖存储设备(SD卡或NAND FLASH等)、以太网外设(EMAC或SWITCH等)以及文件系统和以太网协议栈(Network),因而这些外设和组件需要使能配置。 3.3.6 File System

File System即文件系统,由于文件系统使用时需要依赖块设备、mount组件以及I/O系统,因而这些组件也需要配置,具体配置需要在aw_prj_params.h定义组件宏:

/** \\name 块设备驱动框架统裁剪配置 */

#define AW_DRV_BLOCK_DEV /**< \\brief 使能块设备驱动框架 */

/** \\name MTD 设备(ROM,NOR-Flash 和 NAND-Flash 等)驱动框架统裁剪配置 */ #define AW_DRV_MTD_DEV /**< \\brief 使能 MTD 设备驱动框架 */

/** \\name I/O 系统裁剪配置 */

#define AW_COM_IO_SYSTEM /**< \\brief 使能 I/O 系统 */

/** \\name I/O 系统存储卷挂载点裁剪配置 */

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

51

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks #define AW_COM_MOUNT /**< \\brief 存储卷挂载点 */

这些组件也是需要配置的,具体配置在aw_prj_params.h中:

#define AW_CFG_IO_OPEN_FILES_MAX 8 /**< \\brief 系统能同时打开的文件个数 */ #define AW_CFG_MOUNT_POINTS

4

/** \\name 文件系统挂载点个数 */

同时打开个数与挂载点数都必须大于各个文系统配置之和。

目前AWorks支持FatFS、UFFS、 RAW文件系统,这些文件系统都是依赖根文件系统rootfs进行管理,因而也需要配置根文件系统,具体在aw_prj_params.h定义组件宏:

#define AW_COM_FS_ROOTFS /**< \\brief 使能根文件系统 */

下面将逐个介绍各个文件系统配置:

1. FatFs

配置该文件系统需要在aw_prj_params.h定义组件宏:

#define AW_COM_FS_FATFS

/**< \\brief 使能 FAT 文件系统 */

组件具体配置在aw_prj_params.h中,如下所示:

/**

* \\name FAT 文件系统裁剪配置 * @{ */

#define AW_CFG_FATFS_VOLUMES 2 #define AW_CFG_FATFS_FILES /** @} */

4

#define AW_CFG_FATFS_BLOCK_SIZE 4096

/**< \\brief FAT 文件系统卷个数 */ /**< \\brief FAT 文件系统同时打开文件数 */ /**< \\brief FAT 文件系统最大块大小 */

组件配置说明:Fat文件系统卷个数(即用FatFs mount操作后的根节点个数,必须小于AW_CFG_IO_OPEN_FILES_MAX)、文件系统同时打开个数(必须小于AW_CFG_MOUNT_POINTS)、文件系统最大块大小。 组件使用说明:目前SPI Flash、SD卡,U盘可以使用FatFs进行文件读写,而Nand Flash设备因为需要坏块管理以及均衡磨损管理,因而需要使用UFFS文件系统。

2. UFFS

配置该文件系统需要在aw_prj_params.h定义组件宏:

#define AW_COM_FS_UFFS /**< \\brief 使能 UFFS 文件系统 */

组件具体配置在aw_prj_params.h中,如下所示:

/**

* \\name UFFS 文件系统裁剪配置 * @{ */

#define AW_CFG_UFFS_VOLUMES 2 /**< \\brief UFFS 文件系统卷个数 */

#define AW_CFG_UFFS_FILES 4 /**< \\brief UFFS 文件系统同时打开文件数 */ /** @} */

组件配置说明:UFFS文件系统卷个数(即用UFFS mount操作后的根节点个数,必须小于AW_CFG_IO_OPEN_FILES_MAX)、文件系统同时打开个数(必须小于AW_CFG_MOUNT_POINTS)、文件系统最大块大小。 产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

52

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 组件使用说明:当需要读写Nand Flash时,就需要使用该文件系统。 3. RAW

配置该文件系统需要在aw_prj_params.h定义组件宏:

#define AW_COM_FS_RAWFS /**< \\brief 使能 RAW 文件系统 */

组件具体配置在aw_prj_params.h中,如下所示:

/**

* \\name RAW 文件系统裁剪配置 * @{ */

#define AW_CFG_RAWFS_VOLUMES 1 /**< \\brief RAW 文件系统卷个数 */ #define AW_CFG_RAWFS_FILES /** @} */

1 /**< \\brief RAW 文件系统同时打开文件数*/

#define AW_CFG_RAWFS_BLOCK_SIZE 512 /**< \\brief RAW 文件系统最大块大小 */

3.4 系统资源配置

3.4.1 aw_main线程

用户的入口函数aw_main()(定义在{PROJECT}/user_code/main.c)其实是运行在一个线程中(其创建在{SDK}/Apollo/rtk/config/all/aworks_startup.c中),线程的配置在aw_prj_param.h中,如下所示:

/** \\brief main任务堆栈大小,推荐 >= 512 */

#define AW_CFG_MAIN_TASK_STACK_SIZE (1024 * 4)

/** \\brief main任务优先级 */

#define AW_CFG_MAIN_TASK_PRIO 1

其中配置包括aw_main线程的优先级及堆栈大小。

4. 免责声明

此使用手册的著作权属于广州致远电子股份有限公司。任何个人或者是单位,未经广州致远电子股份有限公司同意,私自使用此手册进行商业往来,导致或产生的任何第三方主张的任何索赔、要求或损失,包括合理的律师费,由您赔偿,广州致远电子股份有限公司与合作公司、关联公司不承担任何法律责任。

广州致远电子股份有限公司特别提醒用户注意:广州致远电子股份有限公司为了保障公产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

53

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 司业务发展和调整的自主权,广州致远电子股份有限公司拥有随时自行修改此手册而不需通知用户的权利,如有必要,修改会以通告形式公布于广州致远电子股份有限公司网站重要页面上。

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

54

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 销售与服务网络(一)

广州周立功单片机科技有限公司

地址:广州市天河北路689号光大银行大厦12楼F4 邮编:510630

电话:(020)38730916 38730917 38730972 38730976 38730977 传真:(020)38730925 网址:www.zlgmcu.com

广州专卖店

地址:广州市天河区新赛格电子城203-204室 电话:(020)87578634 87569917 传真:(020)87578842

南京周立功

地址:南京市珠江路280号珠江大厦1501室 电话:(025) 68123901 68123902 传真:(025) 68123900

北京周立功

地址:北京市海淀区知春路113号银网中心A座1207-1208室(中发电子市场斜对面) 电话:(010)62536178 62536179 82628073 传真:(010)82614433

重庆周立功

地址:重庆市石桥铺科园一路二号大西洋国际大厦(赛格电子市场)1611室 电话:(023)68796438 68796439 传真:(023)68796439

杭州周立功

地址:杭州市天目山路217号江南电子大厦502室 电话:(0571)89719480 89719481 89719482 89719483 89719484 89719485 传真:(0571)89719494

成都周立功

地址:成都市一环路南二段1号数码科技大厦403室

电话:(028)85439836 85437446 传真:(028)85437896

深圳周立功

电话:(0755)83781788(5线) 传真:(0755)83793285

武汉周立功

中电脑数码市场)

电话:(027)87168497 87168297 87168397 传真:(027)87163755

地址:深圳市福田区深南中路2072号电子大厦12楼 地址:武汉市洪山区广埠屯珞瑜路158号12128室(华

上海周立功

地址:上海市北京东路668号科技京城东座7E室 电话:(021)53083452 53083453 53083496 传真:(021)53083491

西安办事处

地址:西安市长安北路54号太平洋大厦1201室 电话:(029)87881296 83063000 87881295 传真:(029)87880865

厦门办事处

E-mail:sales.xiamen@zlgmcu.com

沈阳办事处

E-mail:sales.shenyang@zlgmcu.com

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

55

广州致远电子股份有限公司 EasyARM_IMX28x用户手册 AWorks 销售与服务网络(二)

广州致远电子股份有限公司

地址:广州市天河区车陂路黄洲工业区7栋2楼 邮编:510660 传真:(020)38601859 网址:www.zlg.cn

技术支持: CAN-bus:

电话:(020)22644381 22644382 22644253 邮箱:can.support@zlg.cn

iCAN及数据采集:

电话:(020)28872344 22644373 邮箱:ican@zlg.cn

MiniARM:

电话:(020)28872684 28267813 邮箱:miniarm.support@zlg.cn

以太网:

电话:(020)22644380 22644385 邮箱:ethernet.support@zlg.cn

无线通讯:

电话:(020) 22644386 邮箱:wireless@zlg.cn

串行通讯:

电话:(020)28267800 22644385 邮箱:serial@zlg.cn

编程器:

电话:(020)22644371 邮箱:programmer@zlg.cn

分析仪器:

电话:(020)22644375 邮箱:tools@zlg.cn

ARM嵌入式系统:

电话:(020) 22644383 22644384 邮箱:NXPARM@zlg.cn

楼宇自动化:

电话:(020)22644376 22644389 28267806 邮箱:mjs.support@zlg.cn mifare.support@zlg.cn

销售:

电话:(020)22644249 22644399 22644372 22644261 28872524 28872342 28872349 28872569 28872573 38601786

维修:

电话:(020)22644245

产品用户手册 ©2015 Guangzhou ZHIYUAN Electronics Stock Co., Ltd.

56

因篇幅问题不能全部显示,请点此查看更多更全内容