2018-12-12 23:10:37 lin5103151 阅读数 1703
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4003 人正在学习 去看看 朱有鹏

最近开发的一个小项目需要支持蓝牙在线升级,今天便详细地了解一番。蓝牙在线升级的方式,流程如图
在这里插入图片描述
流程解释: 产品的最新程序放在云端的服务器上,并将程序更新的提醒通过手机APP推送给用户,当用户点击程序更新时,APP将程序下载至手机上,并通过蓝牙传输到STM32上,这时单片机解析到的指令为程序更新,便触发IAP在线刷新程序。

要实现这一功能,必须通过单片机的串口IAP在线升级功能。
1.什么是IAP?

IAP(In Application Programming)即在应用编程,IAP 是用户自己的程序在运行过程中对User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。

所以要实现IAP功能,固件程序须分为两个代码,即引导程序(BootLoader)和用户程序(APP)。
1.引导程序(BootLoader):只执行串口数据的接收、烧写程序并将程序执行地址跳转至用户程序段(此代码只能通过JTAG或SWD烧写)
2.用户程序(APP):执行用户所要实现的程序(此代码通过串口接收,IAP烧写入单片机flash中)

2.STM32程序的启动方式
为什么能将程序分成两个程序分别下载,要理解这个,我们有必要了解一下STM32的启动方式,因为我用的是STM32F103C8T6,所以就以这个型号为例:
STM32上电或者复位后,代码区始终从0x00000000开始,三种启动模式其实就是将各自存储空间的地址映射到0x00000000中。其启动模式由BOOT0和BOOT1引脚的电平高低来控制。
在这里插入图片描述
1、BOOT1=x BOOT0=0:从Flash启动,将主Flash地址0x08000000映射到0x00000000,这样代码启动之后就相当于从0x08000000开始,这是正常的工作模式。
2、BOOT1=0 BOOT0=1:从系统存储器启动。首先控制BOOT0 BOOT1管脚,复位后,STM32与上述两种方式类似,从系统存储器地址0x1FFF F000开始执行代码,这种模式启动的程序功能由厂家设置。
3、BOOT1=1 BOOT0=1: 从RAM启动,将RAM地址0x20000000映射到0x00000000,这样代码启动之后就相当于从0x20000000开始,这种模式可以用于调试。
这里,我默认使用的模式是主闪存控制器启动,也就是从Flash启动。

3. Flash在STM32内存空间的定义
STM32单片机内存空间有明确的定义,
在这里插入图片描述
查看STM32F103C8T6可知,其Flash是分配在空间从0x0800 0000到0x0801FFFF,最大的空间为127KByte。所以在主闪存控制器启动模式下,STM32一上电,单片机先将0x0800 0000映射到代码区,然后从0x0800 0000开始执行程序。
在进入main函数前,单片机还做了以下处理(不需要自己编写代码,由单片机内部自动执行)
在这里插入图片描述
ortex-M3上电后来到复位中断(已将前4个字节的值存入MSP堆栈指针),转到__main标号,完成RW段的移动、ZI段的初始化,建立堆栈,初始化库函数,然后跳转到main函数,自此就开始执行我们编写的C程序。

4.引导程序和用户程序内存空间的划分
我们知道,单片机默认是从0x0800 0000开始执行的,其过程:
在这里插入图片描述
1.STM32 在复位后,先从 0X08000004 地址取出复位中断向量的地址,并跳
转到复位中断服务程序,如图标号①所示;
2.在复位中断服务程序执行完之后,会跳转到我们的main 函数,如图标号②所示;
3.而我们的 main 函数一般都是一个死循环,在 main 函数执行过程中,如果收到中断请求(发生重中断),此时 STM32 强制将 PC 指针指回中断向量表处,如图标号③所示;
4.然后,根据中断源进入相应的中断服务程序,如图标号④所示;
5.在执行完中断服务程序以后,程序再次返回 main 函数执行,如图标号⑤所示。

而我们将FLash的内存空间分为引导程序和用户程序,其0x0800 0000~0x0800 2000,8KByte的空间作为BootLoader,将0x0800 2000 ~0x0801 FFFF,共120KByte作为用户空间(STM32F103C8T6实际只有64KByte Flash,用户空间为56KByte)。
在这里插入图片描述
通过此种方式后,STM32执行程序的流程变为:
在这里插入图片描述

  1. STM32 复位后,还是从 0X08000004 地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到 IAP 的 main 函数,如图标号①所示。
  2. 此部分同图 47.1.1 一样;在执行完 IAP 以后(即将新的 APP 代码写入 STM32的 FLASH,灰底部分。
  3. 新程序的复位中断向量起始地址为 0X08000004+N+M),跳转至新写入程序的复位向量表,取出新程序的复位中断向量的地址,并跳转执行新程序的复位中断服务程序,随后跳转至新程序的 main 函数,如图标号②和③所示,
  4. 同样 main 函数为一个死循环,并且注意到此时 STM32 的 FLASH,在不同位置上,共有两个中断向量表。

5.引导程序的设计
(1)首先,实现串口中断函数,蓝牙通过串口将数据传输到单片机上,因为STM32F103C8T6的RAM只有8KByte,所以上位机每次发送的数据为1KByte,单片机烧写完后再发送下1KByte数据。

extern uint8_t usart_buf[1024+8];
//数据长度(2B)  数据(1KB)  序号(2B)  [CRC(4B)]
extern uint16_t buf_cnt;
extern uint8_t bootStatus;

void USART1_IRQHandler(void)
{
	uint8_t temp = 0;
	if( (USART_GetFlagStatus(USART1, USART_IT_RXNE) != RESET) )
	{
		temp = (uint8_t)USART_ReceiveData(USART1);
		if(++buf_cnt < (1024+8)  && ((buf_cnt & 0x8000) != 0x8000))
		{
			usart_buf[buf_cnt - 1] = temp;
		}
		else buf_cnt |= 0x8000;
	}
}

(2)在main函数中,对接收到的数据进行判断

if(flag)      //是否串口是否有接收到数据
{
	printf("开始更新固件r\n");	
	// 判断APP程序的起始地址是否为0X08XXXXXX
 	if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)
	{	 
		iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新	FLASHFLASH代码	
		printf("固件更新成功\r\n");		
	}
	else 
	{
		printf("非固件程序\r\n");
	}
	flag = 0;

(3)如果检测到APP程序,进入FLASH烧写函数

// 从addr起烧录程序

void Iap_Write(uint32_t addr)
{
	uint16_t temp = 0;
	uint16_t data_size = 0;    //烧录大小
	uint16_t data_len = 0;	   //数据长度
	uint16_t index = 0;         //数据块索引
	uint32_t addr_now = addr;	    //写入地址
	uint8_t data_write[1024] = {0};	//数据缓冲
	//准备烧录,数据大小为1K
	while(1)
	{
		while((buf_cnt & 0x8000) == 0);		//等待数据接收完毕
		//解析数据
		data_len = (uint16_t)usart_buf[1] << 8 | usart_buf[0];	//获取data有效长度
		for(temp = 2; temp < data_len + 2; temp++)	//从第二位开始拷贝数据
		{
			data_write[temp - 2] = usart_buf[temp];
		}
		index = usart_buf[1024 + 3] << 8 + usart_buf[1024 + 2];			//获取索引
		//开始写数据
		if(data_len < 1024)	//写入剩下的数据
		{
			if(data_len % 2 != 0)data_len += 1;
			STMFLASH_Write(addr_now, (uint16_t *)data_write, data_len / 2);		//
			data_size += 1;
			STMFLASH_Write(IAP_INFO, &data_len, 1);
			putString("OK\n");
			break;
		}
		else
		{
			STMFLASH_Write(addr_now, (uint16_t*)data_write, data_len / 2);
			data_size += 1;
			addr_now += 1024;	//下一个1K
			buf_cnt = 0;
			for(temp = 0; temp < USART_BUF_SIZE; temp++)usart_buf[temp] = 0;
			putString("Next\n");		
		}
	}		//烧录完成
	//清空串口缓存
	buf_cnt = 0;
	for(temp = 0; temp < USART_BUF_SIZE; temp++)usart_buf[temp] = 0;
}

(4)烧录好APP程序后,引导程序将PC指针地址指向APP程序的起始地址,即0x0800 2000;要对PC指针进行操作,需使用MSR汇编指令来操作。

//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr) 
{
    MSR MSP, r0 			//set Main Stack value
    BX r14
}

然后执行PC指针跳转函数

void Iap_load(uint32_t addr)
{
	if(((*(vu32*)addr) & 0x2FFE0000) == 0x20000000)		
	{
		jump = (iapfun) *(vu32*)(addr + 4);					//强制转化为函数
		MSR_MSP(*(vu32*)addr);
		jump();
	}
	else 
	{
		printf("Error\n");
		while(1);
	}
}

(5)最后,main函数的实现就很简单了,以轮询的方式读取串口数据,然后烧写FLASH,最后跳转至APP程序

while(1)
{
	while((readBootTime() != 0)  && (flag == 0))			//以轮询的方式读取串口
	{
		if(Iap_wait() == 8)
		{
			USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);	
			flag = 1;
		}
	}
	if(flag)
	{
		IAP_WRITE();
		flag = 0;
	}
	else 
		IAP_LOAD();       //跳转至APP程序
	}

6.用户程序APP的实现
用户程序实现比较简单,只需要对地址进行设计一下就可以,所以我就使用点亮LED来作为APP程序
在这里插入图片描述
图中 IROM1 的起始地址(Start)一般为 0X08000000,大小(Size)为 0X10000,
即从 0X08000000 开始的64K 空间为我们的程序存储(因为我们STM32F103C8T6 的 FLASH大小是 64K)。而图中,我们设置起始地址(Start)为 0X0800 2000,即偏移量为 0X2000字节),因而,留给 APP 用的 FLASH 空间(Size)只有0X8000(56K 字节)大小了。设置好 Start 和 Szie,就完成 APP 程序的起始地址设置。

(2) 设置APP程序的中断向量表的偏移量
在 systemInit 函数中的,设置中断向量表的偏移量

SCB->VTOR = FLASH_BASE | 0x2000;

以上设置完成之后,点击rebuild按钮重新编译,生成LED.hex
(3)生成APP程序bin文件
我们通过 MDK 自带的格式转换工具 fromelf.exe,来实现.axf 文件到.bin 文件的转换。该工具在 MDK 的安装目录\ARM\BIN40 文件夹里面
在这里插入图片描述
我们就可以在 MDK 编译成功之后,调用 fromelf.exe,根据当前工程的 LED.axf,生成一个 LED.bin 的文件。
7.APP程序的蓝牙在线升级
由于公司云端服务器还没搭好,我就先自己的电脑蓝牙与产品蓝牙连接,然后通过用QT写的串口调试助手发送至STM32中,完成APP程序的升级。
在这里插入图片描述
至此,基于蓝牙的STM32 IAP在线升级就完成了!

2019-03-05 09:45:24 YingRE_1 阅读数 2801
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4003 人正在学习 去看看 朱有鹏

今日分享单片机芯资讯之蓝牙寻物和室内定位升级到厘米级别。在新兴市场,蓝牙技术在智能楼宇、智能家居、智能工业以及智能城市领域,都会有非常多的应用,而该联盟新推出的寻向功能,在这4个新领域会有非常多的应用。

今年1月,蓝牙技术联盟正式发布了蓝牙5.1规范,在这个规范当中很重要的一个新特性就是“寻向功能”(direction finding),这一新功能可帮助设备明确蓝牙信号的方向,进而帮助开发解读设备方向的蓝牙接近(proximity)解决方案,实现厘米级位置精度的蓝牙定位系统。蓝牙的位置服务市场,在2022年的产品出货量将超过4亿个。寻向功能就是要强化蓝牙位置服务。

蓝牙的传统定位解决方案主要是地标信息解决方案,物品追踪解决方案。传统定位只能给出一个大致的方位,无法实现精确定位。

自从推出了低功耗蓝牙以后,其定位服务应用就出现在了很多场景当中,比如博物馆、商场、工厂、仓库等等,这些应用主要是通过RSSI,也就是信号强度检测的机制,通过三边测量,来实现室内定位和实时定位功能。蓝牙技术联盟在最新的核心规范中推出的寻向功能,将室内定位的服务进行了增强,不仅可以使用原有的RSSI方案,还可以将蓝牙寻向功能中的AoA和AoD,加入到现有的这些蓝牙定位系统当中,实现更加精确的定位。

新的蓝牙寻向功能和现有的通过RSSI的定位机制,可以相互融合。相互之间进行补偿,进行校准,使得定位精度有质的提升。
以上是单片机开发Enroo分享的单片机市场芯资讯之蓝牙寻物和室内定位升级到厘米级别。

2019-02-28 20:04:00 weixin_30858241 阅读数 51
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4003 人正在学习 去看看 朱有鹏

首先可能是你想实现的蓝牙小车效果(点击下面跳转B站)

蓝牙履带坦克

蓝牙坦克上位机系统升级

蓝牙四驱战车-战神前奏

蓝牙四驱战车-驱动程序调试

蓝牙四驱战车-野外

蓝牙四驱战车-舵机变更

关于51单片机基础

keil uVersion4的安装卸载+破解

51单片机和HC05蓝牙模块对接成功,但是数据收发时候发现数据很多时候对不上问题解决

51单片机的中断系统(一)

51单片机的中断系统(二)

51单片机的中断系统(三)

51单片机的中断系统(四)

51单片机的中断系统(五)

51单片机的中断系统(六)

晶振的抉择:12M和11.0592M的选择

51单片机的中断系统(七)通信的一些概念

89c52 EEPROM使用

51单片机,计时器0,11.0592M晶振,工作方式1,几个常用的定时器初始值

关于51单片机蓝牙电车驱动程序

L298N电机驱动

步进电机驱动

舵机驱动

蓝牙模块串口通信

PWM调速

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

//是否是前进
bit isFoward = 0;
//是否后退
bit isBack = 0;

//控制行驶电机
sbit EN_A = P0^0;
sbit IN_A1 = P0^1;
sbit IN_A2 = P0^2;
sbit IN_B1 = P0^3;
sbit IN_B2 = P0^4;
sbit EN_B = P0^5;

//是否行使总开关
bit ALL_EN = 0;
u8 speedNum = 10;


//步进电机转动
int harfMotoNum = 10;
int currentMotoNum = 15;
sbit r_pwm = P3^7;

void initFunc(){
	P0 = 0x00;
	//首先设置TMOD工作方式
	TMOD = 0x21;
	PCON = 0x00;
	SCON = 0x50;
	//计算初始值设定
	TH1 = 0xFD;
	TL1 = 0xFD;
	//打开
	TR1 = 1;
	//打开串口中断
	ES = 1;

	TH0=0XFF;	//给定时器赋初值,定时1ms
	TL0=0XA3;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器	

}

void checkRun(){
	if(isFoward){
	  	EN_A = ALL_EN;
		IN_A1 = 0;
		IN_A2 = 1;
	}  else if(isBack){
		EN_A = ALL_EN;
		IN_A1 = 1;
		IN_A2 = 0;
	}
	else{
		EN_A = ALL_EN;
		IN_A1 = 0;
		IN_A2 = 0;
	}
}

u8 motoDriveRecord = 0;
bit motoNeedRun = 0;

void main()
{	
	initFunc();
	while(1)
	{	
		checkRun();
	}		
}

u8 systemCount = 0;
u8 row = 0;
u8 colum = 0;
u8 judgeNum = 0;

bit leftOrRight = 0;  //旋转方向,0左,1右


void Timer0() interrupt 1
{
	TH0=0XFF;	//给定时器赋初值,定时1ms
	TL0=0XA3;

/*********************** 定时器控制PWM调速 **************************/
	/* 		(/0)(/1)(/2)(/3)   	(/19)
	(%0)	0	5 	10	15	...	95		
	(%1)	1	6	11	16 	...	96	
	(%2)	2	7	12	17 	...	97	
	(%3)	3	8	13	18 	...	98
	(%4)	4+	9+	14+	19+	...	99
	*/
	if(systemCount >= 1000)
	 	systemCount = 0;
	row = ((systemCount/10) % 5);//这时候取值是0,1,2
	colum = (systemCount/10) / 5;//取值为0-19;
	judgeNum = row * 20 + colum;
	if(judgeNum < speedNum){
		ALL_EN = 1;
	}else{
		ALL_EN = 0;
	}
/*********************** 舵机控制 **************************/
	if((systemCount%200) == 0){
		r_pwm = 1;
	}
	if((systemCount%200) >= currentMotoNum){
		r_pwm = 0;
	}
	systemCount++;
}

//中断事件
u8 receivedData;
u8 operation;
void Usart() interrupt 4
{
	if(RI == 1) {  //如果收到.  
     	//定义一个变量,接收数据
		receivedData = SBUF;
	
		if (receivedData == 101){
			//前进
			isFoward = 1;
			isBack = 0;
			ALL_EN = 1;
		}else if(receivedData == 102){
			//后退
			isFoward = 0;
			isBack = 1;
			ALL_EN = 1;
		}else if(receivedData == 103){
			//停止
			isFoward = 0;
			isBack = 0;
			ALL_EN = 0;
		}else if(receivedData == 104){
			//调整行驶速度
			operation = receivedData;
		}else if(receivedData == 105){
			//调整方向
			operation = receivedData;
		}else if(receivedData == 106){
			//校准方向
			currentMotoNum = harfMotoNum + 5;
		}else if(receivedData <= 100){
			if(operation == 104){
				if(receivedData >= 0 && receivedData <= 100){
					speedNum = receivedData;
				}
			}else if(operation == 105){
				if(receivedData >= 0 && receivedData <= harfMotoNum * 2){
					currentMotoNum = receivedData + 5;
				}
			}
		} 	
		RI = 0;
    }    
}

 

转载于:https://www.cnblogs.com/yangzigege/p/10452806.html

2018-04-23 10:12:15 weixin_41602920 阅读数 496
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4003 人正在学习 去看看 朱有鹏

CC2540有三个我自己认为的好处,

首先

第一个:成本低性价比高。做个要加蓝牙的小项目是绰绰有余。利用率能达到最大。

第二个 : 加强型C8051,有16IO口 ,8个12位ADC,自带温度传感器,蓝牙无线通讯,集成了很多的功能。

第三个:USB功能,和空中升级OTA功能。


我认为比较重要的这几点就在这里了。学习了它,关于蓝牙的项目,可以轻而易举的解决。比起初学者学习51单片机,我更加推荐这款单片机。不仅可以学习51最基础的东西,而且学习基础后还能再提升为蓝牙开发。一举两得。

有兴趣的加QQ1946019671,一起探讨,共同学习!!

2019-01-17 10:50:32 qq_30624591 阅读数 1302
  • 单片机控制第一个外设-LED灯-第1季第6部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第6个课程,主要讲解LED的工作原理和开发板原理图、实践编程等,通过学习目的是让大家学会给单片机编程控制LED灯,并且为进一步学习其他外设打好基础。

    4003 人正在学习 去看看 朱有鹏

芯片简介:AB1526P是一个先进的单片机解决方案,集成基带和无线电为密集的音频应用。蓝牙5.0双模认证,支持HFP1.7定义的宽带语音,AAC解码器,2-Mic,更好的降噪和回波消除性能。AB1526P嵌入了16Mb的串行flash,这对于客户端软件升级和第三方软件移植更加灵活。AB1526P通过优化的单片机结构、接口布置和较好的DSP算法,在Headse、Headphone等蓝牙音频应用中提供了较高的性能和水晶语音、音乐质量。AB1526P支持“AiroStereo”,即两个扬声器可以作为无线立体声系统相互连接,一个扬声器播放左侧通道,另一个扬声器播放右侧通道。AiroStereo通过无线连接为终端用户提供了极佳的立体声体验。AB1526P还支持“AiroShare”,它可以将音乐从一个音频设备无线传输到另一个设备,这样用户可以轻松地从同一个音频源共享音乐。

需要提供的硬件设备:EVK,是一种典型的蓝牙音频设备,它是为功能评估和调试而设计的

关于开发工具使用和说明

  1. 编译工程代码工具
    Keil uVision5,目录在D:\software\keil_airoha,DEMO代码工程在D:\caizd\洛达\AB152xP_AiroStereoHeadset_A_SDK_V28.2.0_exe_28.2.0目录。
    1.1安装说明

1.安装c251v557 后再将bin.zip下的.exe文件覆盖到安装目录下,例如F:\Keil_v5\C251\BIN目录下即可!!!!否则无法编译airoha SDK

2.关于破解注册码,C251比较特殊,一定要破解到提示Operation Expries:30 XX XXXX,否则是不能编译通过的,朋友们用keil uvision5注册机耐心try吧。

target: 选择C251
CID: 打开keil, file->licence->manager ,点击确定。copy computer ID

以下是我的注册机生成的几个注册码,可以挑一个喜欢的来注册一下:
65R8T-RNMCU-XFE0N-Y6QW2-TC5L2-2UJLR
RCHKP-M9M40-K08P6-DW2H8-KWDZI-D225N
KRV74-FGVN1-AZSCJ-UFI1P-Q66J2-XRQLY
NQY9U-SC6HR-4FRLI-TEH4S-K8DHV-D2F1K
3.上述2个步骤做完后重启系统,编译软件Airoha SDK包,会提示完美破解。

备注:本人安装时曾多次遇到破解不对行为。尤其是针对win7 64位以上的系统。建议安装时完全禁用有线,无线驱动.

1.2操作说明
1.2.1加载demo代码到工具:双击打开软件Keil uVision5,点击菜单栏Project --> Open Project…,选择你要打开的project工程XXXX.uvproj 文件,例如这里的文件是BTStereoHead
-set _AB1520C_AiroStereoHead-set.uvproj,然后就把demo代码加载到Keil uVision5工具了。
1.2.2根据自己的需要修改相对应模块的代码后,执行编译操作:点击菜单的编译按钮即可生成对应的编译文件。

1.2.3下载编译好的文件到单片机AB1526P:设备连接到PC机,点击Keil uVision5菜单的LOAD,即可把code下载到单片机的flash memory。

  1. 修改配置参数文件工具
    Airoha.AB152x_verC_ConfigTool
    目录在D:\software\Airoha.AB152x_verC_ConfigTool_20180226_28.3.34.19388_Verifying
    2.1安装说明:

双击Airoha.AB152x_verC_ConfigTool.exe,目录在D:\caizd\洛达\configtool\Airoha.AB152x
_verC_ConfigTool_20180226_28.3.34.19388_Verifying

2.2操作说明:
2.2.1如果无配置文件XXXX.airoflashZ:
首先连接单片机设备,双击打开软件:Airoha.AB152x_verC_ConfigTool,单击菜单Flash --> Read Flash,导出单片机的airoflashZ文件到工具Airoha.AB152x_verC_ConfigTool,然后修改参数,最后点击File --> Save File选择你要保存的路径即可。

2.2.2如果有配置文件XXXX.airoflashZ:
双击打开软件:Airoha.AB152x_verC_ConfigTool,点击File --> Openfile,找到相关的XXXX.airoflashZ文件,把它导入到工具里面即可进行修改相关参数。修改完之后再把airoflashZ文件写入flash,并且在菜单中点击flash-> write flash,然后把airoflashZ文件保存:点击File -->Save File。
具体各个参数的修改可参考文档:AB1520 Series Configure Tool User Guide Prev060.pdf

关于下载XXXX.airoflash文件到单片机设备的操作步骤:
micro USB接口download,充电5v,供电4.2v最大.
将配置文件airoflashZ写入flash步骤:
步骤1、连接到目标设备
-新的EVK内置USB接口
步骤2、加载.airoflash文件
步骤3、修改设置
步骤4、设备上电
步骤5、使能连接
-选择连接到设备的COM端口并启用它
步骤6、将airoflash文件写入flash

  1. Debug调试工具
    Airoha.LightDebugPrintSniffer,目录在
    D:\software\Airoha.LightDebugPrintSniffer_20161220_1.0.25.0;
    3.1安装说明:

参考文件说明:AAN-SW-AU-0116-AB152X- DEBUG BY LIGHTDEBUGPRINT TOOL .pdf,目录在D:\caizd\洛达\LightDebugPrintSniffer

3.2使用说明:
接下来就打开lightdebugprint通过USB连接EVK就可以进行Debug了。

  1. 关于pdf文档的说明
    打开文档的密码:2222837628
    连接下载固件相关说明(使用micro USB下载,其实是usb转串口):AD_AN_00_AB1520 Series_USB UART Download and Update User Gudie_0V0.pdf
    软件工具:Airoha.AB152x_verC_ConfigTool
    AB1520系列通常使用波特率115200和3000000来下载和更新固件。

在耳机工业设计中麦克风的处理说明:AD_AN_04_AB152x_Microphone Handling Guide_0V1.pdf

扬声器增益设置麦克风增益设置和AB152X FCD音频测试说明:AD_AN_04_AB152X_Audio Transparency Design Guide_0V0.pdf

微型BT耳机天线设计指南:AD_AN_04_AB15xx_Antenna Design Guide for Mini BT Headset_CH_0V0.pdf和AD_AN_04_AB15xx_Antenna Design Guide for Mini BT Headset_0V0.pdf

AB152X系列简介评估工具:EVK是一种典型的蓝牙音频设备,它是为功能评估和调试而设计的:AD_AN_02_AB152X_Introduction to AB152X series Evaluation Kit_0V6.pdf

MIC结构关于处理风噪声的建议:AD_AN_00_MIC structure of wind noise_0V1.pdf

Airoha BT芯片组布局原则(PCB layout):AD_AN_00_General_Airoha BT Chipset Layout Guideline_0V3.pdf

电池ADC校准:AD_AN_00_AB1520Series_Battery ADC Calibration for Mass Production_0V0.pdf

各种应用场景的开机顺序的设置:AD_AN_00_AB1520 Series_Power-On Sequence on Various Applications_0V4_20170522_2.pdf

AB1520系列双传声器和FCD试验:AD_AN_00_AB1520 Series_Dual Microphone Test with Fast Connection Dongle_0V0.pdf
需要硬件工具DUT(目前无):以Airoha AB152X系列EVK为DUT。和FCD:蓝牙快速连接适配器
需要PC软件工具(目前无):Airoha.AB1520 FamilyFastConnectDongleLoggerForHeadset

充电应用等设置:AD_AN_00_AB1520 Series_Charger Application Note _0V0.pdf
软件工具(目前无):Airoha AB152x verC Mass Production Tool - Version 24.0.1.16594批量生产工具

用于单个麦克风设备的声音调优:AD_AN_00_AB1520 Series_Acoustic Voice Tuning for a single Microphone Device_0V0.pdf
软件工具(目前有):Airoha.AB152x_verC_ConfigTool

充电和电池保护相关说明:AD_AN_00_ AB1520 Series_NTC Temperature Sensing for Charger and Battery Protection_ 0V3_20170607.pdf

空中升级的说明文档:AB1520 series air update user guide.pdf
软件工具(目前无):Airoha AB1122 verC Flash Writer -Version 2.3.29.11225
Airoha AB152x (verC) Confiquration Tool -Version 12105.12473

STM32的IAP固件升级

阅读数 231

没有更多推荐了,返回首页