Android Qcom USB Driver学习(十一)

news/2023/12/6 0:23:30

该系列文章总目录链接与各部分简介: 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 ACACACAC3F2111FF 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] = 0xAC3F341B00 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);elsepkg_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;elserest = (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.ppmy.cn/news/75314.html

相关文章

阿里三面过了,却无理由挂了,HR反问一句话:为什么不考虑阿里?

进入互联网大厂一般都是“过五关斩六将”&#xff0c;难度堪比西天取经&#xff0c;但当你真正面对这些大厂的面试时&#xff0c;有时候又会被其中的神操作弄的很是蒙圈。 近日&#xff0c;某位测试员发帖称&#xff0c;自己去阿里面试&#xff0c;三面都过了&#xff0c;却被…

IEEE独立出版 | 第七届计算机科学与智能控制国际会议(ISCSIC 2023)

会议简介 Brief Introduction 第七届计算机科学与智能控制国际会议(ISCSIC 2023) 会议时间&#xff1a;2023年10月27日-29日 召开地点&#xff1a;中国南京 大会官网&#xff1a; ISCSIC 2023-2023 7th International Symposium on Computer Science and Intelligent Control(I…

20230520查找中国移动的APP在RK3566下调用UVC摄像头出错

20230520查找中国移动的APP在RK3566下调用UVC摄像头出错 2023/5/20 23:34 SDK&#xff1a;Android12RK3566平台 android12 UVC camera 没插摄像头&#xff0c;但是/dev/video0-13标号被占用&#xff0c;是啥原因导致的 板子上也没有摄像头 【板子没有接CSI/MIPI接口的I2C通道…

如何快速搭建springboot项目

在IntelliJ IDEA中&#xff0c;可以按照以下步骤快速创建一个Spring Boot项目&#xff1a; 1. 打开 IntelliJ IDEA&#xff0c;点击欢迎界面上的"Create New Project"或者从菜单栏选择"File" -> "New" -> "Project"。 2. 在创…

C++ CS留学生期末答疑2

#include <iostream>using namespace std;int main() {int i 0;while (i < 10) {if (i % 2 0) {continue;}printf("%d", i);i i 1;}return 0; }#include <iostream>这是一个预处理指令&#xff0c;用于包含输入输出流库&#xff0c;使我们可以使用…

shell——免交互

一、Here Document 免交互 概述 常用的交互程序&#xff1a;read&#xff0c;ftp&#xff0c;passwd&#xff0c;su&#xff0c;sudo。 cat也可配合免交互的方式重定向输出到文件。 作用&#xff1a; 使用I/O重定向的方式将命令列表提供给交互式程序&#xff1b;标准输入的…

Java的CAS操作

介绍 CAS 技术是为了解决问题而生的&#xff0c;通过 CAS 我们可以以无锁的方式&#xff0c;保证对共享数据进行 “读取 - 修改 - 写回” 操作序列的正确性。 CAS 是乐观锁设计思想的实现。CAS 的思想是&#xff1a;在“读取 - 修改 - 写回”操作序列中&#xff0c;先读取并修…

章节2 Matplotlib 绘图基础

目录 课时 2 Matplotlib简介及绘制简单线型图 课时 3 图例和标题 课时 4 自定义图形样式 课时 4 绘制条形图 课时 2 Matplotlib简介及绘制简单线型图 线的画法 plt.plot&#xff0c;同时提供x轴坐标和y轴坐标 课时 3 图例和标题 x 轴数据默认即可&#xff0c;如下所示 x轴代…

plsql为什么连不上远程或本地的Oracle,需要做哪些准备?

文件配置解说 tnsnames.ora文件 文件所在地址&#xff1a;ORACLE_HOME\network\admin ORACLE_HOME&#xff1a;Oracle数据库或者客户端软件所在的地址 但是我的在Oracle数据库的目录下&#xff0c;而不是Oracle客户端软件&#xff08;instantclient_11_2&#xff09;下 里…

论文阅读-17-Deep Long-Tailed Learning: A Survey---3.2 Information Augmentation

文章目录 1. Transfer Learning1.1 Head-to-tail knowledge transfer(1) FTL①##### ②##### ③ (2) LEAP(3) OFA(4) RSG(5) M2m(6) GIST(7) MetaModelNet 1.2 Model pre-training(1) DSTL(2) SSP(3) Conceptual 12M 1.3 Knowledge distillation(1) LST(2) LFME(3) RIDE(4) SSD…

STM32F407+LWIP+DP83848以太网驱动移植

最近有个项目上需要用到网络功能&#xff0c;于是开始移植网络相关代码。在移植的过程中感觉好难&#xff0c;网上找各种资料都没有和自己项目符合的&#xff0c;移植废了废了好的大劲。不过现在回头看看&#xff0c;其实移植很简单&#xff0c;主要是当时刚开始接触网络&#…

CMD与DOS脚本编程【第五章】

预计更新 第一章. 简介和基础命令 1.1 介绍cmd/dos脚本语言的概念和基本语法 1.2 讲解常用的基础命令和参数&#xff0c;如echo、dir、cd等 第二章. 变量和运算符 2.1 讲解变量和常量的定义和使用方法 2.2 介绍不同类型的运算符和运算规则 第三章. 控制流程和条件语句 3.1 介…

SVG.js动画——timeline方法与内置控制器

Easing 可以使用runner的ease&#xff08;&#xff09;方法更改动画的缓和程度。 所有可用的ease类型包括&#xff1a; <>: ease in and out : ease out <: ease in-: lineara functionbeziere(x1, y1, x2, y2) // 贝塞尔曲线step(steps, stepPosition) beziere&am…

组件123456789

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

05 Android开机启动之SystemServer

Android开机启动之SystemServer(SS) 一、梳理SystemServer启动流程 从上面整个Android开机启动思维导图(android 5.0的启动组成图)中可以看到: SystemServer是从Zygote中启动的。 开机->bootloader->kernel->init->zygote->SystemServer 二、SystemServe…

Java阶段三Day04

Java阶段三Day04 文章目录 Java阶段三Day04Vue框架Vue框架概述如何引入vue.jsVue框架的HelloWorldVue框架执行原理 基本指令文本相关指令属性绑定和双向绑定事件绑定v-for循环遍历指令显示隐藏相关指令 Vue框架 Vue框架概述 Vue是一种流行的渐进式JavaScript框架&#xff0c;…

彻底理解粘性定位 - position: sticky(IT枫斗者)

彻底理解粘性定位 - position: sticky 介绍 粘性定位可以被认为是相对定位(position: relative)和固定定位(position: fixed)的混合。元素在跨越特定阈值前为相对定位&#xff0c;之后为固定定位。例如: .sticky-header { position: sticky; top: 10px; }在 视口滚动到元素…

springboot使用Mybatis-plus分页插件

1. 引入依赖 在 pom.xml 文件中添加 MyBatis Plus 和分页插件的依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>{mybatis-plus-version}</version> &…

拿两个字母就能注册商标了吗?

我们来关注一些常见的又让人有点捂脸的现象。比如说&#xff0c;用几个字母或者一个单词注册商标。 黄小明我在办案中就遇到了一个这样的问题。该公司的注册商标被人使用在了一模一样的商品上&#xff0c;然后损失很大&#xff0c;然后该公司就报了警&#xff0c;警察就去把卖假…

Unity UI -- (5)增加基础按钮功能

分析分析一些常见UI 良好的UI设计会清晰地和用户沟通。用户知道他们能和屏幕上哪些东西交互&#xff0c;哪些不能。如果他们进行了交互&#xff0c;他们也要清楚地知道交互是否成功。换句话说&#xff0c;UI要提供给用户很多反馈。 我们可以来看看在Unity里或者在计算机上的任何…
最新文章