这是若干年前一个项目,最近有时间整理一下。回忆起来,印象最深刻的就是重度使用示波器辅助分析,进行优化。

项目背景是在原有项目3G+项目基础上,增加一颗2G+ Modem,使支持DSDA功能。

在介绍DSDA之前,稍微区分一下DSDS和DSDA:

DSDS,即Dual SIM Dual Standby,双卡双待,但是属于单通。一个SIM处于工作状态,另一张是无法正常工作的,两张SIM分享时隙。

DSDA,即Dual SIM Dual Active,双卡双通。即使一张卡处于工作状态,另一张卡仍然可以正常工作。只不过由于一般手机不会存在两套通话系统,所以通话仍然是一张。但是一张通话,另一张数据业务是不受影响的。

本质上来说,DSDS是一套硬件,划分时隙模拟两套Modem;DSDA是实际存在的两套Modem。

架构分析

Modem A提供语音和数据业务;Modem B仅提供语音业务。

Mode A基于USB 2.0协议变种,使用适合芯片间互联协议HSIC方式连接

基于USB通讯设备类(CDC)子协议的ACM和NCM,ACM主要用于处理控制信息,如AT Command;NCM主要用于处理数据业务。在ACM tty设备基础上,基于3GPP MUX协议gsmtty,虚拟出/dev/gsmtty0~63供各种服务使用。

Modem B采用UART+SPI接口的方式连接。Modem的bootloader仅支持两种连接方式,USB或者UART,但是由于AP的限制,无法提供USB接口,所以只能采用UART启动。

但是由于UART速率问题,严重影响Firmware的下载速度。所以添加SPI接口,以加速进程,并在后续通信中使用SPI接口。

下面是Kernel和Hardware关系特写:

案例分析

在介绍了背景之后,着重介绍使用示波器和Firmware下载log进行优化的过程。

初始状态时Modem A下载大概3s,而Modem B只使用UART需要10m左右。

在进行分析之前,了解一下整个Modem B下载流程:使用UART接口下载PSI+EBL;基于SPI接口下载FW+NVM。由于PSI只能以115200速度下载,所以将整个下载流程分为三个阶段:UART-PSI、UART-EBL、SPI

搞明白整个下载流程组成及其特点,使用下载log查看优化结果,使用示波器分析传输细节,快速迭代(每次开机都会下载),下面是分析流程:

UART 115200+SPI 5M with confirm packet

这种情况整个流程耗费时间为:49.41=5.66+7.93+35.82。

多亏高阶示波器,支持四通道,高分辨率,抓取更长时间波形。可以看到开始下载的总体波形,还可以截取一段详细分析每一帧的周期。

不但可以从宏观上优化整个下载流程,还可以进入每一帧细节找到问题点。

用示波器分析发现SPI下载在4-5之间浪费了不少时间。check代码发现这时下载流程存在一个confirm packet,这是为了确保下载完整性的措施。但是在这时候可以适当忽略。

UART 921600+SPI 5M without confirm packet

在将UART速率提高到921600,并且忽略confirm packet之后,耗费时间变成:35.87=5.23+7.27+23.37

将忽略confirm packet的波形和未忽略对比可以发现,每一帧节省了11.33-7.198=4.132ms。进SPI下载就节省了12.45=35.82-23.37秒。

由上图可知1~2之间的等待时间过长,需要优化。

优化SRDY延时

在对SRDY进行优化后,发觉1~2缩短了接近2ms。

修复EBL速率bug

计算后发现EBL使用115200和921600并没有明显提升,原来是EBL的一个bug。并没有时间按照设置进行配置UART。在修改了EBL速率配置问题后,得到了明显提升。

对比下面两次下载,发现EBL下载明显得到改善:5.99(s)=7.32-1.33。

优化psi大小

由于psi速率最慢,因此去掉不必要模块,优化代码空间尤其重要。优化了5.4-3.74=1.66(s)。

SPI 12.5MHz

在使用了SPI 12.5MHz速率之后,SPI下载部分节省了7.34(s),致使整个下载流程下降到13.5s。这已经大概在接受范围之内了。

SPI 25MHz

再将SPI速度提高极限之后,整个下载流程下降到11.3s。

使能I/D-Cache功能

在将之前措施(修复EBL 921600速率、裁剪PSI、极速SPI 25MHz、I/D-Cache)都使用之后,整个下载流程达到9.6s。

这个结果已经基本能满足使用需求了。

重度使用示波器进行优化分析——一个DSDA项目回顾的更多相关文章

  1. 重度使用示波器进行优化分析——一个DSDA项目回顾

    这是若干年前一个项目,最近有时间整理一下.回忆起来,印象最深刻的就是重度使用示波器辅助分析,进行优化. 项目背景是在原有项目3G+项目基础上,增加一颗2G+ Modem,使支持DSDA功能. 在介绍D ...

  2. 分析一个react项目

    目录结构 下面是使用npx create-react-app web-app来创建的一个项目(已经删除了多余的文件) web-app ├── node_modules │   ├── ....... ...

  3. VS编译器优化诱发一个的Bug

    VS编译器优化诱发一个的Bug Bug的背景 我正在把某个C++下的驱动程序移植到C下,前几天发生了一个比较诡异的问题. 驱动程序有一个bug,但是这个bug只能 Win32 Release 版本下的 ...

  4. Mysql 索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  5. mySql索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  6. 一次 group by + order by 性能优化分析

    一次 group by + order by 性能优化分析 最近通过一个日志表做排行的时候发现特别卡,最后问题得到了解决,梳理一些索引和MySQL执行过程的经验,但是最后还是有5个谜题没解开,希望大家 ...

  7. 基于Linux C的socketEthereal程序和Package分析 (一个)

     执行测试平台:CentOS 6.5发行版,内核版本号3.11 1. Linux抓包源程序 在OSI七层模型中.网卡工作在物理层和数据链路层的MAC子层. 进行网络通信时.源主机通过socket( ...

  8. vacuumdb - 收集垃圾并且分析一个PostgreSQL 数据库

    SYNOPSIS vacuumdb [ connection-option...] [ --full | -f ] [ --verbose | -v ] [ --analyze | -z ] [ -- ...

  9. 【MySQL 高级】索引优化分析

    MySQL高级 索引优化分析 SQL 的效率问题 出现性能下降,SQL 执行慢,执行时间长,等待时间长等情况,可能的原因有: 查询语句写的不好 索引失效 单值索引:在 user 表中给 name 属性 ...

随机推荐

  1. JavaScript实现图片轮播组件

    效果: 自动循环播放图片,下方有按钮可以切换到对应图片. 添加一个动画来实现图片切换. 鼠标停在图片上时,轮播停止,出现左右两个箭头,点击可以切换图片. 鼠标移开图片区域时,从当前位置继续轮播. 提供 ...

  2. LinqToDB 源码分析——轻谈Linq查询

    LinqToDB框架最大的优势应该是实现了对Linq的支持.如果少了这一个功能相信他在使用上的快感会少了一个层次.本来笔者想要直接讲解LinqToDB框架是如何实现对Linq的支持.写到一半的时候却发 ...

  3. php内核分析(四)-do_cli

    这里阅读的php版本为PHP-7.1.0 RC3,阅读代码的平台为linux # main 把剩下的代码增加了下注释全部贴出来了(这个是简化后的main函数,去掉了一些无关紧要的代码段): int m ...

  4. Basic Tutorials of Redis(6) - List

    Redis's List is different from C#'s List,but similar with C#'s LinkedList.Sometimes I confuse with t ...

  5. IBatisNet -- 保护你的配置文件及映射文件信息

    通常情况下我们在使用IBatisNet的时候,配置文件和映射文件都是暴露在外的,如果能进入到服务器,那么你的程序的操作数据库的SQL语句,数据库连接字符串等信息都将很轻松的被看到,这样是很危险的.然而 ...

  6. HTML5新增及移除的元素

    HTML经过10多年的发展,其元素经历了废弃与不断重新定义的过程.为了更好的处理现在的互联网应用,HTML5新增了图形绘制.多媒体播放.页面结构.应用程序存储.网络工作等新元素.http://hove ...

  7. mybatis笔记3 一些原理的理解

    1,mybatis流程跟踪,原理理解 基本思路: 从SqlSessionFactory的初始化出发,观察资源的准备和环境的准备,以及实现持久层的一些过程: 进入SqlSessionFactoryBea ...

  8. springmvc的数据校验

       springmvc的数据校验 在Web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对数据进行验证,输入验证分为客户端验证与服务器端验证. 客户端验证主要通过javaScript脚本 ...

  9. JavaScript基本数据类型和引用数据类型

    ECMAScript包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值那些可能有多个值构成的对象. 在进行变量赋值时,解析器必须确定这个值是基本类型值还是引用 ...

  10. android Canvas 和 Paint用法

    自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...