mt6577驱动开发 笔记版 转载请注明出处---crosskernel@gmail.com

高通平台&MTK平台驱动开发流程 高通(Qualcomm)是全球领先的无线通信技术解决方案提供商,尤其在移动通信领域有深远的影响。高通的Snapdragon系列处理器广泛应用于智能手机、平板电脑、智能手表等多种设备中。Snapdragon处理器以其优异的性能、高效的能耗比以及强大的图形和视频处理能力而著称。高通平台还包括高通的无线调制解调器、Wi-Fi芯片组以及其他通信相关的硬件产品。联发科技(MediaTek)是另一家全球知名的芯片设计公司,总部位于台湾。 阅读详情




3 Preloader & Uboot

3.1 Preloader




3.1.1Preloader结构
Preloader的主题结构在文件:“alps\mediatek\platform\mt6577\preloader\src\core\main.c”中。


void main(void)
{
//时钟、uart、mcp等初始化
bldr_pre_process();
…
bldr_handshake(&handler);
…
//这里加载DSP 3G AP的ROM。
…
#if CFG_LOAD_UBOOT
addr = CFG_UBOOT_MEMADDR;
//加载uboot
    if (bldr_load_part(PART_UBOOT, bootdev, &addr) != 0)
        goto error;
#endif


…
//跳转到uboot
bldr_jump(addr, BOOT_ARGUMENT_ADDR, sizeof(boot_arg_t));
…
}


3.1.2 PLL与Clock
PLL介绍在datasheet 1190
Pll.c中“void mt6577_pll_init(void)”
似乎PLL主要是在preloader里打开的。




//设置的PLL
void mt6577_pll_init(void)
{


}


//根据MCP的型号设置DDR相关时钟
int mt6577_pll_init2 (void)
{
if (mt6577_get_dram_type() == 2)
    {
       …
    }
    else if (mt6577_get_dram_type() == 3)
{
…
    }
}




3.1.3 DDR的初始化


EMI_SETTINGS emi_settings[]里面定义了KMNJS000ZM_B205 H9TP32A4GDMCPR KMSJS000KM_B308等类型的MCP的配置参数。


在“void mt6577_set_emi (void)”里面会根据“emi_settings[]”的配置初始化MCP控制器。




3.1.4 镜像布局与加载


镜像布局参数被存放在文件:
mediatek/custom/out/mt6577preloader/cust_part.c里
static part_t platform_parts[PART_MAX_COUNT];里面记录每个镜像的长度。






在mediatek/platform/mt6577/preloader/src/core/part.c里
函数int part_init(void)里,依次累加前面所有镜像,算出当前镜像的起始位置。


3.1.5 EMMC 驱动


#define MMC_HOST_ID  0


u32 mmc_init_device(void)
{…
//emmc 零通道
ret = mmc_init(MMC_HOST_ID);
…
}


//分别初始化host和card
int mmc_init(int id)
{   
    …


    host = &sd_host[id];
    card = &sd_card[id];
    err = mmc_init_host(host, id);
    if (err == MMC_ERR_NONE)
        err = mmc_init_card(host, card);
…
}


//host初始化
int mmc_init_host(struct mmc_host *host, int id)
{
    memset(host, 0, sizeof(struct mmc_host));


    return msdc_init(host, id);
}


/*
#define MSDC0_BASE          (IO_PHYS + 0x01220000)
#define MSDC1_BASE          (IO_PHYS + 0x01230000)
#define MSDC2_BASE          (IO_PHYS + 0x01250000)
#define MSDC3_BASE          (IO_PHYS + 0x01240000)


#define IO_PHYS             0xC0000000


对于通道0,基地址在MSDC0_BASE即为0xC1220000。其余通道基地址在0xC1230000 0xC1240000  0xC1250000,但是datasheet里只有0通道0xC1220000的信息。


*/




int msdc_init(struct mmc_host *host, int id)
{
u32 baddr[] = {MSDC0_BASE, MSDC1_BASE, MSDC2_BASE, MSDC3_BASE};
//基地址选择0通道
    u32 base = baddr[id];


    //0通道
host->id     = id;
//基地址
    host->base   = base;
host->f_max  = MSDC_MAX_SCLK;
…
//以下所有对0通道的寄存器操作都是基于这基地址“base”进行的


}


3.3 uboot
Uboot代码:


Generic部分:
Uboot的generic的部分位于“bootable/bootloader/uboot/”


Mt6577相关部分相关位于:
mediatek/platform/mt6577/uboot/
mediatek/custom/out/mt6577/uboot/






uboot的config:
“alps\mediatek\custom\out\mt6577\uboot\inc\configs\ubconfigs.h”
3.3.1 uboot初始化流程
Uboot初始化主体位于“bootable/bootloader/uboot/arch/arm/lib/board.c”


void start_armboot (void)
{
…
//执行初始化例程数组
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) 
{
if ((*init_fnc_ptr)() != 0) {
hang ();
}
}
…
//执行平台相关misc初始化
#if defined(CONFIG_MISC_INIT_R)
/* miscellaneous platform dependent initialisations */
misc_init_r ();
#endif


}


在“bootable/bootloader/uboot/arch/arm/lib/board.c”定义了初始化例程指针数组,其中的各项例程不同的板卡有自己不同的实现:


init_fnc_t *init_sequence[] = {
cpu_init, /* basic cpu dependent setup */
dram_init,              /* configure available RAM banks */ /*  change the original init order */
board_init, /* basic board dependent setup */
interrupt_init, /* set up exceptions */
env_init, /* initialize environment */
init_baudrate, /* initialze baudrate settings */
serial_init, /* serial communications setup */
console_init_f, /* stage 1 init of console */
display_banner, /* say that we are here */
    …
display_dram_config,
NULL,
};






Mt6577的初始化例程的实现位于“mediatek/platform/mt6577/uboot/mt6577_board.c”:


int board_init (void)
{…
mtk_serial_init();
…
mt6577_pinmux_init();s
…
pmic6329_init();




}




3.3.2 镜像布局与分区


Uboot在“int misc_init_r (…)”里对镜像分区初始化




int misc_init_r (void)
{…
mt6577_part_init(BLK_NUM(16 * GB));
…
}


/**********************************************************************/


在“mediatek/custom/out/mt6577/uboot/partition.h”里对分区表定义如下:


#include <common.h>
/*该文件可能就是:
“mediatek/custom/out/mt6577/uboot/inc/mt65xx_partition.h”
*/
#include "mt65xx_partition.h"


part_t partition_layout[] = {
{PART_PRELOADER, PART_BLKS_PRELOADER, PART_FLAG_NONE,0},
{PART_DSP_DL, PART_BLKS_DSP_DL, 0, PART_FLAG_NONE},
…
};




3.3.3 gpio初始化
DCT工具产生的“cust_gpio_b
UFS设备驱动开发避坑指南:正确处理scsi_done回调与中断上下文 本文深入探讨UFS设备驱动开发中正确处理scsi_done回调与中断上下文的关键技术。通过分析UFS中断处理机制和读写请求流程,揭示在中断上下文中执行scsi_done回调时的常见陷阱,包括睡眠操作、锁使用误区和耗时操作风险,并提供实战解决方案和调试技巧,帮助开发者提升驱动稳定性和性能。 阅读详情

相关推荐

UFS host controller驱动开发避坑指南:Linux 5.10内核下的寄存器操作实录

本文深入解析Linux 5.10内核下UFS Host Controller驱动开发的关键技术,重点介绍AHB接口初始化、TR/TMR门铃寄存器触发机制及中断聚合单元配置等核心环节。通过代码片段和逻辑分析仪数据,揭示ARM64平台上UFS HCI寄存器操作的常见问题与解决方案,帮助开发者规避典型陷阱。

y7z8a9的博客 1084

实战UFS驱动开发:手把手教你实现SCSI命令到UPIU的转换(基于Qcom平台)

本文详细解析了在Qualcomm平台上实现SCSI命令到UFS协议单元(UPIU)转换的完整流程。通过搭建实验环境、深入分析SCSI命令处理流程,以及实战UPIU构造与传输,帮助开发者掌握UFS驱动开发的核心技术。文章还提供了调试技巧与异常处理方法,特别适合嵌入式存储子系统开发者学习参考。

weixin_30335575的博客 77

UFS总体介绍及FPGA开发

通过实现UFS的主控制器、设备控制器等组件,我们可以在FPGA上进行UFS开发,并实现高速数据传输和低功耗特性的存储解决方案。物理层负责传输物理信号,数据链路层提供数据包的传输和错误检测功能,传输层处理数据包的分段、重组和重传,逻辑层管理设备和主控制器之间的命令和数据传输,文件系统层负责文件管理和数据存储。在本文中,我们将介绍UFS的总体架构和特性,并探讨如何在FPGA上进行UFS开发。这些组件的实现涉及到UFS协议的具体细节和硬件平台的特性,因此需要参考UFS协议规范和FPGA开发平台的相关文档。

PodProgram的博客 2138

深入理解UFS 2.1技术标准及其实现

JEDEC固态技术协会是一个全球性的行业联盟,致力于推动半导体设备和电子系统的标准化,为电子技术的进步做出巨大贡献。在存储领域,JEDEC负责制定多个关键的技术标准,其中Universal Flash Storage(UFS)是由JEDEC标准化的先进非易失性存储标准,为移动设备和嵌入式系统提供了高性能、低功耗的存储解决方案。统一闪存规范主机控制器接口(UFSHCI)是连接主机处理器与UFS存储设备的桥梁,它允许处理器执行对存储设备的各种操作。

weixin_35826166的博客 1483

linux SCSI-UFS协议总图

详细介绍了linux中关于ufs及scsi协议实现,以及和block和文件系统层之间的调用关系:基于linux kernel4.4

Delta-Sigma调制(DSM)技术

前言 数字信号处理和通信系统的性能很大程度上受到了模拟信号到数字信号转换接口——ADC的精度和分辨率的限制。而传统的线性脉冲编码调制(PCM)ADC受到了制造工艺的限制,无法达到很高的分辨率。但基于Delta-Sigma调制技术的ADC可以在现有工艺下实现高分辨率(大于16位),同时由于结构简单,所以易于实现。低成本高性能使得Delta-Sigma调制技术得到了广泛的应用。 Delta-Sigma型ADC的结构原理图如下图所示: 它最大的优势在于仅用1位ADC进行数据转换,同时其模拟电路部分结构简单不需要

阿星的博客 2万+

从零到一:STM32CubeMX虚拟串口开发中的常见陷阱与优化策略

本文深入探讨了STM32CubeMX在USB虚拟串口开发中的常见问题与优化策略,涵盖数据流吞吐量瓶颈、实时性约束等核心挑战。通过实战案例和代码示例,详细解析了波特率同步异常、数据丢失等问题的解决方案,并提供了DMA配置和中断优先级调优的高级技巧,帮助开发者提升STM32虚拟串口的性能和可靠性。

weixin_29164185的博客 370

(论文速读)PTV3: 更简单、更快速、更强大的3D点云处理新突破

该论文提出PointTransformerV3(PTv3),通过简化设计实现3D点云处理的效率突破。该研究摒弃复杂注意力机制,转而采用点云序列化和补丁注意力等高效方法,将感受野从16点扩展到1024点,在保持高精度的同时实现3倍速度提升和10倍内存优化。PTv3在超过20个室内外场景任务中取得SOTA结果,ScanNet语义分割达79.4%mIoU,Waymo检测提升3.3%APH。核心创新包括四种空间填充曲线序列化模式和xCPE位置编码,为3D感知的工业应用提供了高效解决方案。

LJ1147517021的博客 1379

地瓜派RDK X5部署YOLOv11n避坑指南:从Softmax瓶颈到BPU加速的实战解析

本文详细解析了在地瓜派RDK X5开发板上部署YOLOv11n模型时,从性能暴跌到成功优化的全过程。核心在于通过配置`node_info`将模型中的Softmax算子强制在BPU上以int16精度运行,解决了因算子被分配到CPU导致的严重性能瓶颈。实战部署后,模型推理延迟从126ms降至10.8ms,FPS从7.9提升至92.3,实现了显著的性能优化。

beta5的博客 865

C#联合Halcon机器视觉框架源码—升级版

相较于之前的NxtVision,本软件代码架构更加合理,且新增。对源码有需求的,订阅本专栏后,私信我领取。、原来的vb脚本改为。

Z's Palace 1416

【100%通过率】华为OD机试真题 JS 实现【水库蓄水问题】【2023 Q1 | 100分】

给定一个长度为 n 的整数数组height。数组的元素表示山的高度,选择两个元素作为水库的边界,求蓄水量的最大值并输出蓄水量最大时的边界下标(蓄水量相同时输出下标较近的)。

MISAYAONE的博客 8174

2026爬虫反爬终极对抗:AST解混淆+算法还原+Python复现全流程实战

本文分享了破解JS加密参数的完整流程,重点介绍AST解混淆和算法还原方法。针对电商网站常见的混淆手段(变量名混淆、控制流平坦化、字符串加密等),作者提出一套高效解决方案:通过AST解析还原可读代码,结合Chrome断点调试定位加密函数,最后用Python精准复现加密逻辑。文章包含具体的代码实现,如字符串数组还原的AST操作示例,并详细说明了从样本采集到验证测试的全流程。该方法已成功应用于10多个网站,将破解时间从一周缩短至一天,为处理JS加密参数提供了可复用的技术方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1527

从0到1用OpenClaw打造酒店收益管理系统:数据整合→AI策略迭代全链路落地实战

本文基于三亚某连锁海景酒店真实项目落地经验编写,系统上线3个月,酒店平均入住率从62%提升至80%,RevPAR(平均可售房收入)提升26%,淡季空置率降低46%,完全覆盖中小酒店全场景收益管理需求。本文配套OpenClaw全量Skill代码、工作流配置文件,可直接复用落地。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 494

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 卷二 Dalvik与Android源码分析 第五章 Interpreter与JIT 5.3-C解释器 5.4--汇编解释器 图书版试读--请勿转发
下一篇: s5pv210 uboot 源码分析 笔记版 转载请注明出处---crosskernel@gmail.com
crosskernel
博客等级 码龄18年 14粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值