您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > DA14580学习总结
DA14580学习汇总简介芯片名称:DA14580内核:Cortex-M032-bit系统时钟:16MHZ睡眠时钟:32K(所以要外挂两个晶振)协议栈:不开源,采用RivieraWaves授权协议栈IPRam:42kBSystemSRAM(存放运行数据)8kBRetentionSRAM(低漏电存储器,暂存休眠状态下的运行数据)存储方式:32k的OTP(一次性烧录),要实现反复烧录则需要外挂一个flash或者EEPROM84kBROM(存放协议栈)最小系统只需7个元件支持仿真烧录方式:串口烧录(JTAG也可以烧录,烧录到外挂的芯片中)封装:34pins,40pins,48pins功耗:首款突破4mA无线收发电流极限的蓝牙智能解决方案(小米手环可满足30天续航)术语Profile:配置文件(在GATT的基础上进行数据的本地处理)GATT:GenericAttributeProfile通用的配置文件(负责基础的数据通信)DISS:设备信息服务(显示设备的制造商信息)UUID:全球唯一识别码,如0x2A45位设备序列号的UUID(任意蓝牙都可以通过他获取到设备序列号)。AES:AdvancedEncryptionStandard是DA14580中内置的128位加密处理器development_guide:开发手册GAP:GenericAccessProfile通用接口配置。跟蓝牙的advertising相关GTL:GenericTransportLayer通用传输层。当工作于外部主控模式时,用来传输主控到DA14580的数据NVDS:Non-VolatileDataStorage非易失性数据存储器OTP:OneTimeProgrammable(memory)单次可编程存储器PHY:physicallayer物理层LL:LinkLayer链路层外挂EEPROMDA14580的芯片是没有flash空间的(其实有个32kb的OTP,但只能烧写一次),也可以使用烧录到内存,但是掉电过后就没有程序了。所以开发过程中一般使用以下几个模式:1.Debug模式,即通过jlink,又或者其它工具使用swd接口(vcc,gnd,swclk,swdio),通过KeilMDK将程序写进RAM中,直接调试。(缺点就是断电后数据就丢失)。2.外挂E2Prom,此种方法相当于将E2当成DA14580的Flash空间,源码写在E2里面,DA14580芯片上电之后将E2的数据复制到RAM中,运行。(缺点就是烧写比较麻烦~但是当用到睡眠模式时,必须使用它来进行软件功能验证,因为有可能会出问题的!所以必须验证)。3.OTP模式~此种模式,只能烧一次~最终产品才烧~通过SmartSnippets工具下载代码到OTP一般前期阶段使用的是Debug模式,后期需要用到睡眠等等其他Debug不能调试的情况下采用外挂E2Prom模式。启动顺序DA14580的开发者关注的问题对于蓝牙单芯片应用开发来说,我们要关注的问题是:蓝牙协议栈方面如何新增一个GATTprofile(服务和特征值定义及操作)、SOC内核方面如何驱动外围设备、系统应用框架上如何使用定时器和任务间消息通信等等。DA14580单芯片发布时并不是一颗裸片,而是带有开发平台和SDK包,还有常用的应用例程(如防丢proximity),我们要做的就是通过SDK和相关的文档去理解它整个系统架构和应用框架,在这个基础上才能去完成以上三个方面的开发。SDK目录结构DA14580的SDK开发平台使用keil,我们先来看看开发例程的目录结构,再来看SDK目录结构。前者简单一些,后者因为涉及到第三方IP、ROM等原因,目录实在是太多太细了,初接手真的会歇菜。防丢(proximity,英文是接近的意思)的开发目录结构如下:这里需要注意的是,ROM里面的固话代码,包括协议栈和单任务操作系统的相关管理代码也是整个工程应用的一部分,只不过没有列到开发目录里面。SDK目录架构如下:Profile(BLE的GATT服务)Profile部分或许是为了更加便利蓝牙应用推出的。注意:在DA14580中,只有上诉的一部分,比如银屏传输,文件传输是不可以使用的。从工程的代码目录结构来看,每个profile都有一个以profile(如proxr)命名的.c文件,也有一个以profile_task(如proxr_task)命名的.c文件;相应地,每个应用子任务也有一个app_profile(如app_proxr)的.C文件,和app_profile_task(如app_proxr_task)的.c文件。一般地:在操作系统ke内核看来,Profile和profile_task共同完成一个task任务,其中app_proxr_task的taskID标识是TASK_PROXR。但app_profile和app_profile_task并不是一个具体的task任务,在代码目录的app目录,所有的task,包括app_proxr_task和app_batt_task(电池)、app_sec_task(安全)共同组成一个task,在app.c中完成任务创建,task的ID标识是TASK_APP。各个app_profile_task只不过完成应用的一个子场景功能,如防丢、电池告警等。app是主动发送消息给profile,以执行相应的蓝牙GATT服务和操作,并接受回调。即app是profile的上层。Profile任务执行GATT服务/属性的具体创建create、开启服务enable和属性特征的读写等操作,其调用ATT和GAP等底层接口来实现具体功能。Profile作为接口供给app层调用,app是通过消息通信来完成接口调用的。app_profile的代码一般包括主动调用的接口实现,而app_profile_task则是接受消息回调的接口实现。两者的分工是非常清晰的。应用开发框架DA14580的应用开发框架的核心是基于状态机和消息回调。以下分析以防丢proxr为例。1.状态机每个任务都必须明确自己的状态表,例如proxr的状态表是:状态的初始化和转换是由用户主动切换的。在某个确定的状态时,内核会在对应的状态响应接口集中遍历所有发给该任务的消息。每个任务都会在初始化时被创建,例如proxr任务的创建是:这时,假设有个其他的任务发一个消息给TASK_PROXR,则会在proxr_disabled中查找相应的消息回调接口,并执行回调。2.消息回调接下来看看各个状态的响应接口集,例如PROXR_CONNECTED连接状态时的状态响应接口集如下。可见,其会对两个消息进行回调,一个是底层ATT收到对特征值的写操作时执行回调,另一个应用层主动改写另一个特征值。在笔者的防丢和计步应用中,前者是实现防丢告警功能,后者是上报计步数据。3.任务间通信消息发出之后,系统即会执行proxr_jibu_update_req_handler回调。另外,笔者会根据文章的阅读量考虑进一步对DA14580的SDK进行分析,如系统启动过程、服务建立过程以及上面说的,如何进行应用开发,即蓝牙协议栈方面如何新增一个GATTprofile(服务和特征值定义及操作)、SOC内核方面如何驱动外围设备、系统应用框架上如何使用定时器和任务间消息通信等等。软件层次架构BLE协议栈可以大致分为应用层、profile服务层、BLEHost层(软件实现)、BLEcontroller层(硬件实现,属于基带部分)BLEhost实现数据适配L2CAP、链路管理GAP、基础属性协议ATT,GATT是基于ATT进行封装并向上层提供接口服务,以让用户更方便地使用ATT来进行数据交互。他们都分别对应RW内核的一个或者多个task,例如GAP包括GAP管理和GAP控制两个task。Profile层是基于GATT来向应用层提供数据通信服务的,每个profile都负责自己的专有的服务功能。例如,有电池服务、设备信息服务和自定义的一些profile等等。GATT是负责基础的数据通信,而profile则是在GATT的基础上进行数据的本地处理。例如,GATT收到对方的写请求时会通知profile,由profile来决定怎么处理接收到的数据,可以写到属性字段中,也可以不写,profile也可以进一步给task_app发送通知。各个profile是独立并且平等的,因为各个GATT都是平等服务的。每个profile都对应RW内核的一个task。应用层是基于多个profile来实现自己的需求。由于RW内核实质是一个单任务内核,所以应用层是一个特别的task。其和所有的profile打交道,其控制所有profile,并处理各个profile的消息回调。1.2task层次根据上面的分析,我们可以得到以下task层次图:蓝牙BLEDA14580集成的是第三方公司RW的蓝牙协议栈IP,范围包括GAT和GAP层及以下。因此我们可以在代码框架目录上看到RW开头命名的目录和头文件,官方文档涉及到蓝牙协议栈方面大部分都是RW公司出品。蓝牙通信分为了两个部分:底层协议栈和上层APP(我们只能见到上层app),协议给上层发消息,会有对应的消息处理函数。上层向底层发送消息,底层协议栈执行后,会有信息反馈回来。低功耗四种工作模式:active、idle、extendedsleep、deepsleep;active与idle模式,不做详细表述。extendedsleep浅度休眠,休眠之后,除ROM外,仅仅有RAM处于供电状态以保存数据,其他模块部分会掉电。deepsleep仅保留ROM供电。DA14580是低功耗蓝牙模块,因此每隔一段时间就会进入休眠。然后开定时器之后会再次唤醒。由于进入休眠再唤醒之后,一些模块的状态会重新恢复为初始化状态,所以需要特别留意。编程-GPIO开发工具手机上安装一个Lightblue(苹果,8.0以上系统支持)的APP,电脑安装KEIL的安装,SmartSnippets的安装。引脚图迅捷DA14580学习开发板接口图引脚图下载到内存方法一:SmartSnippets下载到ram①打开SmartSnippets②新建工程new③选择串口下载模式,芯片选择DA14580-01④OPEN⑤设置里面选择04/05引脚作为串口⑥点击booter选项⑦Borwse浏览到hex文件⑧Dlowload,复位。⑨下载到内存,断电后丢失数据。方法二:Keil下载到Ram中①需要JTAG接SW引脚②点击Debug则会下载到RAM中下载到Flash(参考实战教程从外部SPIFlash启动)①连接JLINK②连接SPI的4个跳线帽,去掉EEPROM的跳线帽、③连接如下:④打开Smartsnippet软件⑤选择flash下载⑥点击connect,此时会把bootloader下载到RAM中,会显示烧录成功⑦点击Erase,成功会把所有地址里面的内容全部写为1⑧Browse下载hex文件⑨Bum进行烧录⑩点击YES11然后就可以从FLASH中读取内容回来,看是否和烧录的内容一致USB转串口USB转串口采用的芯片CP2102,需要驱动安装,USB_D+------接单片机的P0_3USB_D﹣-----默认接单片机的P0_5,也可以接到P0_1SDK介绍(参考官网提供的软件架构)dk_apps:DevelopmentKitapplicationdirectory开发包应用文档(包含官网提供的DEMO程序)。Prod_test:productiontest的用来进行产品测试的固件源代码.proximity:monitor_fe、monitor_fe_usb、reporter_fe、reporter_fe_spi、repoeter_fe_usb这几个工程都是主控模式的防丢器DEMO;report_fh是非主控的防丢器DEMO。report_fh是常用的,其它几个可以不用理会。讯联电子提供的防丢器测试程序就是基于这个修改而来的。这里提下_fe是Fully_Embedded的缩写,带这个字眼的工
本文标题:DA14580学习总结
链接地址:https://www.777doc.com/doc-5200284 .html