Android Qcom USB Driver学习(十一)

news2024/11/19 13:26:01

该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零)
基于TI的Firmware Update固件升级的流程分析usb appliction layers的数据

USB Protocol Package

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

①/② map to check password correct

Package Format:
Byte[0] = Report Id
Byte[1] = Valid Length (0x21 = 33)
Byte[2] = BSL Core Commands(0x11 RX Password)
Byte[3] = Valid Data (0xFF)
 ...
Byte[Byte[1]+1] = Valid Data (0x00)
Byte[Byte[1]+2] = 0xAC
 ...
Byte[63] = 0xAC (Full Length = 64)

Interrupt Out:  Host Transfer(Client Receive)
(Interrupt IN): Client Transfer(Host Receive)

3F2111FF FFFFFFFF FFFFFFFF FFFFFFFF 
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 
FF0000AC ACACACAC ACACACAC ACACACAC 
ACACACAC ACACACAC ACACACAC ACACACAC

3F2111FF FFFFFFFF FFFFFFFF FFFFFFFF 
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 
FFFFFFAC ACACACAC ACACACAC ACACACAC 
ACACACAC ACACACAC ACACACAC ACACACAC

③ map to download bsl program(bootloader)

TI provide the bsl program named RAM_BSL_xxx.txt,拆包后每48个字节进行组包发送
在这里插入图片描述

Package Format:
Byte[0] = Report Id
Byte[1] = Valid Length(0x34 = 52)
Byte[2] = BSL Core Commands(0x1B RX Data Block Fast)
Byte[3] = RAM_ADDRESS(0x00)
Byte[4] = RAM_ADDRESS(0x25)
Byte[5] = RAM_ADDRESS(0x00)
Byte[6] = Valid Data (0x00)
...
Byte[Byte[1]+1] = Valid Data(0x85)
Byte[Byte[1]+2] = 0xAC
...
Byte[63] = 0xAC

3F341B00 25000008 0839B240 805A5C01 
32C23140 9033B013 982CFF3F 12010002 
00000008 47200002 09010000 00010600 
FF0901A1 0185ACAC ACACACAC ACACACAC
下一组写入数据的RAM地址为0x002500 + 48 = 0x002530(30 2500)
3F341B30 25003F95 3F750825 01150109 
01810285 3F953F75 08250115 01090191 
02C00902 29000101 00803209 04000002 
03000000 0921ACAC ACACACAC ACACACAC

④ map to load PC(usb reconnect)

⑤ map to send the BSL Version

⑥ map to write the firmware to flash

这里的firmware是指由固件编译后生成的.txt文件,数据格式如上,同样以48个字节拆分进行传输

3F341B00 80002A14 C80C4A48 5A0E3F40 
AEA10F5A 5E4F0200 3A502224 1B4A0600 
0B930420 8A430000 0C437D3C 5E0A3E50 
88235D4E 0600ACAC ACACACAC ACACACAC

⑦ map to Software BOR Reset

⑧ map to load PC(usb reconnect)

详情见User’s Guide MSP430™ Flash Devices Bootloader (BSL)

BSL Mode - Firmware Update

这里的流程图只是大概流程,具体流程还得用usb分析仪进行抓包分析,如上章所示的几个步骤可实现固件升级
flow chart

下面就不用看拉,写着完的,本想向直接再hal层写数据下去的,但每framework方便。

Demo C for process password

#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <ctype.h>

void printf_pkg(uint8_t* data){

	for(int i = 0; i < 4; i++){
		for(int j = 0; j < 16; j++){
			printf("%02X",*(data + (i*16+j)));
			if(j == 3 || j == 7 || j == 11)
				printf(" ");
		}
		printf("\n");
	}
	printf("\n");
}


//int转16进制
int DectoHex(int dec, unsigned char *hex, int length) 
{ 
	for(int i=length-1; i>=0; i--) 
	{ 
		hex[i] = (dec%256)&0xFF; 
		dec /= 256; 
	} 
	
	return 0; 
}

//1.读取文件中所有内容
//2.去除空字符和回车字符(头@2500 尾'q')
//3.组包(每两位数据转为int再转为16进制存储)
int main(){

	FILE* fd;
	int len = 0;
	int count = 0;
	int pkg_cnt = 0;
	int ram_address = 0;
	int hex_data = 0;
	uint8_t rdata[6];
	uint8_t ** pkg;
	uint8_t * data;

	fd = fopen("RAM_BSL_00.08.08.39.txt", "r+");
	if(fd == NULL)
		printf("failed to open\n");

	fseek(fd, 0, SEEK_END);
	len = ftell(fd);
	printf("the password file length = %d\n", len);
	fseek(fd, 0, SEEK_SET);

	fread(rdata, 1, 1, fd);
	fread(rdata, 5, 1, fd);
	rdata[5] = '\0';
	ram_address = atoi(rdata);
	sscanf(rdata, "%x", &ram_address);
	printf("ram_address start = %X\n", ram_address);
	len = len - 6;
	data = (uint8_t *)malloc(sizeof(uint8_t)*len);
	uint8_t * head = data;

	while(*rdata != 'q'){
		fread(rdata, 1, 1, fd);
		if(* rdata != ' ' && * rdata != '\n' && *rdata != 'q'){
			*data = *rdata;
			data ++;
		}
	}

	*data = '\0';
	data = head;
	fclose(fd);
	printf("%s\n", data);

	len = strlen(data);
	if(len % 48 == 0)
		pkg_cnt = len / (48 * 2);
	else
		pkg_cnt = len / (48 * 2) + 1;

	printf("the password file len = %d pkg count = %d the reset = %d\n", len, pkg_cnt, len % 48);

	pkg = (uint8_t **)malloc(sizeof(uint8_t*)* pkg_cnt);
	for(int i = 0; i < pkg_cnt; i++){
		*(pkg+i) = (uint8_t*)malloc(sizeof(uint8_t)*64);
		memset(*(pkg+i), 0xAC, 64);
	}

	int rest = 0;
	for(int i = 0; i < pkg_cnt; i++){
		*(*(pkg+i)+0) = 0x3F;
		*(*(pkg+i)+1) = 0x34;
		*(*(pkg+i)+2) = 0x1B;
		*(*(pkg+i)+3) = ram_address & 0xFF;
		*(*(pkg+i)+4) = (ram_address >> 8) & 0xFF;
		*(*(pkg+i)+5) = (ram_address >> 16) & 0xFF;

		if(i != pkg_cnt-1)
			rest = 48;
		else
			rest = (len % 48)/2;

		for(int j = 0; j < rest; j++){
			rdata[0] = data[count++];
			rdata[1] = data[count++];
			rdata[2] = '\0';
			sscanf(rdata, "%x", &hex_data);
			*(*(pkg + i) + 6 + j) = (uint8_t)hex_data;
		}

		ram_address += 48;
	}

	for(int i = 0; i < pkg_cnt; i++){
		printf_pkg(*(pkg+i));
	}
	return 0;
}

Demo Java for process password

Android Framwork基础之FileInputStream文件数据流处理
Android Framework 通过bulkTransfer(mUsbEndpoint_out, bytes, bytes.length, 1000)调用libusbhost.so(system/core/libusbhost)对节点
/dev/bus/usb/002/001进程操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玩转SpringCloud Alibaba,看阿里大佬的笔记是真香

大家都知道&#xff0c;SpringCloudAlibaba 风靡 Java 开发行业&#xff0c;各个公司都在用这套技术&#xff0c;所以咱们 Java 工程师不管是日常工作或是出去面试&#xff0c;都会用到或者被问到关于SpringCloudAlibaba的应用以及底层原理 所以说&#xff0c;小编下面带来一份…

用于视频编辑和渲染的最佳GPU是什么?

购买新的图形卡&#xff08;GPU&#xff09;可能很困难&#xff0c;尤其是如果涉及您所不熟悉的所有技术问题。 显卡市场上的大多数消费者只需要了解显卡在自己喜欢的游戏中的性能&#xff0c;并确定购买决定即可。但是&#xff0c;如果您想购买GPU进行视频编辑或3D渲染&#…

网络安全工程师考证指南

已经到2023年了&#xff0c;那么信息安全类证书最有前途的有哪些呢&#xff1f;今天和大家一起聊聊这个话题&#xff01; 1.CISP(国家登记的信息安全专业人员) 就CISP而言&#xff0c;安全实践者基本耳闻&#xff0c;算是国内权威认证&#xff0c;毕竟有政府背景为认证做背书&…

微服务环境搭建(spring cloud Alibaba)(一)

模块: 商品模块, 订单模块, 用户模块 一. 1. 技术选型以及准备工作 maven : 3.8.8版本 数据库: MySQL 8.0.32 持久层: springData , jpa 其他java环境 : SpringCloud Alibaba 技术栈 2. 模块 设计 springcloud- alibaba 父工程 shop - common 公共模块 [ 实体类 ] sh…

【技术】多端能力服务统一是一种关键的技术和架构

多端能力服务统一是一种关键的技术和服务架构&#xff0c;旨在为不同终端设备提供一致的用户体验和功能。通过采用前端和后端技术的组合&#xff0c;如响应式 Web 设计、PWA、跨平台移动应用开发框架、RESTful API、GraphQL、WebSocket、Serverless 架构和微服务架构&#xff0…

实现并测试协同滤波算法

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 本次实验实现了基于用户和基于项的协同滤波算法&#xff0c;并在 Movielens 两个较小的数据集上进行了测试&#xff0c;测试采用 RMSE 进行评估 一、问题简述 1.1 推荐系统问题 推荐系统问题旨在用户推荐相关项&#xff0c;项…

如何利用CiteSpace快速锁定领域内最新研究热点并制作精美的可视化专题图

在科研工作中&#xff0c;我们常常需要面对海量的文献进行阅读和分析&#xff0c;如何在这些文献当中找出值得精读、细读的关键文献&#xff0c;挖掘学科前沿&#xff0c;找到研究热点就成为了开展研究之前首先需要解决的问题。CiteSpace作为一款优秀的文献计量学软件&#xff…

六、数据仓库详细介绍(ETL)经验篇

0x00 前言 日常工作中大多数时候都是在做数据开发&#xff0c;ETL 无处不在。虽然最近两年主要做的大数据开发&#xff0c;但感觉日常干的这些还是 ETL 那点事儿&#xff0c;区别只是技术组件全换了、数据量大了很多。 前几年数仓势微&#xff0c;是因为传统的那些工具数据库等…

每个程序员必备的基础设施--Codeium

自从 chartGPT3 横空出世以后&#xff0c;AI 技术越来越深入到每个人的生活中&#xff0c;这里不谈 AI 到底是不是真的存在着类人的思想和智慧&#xff0c;也不谈是否取代人类的问题。本着实用主义的原则&#xff0c;先让它能为我所用。 我在工作中已经深入使用了 chartGPT 和…

【详解栈Stack与队列Queue】

&#x1f320;作者&#xff1a;TheMythWS. &#x1f386;专栏&#xff1a;《集合与数据结构》 &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 目录 栈 ( Stack ) 栈的概念 栈的使用 栈的模拟实现 栈…

idea的这款代码提示插件爱了

前言 Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款…

Fourier分析入门——第7章——采样理论

目录 第 7 章 采样定理 7.1 引言 7.2 采样定理 7.3 错误识别(aliasing) 7.4 Parseval定理(Parseval[pzeifa:l]) 7.5 截断Fourier级数和回归理论(Truncated Fourier Series & Regression Theory) 第 7 章 采样定理 7.1 引言 在第 6 章中&#xff0c;我们发现有限区…

测试还是测开为你做个分析,让你少走弯路

软件测试和测试开发都是软件开发声明周期中非常重要的环节&#xff0c;缺一不可。当然了这两者还有区别的&#xff0c;比如果薪资待遇&#xff0c;开发要比测试待遇好&#xff0c;但测试里面功能测试和性能测试待遇又不同&#xff0c;掌握的技术不同、工龄都会有影响。 平均工…

一般小型企业,一个CRM系统要多少钱?都有哪些功能?

客户关系管理crm多少钱一套&#xff1f; 不同CRM要价不同&#xff0c;甚至同一款CRM产品在不同客户方部署下来的价格也是有差别的。 这篇给大家分享几款可实操的CRM管理软件的价位&#xff0c;有需要的可以做以参考&#xff01; 一、简道云CRM管理系统 模版地址&#xff1a;…

中国智造数据分析,预计2025年中国智能制造市场规模将达5.3万亿元

中国智造是制造强国建设主攻方向&#xff0c;也是中国制造公司可以提升核心竞争力的主要研究路径。智能制造成熟度水平能很好的衡量一个地区智能制造的发展水平。 分析全国成熟度二级及以上的企业数量分布&#xff0c;从图分析可以很直观的看出成熟度二级以上的企业数量主要分…

每日一题——三数之和(双指针)

每日一题 三数之和 题目链接 思路 解析函数原型 首先我们来看一下题目给的函数原型&#xff1a; int** threeSum(int* nums, int numsSize, int* returnSize, int**returnColumnSizes)题目要求我们返回一个二维数组&#xff0c;数组的行数代表着存在多少个满足条件的三元组&…

“向上管理”的7个最佳实践:如何管理你的老板?

向上管理是一种管理技巧&#xff0c;它指的是如何有效地管理你的老板。这种技巧可以帮助你更好地与老板沟通&#xff0c;提高工作效率&#xff0c;增加工作成就感。本文将介绍七个最佳实践&#xff0c;帮助你学会如何向上管理。 1. 了解老板的需求和期望 了解老板的需求和期望…

R语言结构方程模型(SEM)在生态学领域中的实践应用

结构方程模型&#xff08;Sructural Equation Model&#xff09;是一种建立、估计和检验研究系统中多变量间因果关系的模型方法&#xff0c;它可以替代多元回归、因子分析、协方差分析等方法&#xff0c;利用图形化模型方式清晰展示研究系统中变量间的因果网络关系&#xff0c;…

Velocity不用愁!Velocity系统的前端工程化之路 | 京东云技术团队

Velocity是一个基于Java的Web页面模版引擎。十多年前&#xff0c;Velocity将Java代码从Web页面中分离出来&#xff0c;使得开发者能够并行网页开发和Java开发。随着十年前后端分离的浪潮涌动&#xff0c;回首再面对这些基于Velocity的旧系统&#xff0c;无论是后端还是前端人员…

了解信号的传输方式、编码与调制、信道的极限容量

1.了解信号的传输方式、编码与调制、信道的极限容量 笔记来源&#xff1a; 湖科大教书匠&#xff1a;传输方式 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 1.1 了解信号的传输方式 串行传输与并行传输 同步传输与异步传输 为什么需要收发双发…