Android Qcom USB Driver学习(十一)

news/2024/11/4 13:53:02/

该系列文章总目录链接与各部分简介: 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轴代…