zoukankan      html  css  js  c++  java
  • 重度使用示波器进行优化分析——一个DSDA项目回顾

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

    项目背景是在原有项目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接口。

    image

    下面是Kernel和Hardware关系特写:

    image

    案例分析

    在介绍了背景之后,着重介绍使用示波器和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。

    image

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

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

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

    image

    image

    UART 921600+SPI 5M without confirm packet

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

    image

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

    image

    image

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

    优化SRDY延时

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

    image

    image

    修复EBL速率bug

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

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

    image

    image

    优化psi大小

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

    image

    SPI 12.5MHz

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

    image

    SPI 25MHz

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

    image

    使能I/D-Cache功能

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

    image

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

  • 相关阅读:
    oracle11g2下载安装笔记
    eclipse的下载安装配置
    实现图片的缩放 添加鼠标滑轮事件
    MySQL5.7.21非图形化下载、安装、连接问题记录
    python学习登录接口
    python学习计算器
    python学习简单购物商城的实现
    python学习三级菜单
    ios学习之UISwipeGestureRecognizer手势识别
    ”isEqual“ ”isEqalToString“ 和“==”三者区别
  • 原文地址:https://www.cnblogs.com/arnoldlu/p/6231391.html
Copyright © 2011-2022 走看看