高通RFC适配RFFE-添加MIPI设备【转】
本文转载自:https://blog.csdn.net/u011212816/article/details/80828625
RF driver主要设计到的器件
1、Transceiver
2、RFFE(RF Front End)
(1)PA
(2)ASM
(3)PAPM
其中Transceiver基本是以高通参考设计采用的芯片为主,为WTRXXX系列,但是RFFE由于成本问题,往往不采用参考设计中的芯片,RFFE这边只讨论PA 和ASM,一般分为MiPi 和GRFC
MIPI 设备通过寄存器配置PA以及ASM,GRFC则是通过GPIO配置。
这里涉及的代码为MDM9607芯片的Jolokia版本
关于RFC 涉及到的代码目录有
1、modem_proc/rfc_jolokia//核心目录,存放参考设计的RF driver ,我们自己添加的也在这里
2、modem_proc/rfcdevice_pa//存放MIPI pa 设备
3、modem_proc/rfcdevice_asm//存放MIPI asm 设备
4、modem_proc/rfctarget_jolokia//存放RF硬件部分的nv
5、modem_proc/rfcnv//存放modem版本下定义nv项的文件nvdefintion.xml
如何添加一个新的MIPI pa 芯片
如果RF前端采用了一款新的MIPI 的pa,需要在modem_proc/rfcdevice_pa新建一个PA设备,在添加之前我们需要查看pa的datasheet,主要有两部分需要着重查看:端口结构图,寄存器,以sky77638为例,这款芯片复用了PA 以及ASM
结构图
该器件的输入端口主要有RFIN_HB,RFIN_MB,RFIN_LB,RFIN_VLB,输出端口有HB1、HB2、HB3、MB1、MB2、MB3、MB4、LB1、LB2、LB3、LB4、LB5
ASM部分包括HBRX1和HBRX2。
寄存器
寄存器表比较重要的有:0x00 0x02 0x1d 0x1e 0x1f
0X00:输出端口,输入端口,以及PA模式
0X02 ASM的端口
0X1D 0X1E 0X1F pid mid
看完datasheet,我们需要修改目录下modem_proc/rfcdevice_pa/src
1. Create the rfdevice_pa_XXX_data_ag.h.复制已有的文件,修改类的名称
2. Create the rfdevice_pa_XXX_data_ag.cpp
填加PA_SET_BIAS_REG/DATA
填加PA_set_range_REG/DATA
填加 PA_ON_REG/DATA
填加PA_OFF_REG/DATA
填加 PA_TRIGGER/DATA
填写PID MIDPRO_REV
#define RFDEVICE_PA_SKY_XXX_NUM_PORTS 16//查看reg0x00中port口为16(0000-1111)
#define RFDEVICE_PA_SKY_XXX_PA_SET_BIAS_NUM_REGS 2//reg中有primary bias 和 second bias 在0x01 和0x03,前面没有列出来
static uint8 rfdevice_pa_sky_XXX_pa_set_bias_regs[RFDEVICE_PA_SKY_XXX_PA_SET_BIAS_NUM_REGS] = {0x01, 0x03};寄存器
static int16 rfdevice_pa_sky_XXX_pa_set_bias_data[RFDEVICE_PA_SKY_XXX_NUM_PORTS][4][RFDEVICE_PA_SKY_XXX_PA_SET_BIAS_NUM_REGS] =
{
......具体值没有通用性
};
#define RFDEVICE_PA_SKY_XXX_PA_SET_RANGE_NUM_REGS 1//pa range
static uint8 rfdevice_pa_sky_XXX_pa_set_range_regs[RFDEVICE_PA_SKY_XXXX_PA_SET_RANGE_NUM_REGS] = {0x00, };
static int16 rfdevice_pa_sky_XXX_pa_set_range_data[RFDEVICE_PA_SKY_XXXX_NUM_PORTS][4][RFDEVICE_PA_SKY_XXX_PA_SET_RANGE_NUM_REGS] =
{
{ /* PORT NUM: 0 *//* PA's Disable */
{ 0x00, }, /* PA Range: 0 */HPM
{ 0x00, }, /* PA Range: 1 */LPM
{ 0x00, }, /* PA Range: 2 */LPM
{ 0x00, }, /* PA Range: 3 */LPM
},
.......
};
#define RFDEVICE_PA_SKY_XXX_PA_ON_NUM_REGS 1//一般不设置
static uint8 rfdevice_pa_sky_XXX_pa_on_regs[RFDEVICE_PA_SKY_XXX_PA_ON_NUM_REGS] = {RFFE_INVALID_REG_ADDR /*Warning: Not Specified*/, };
static int16 rfdevice_pa_sky_XXX_pa_on_data[RFDEVICE_PA_SKY_XXX_NUM_PORTS][RFDEVICE_PA_SKY_XXXPA_ON_NUM_REGS] =
{
{ /* PORT NUM: 0 */
RF_REG_INVALID,
},
.....
};
#define RFDEVICE_PA_SKY_XXX_PA_OFF_NUM_REGS 1
static uint8 rfdevice_pa_sky_XXX_pa_off_regs[RFDEVICE_PA_SKY_XXX_PA_OFF_NUM_REGS] = {0x00, };
static int16 rfdevice_pa_sky_XXX_pa_off_data[RFDEVICE_PA_SKY_XXX_NUM_PORTS][RFDEVICE_PA_SKY_XXX_PA_OFF_NUM_REGS] =
{
{ /* PORT NUM: 0 */
0x02, //需要将PA disable PA 改为LOW POWER,所以0X00寄存器设置为2
},
.........
};
#define RFDEVICE_PA_SKY_XXX_PA_TRIGGER_NUM_REGS 1
static uint8 rfdevice_pa_sky_XXX_pa_trigger_regs[RFDEVICE_PA_SKY_XXX_PA_TRIGGER_NUM_REGS] = {0x1C, };
static int16 rfdevice_pa_sky_XXX_pa_trigger_data[RFDEVICE_PA_SKY_XXX_NUM_PORTS][RFDEVICE_PA_SKY_XXX_PA_TRIGGER_NUM_REGS] =
{
{ /* PORT NUM: 0 */
0x07, //默认都打开,所以为7
},
............
};
boolean rfdevice_pa_sky_XXX_v3_data_ag::device_info_get( rfdevice_pa_info_type *pa_info )
{
{
pa_info->mfg_id = 0x01A5;//MID
pa_info->prd_id = 0x1C;//PID
pa_info->prd_rev = 2;//自定义
pa_info->num_ports = RFDEVICE_PA_SKY_XXX_NUM_PORTS;
pa_info->num_pa_ranges = 4;
ret_val = TRUE;
}
对以上的代码PA RANGE的配置,值得一提的是,一般虽然设置为4个range,但是其实用不到,具体参考NV #2029 NV_WCDMA_PA_RANGE_MAP_I ,一般设置为{1,0,0,0},如下图,所以我们在PA RANGE中其实第一个是HPM,后面是LPM
3. Modify the rfdevice_pa_factory.cpp file.
#include"rfdevice_pa_XXX_data_ag.h" // 添加器件XYZ的头文件
.....
else if ( mfg_id == 0x01A5 && prd_id == 0x1C &&prd_rev == 0)
{//填加这款PA的mid pid prd_rev
pa_data = rfdevice_pa_XXX_data_ag::get_instance();
}
如何添加一个新的MIPI asm 芯片
mipi asm 配置比pa简单很多,毕竟只是一个单刀多掷的开关,首先依然查看datasheet
结构图
寄存器
0X00是开关真值表
001D 001E 001F 依然是 pid mid
接下来修改目录下modem_proc/rfcdevice_asm/src
1、Create therfdevice_asm_XXX_data_ag.h //复制已有的文件,修改类的名称
2、Create therfdevice_asm_XXX_data_ag.cpp file
ASM_ON_REG
ASM_OFF_REG
ASM_TRIGGER_REG
填写PID MIDPRO_REV
#define RFDEVICE_ASM_XXX_NUM_PORTS 11//真值表个数
#define RFDEVICE_ASM_XXX_ASM_ON_NUM_REGS 1
static uint8 rfdevice_asm_XXX_asm_on_regs[RFDEVICE_ASM_XXX_ASM_ON_NUM_REGS] = {0x00, };//寄存器地址
static int16 rfdevice_asm_XXX_asm_on_data[RFDEVICE_ASM_XXX_NUM_PORTS][RFDEVICE_ASM_XXX_ASM_ON_NUM_REGS] =
{
{ /* PORT NUM: 0 *//* Isolation*/
0x00,
},
{ /* PORT NUM: 1 *//* TRX1 */查看真值表
0x02,
},
{ /* PORT NUM: 2 *//* TRX2 */
0x0A,
},
{ /* PORT NUM: 3 *//* TRX3 */
0x0E,
},
.....
};
#define RFDEVICE_ASM_XXX_ASM_OFF_NUM_REGS 1
static uint8 rfdevice_asm_XXX_asm_off_regs[RFDEVICE_ASM_XXX_ASM_OFF_NUM_REGS] = {0x00, };
static int16 rfdevice_asm_XXX_asm_off_data[RFDEVICE_ASM_SXXX_NUM_PORTS][RFDEVICE_ASM_XXX_ASM_OFF_NUM_REGS] =
{
{ /* PORT NUM: 0 */
0x00, //第一个port为关
},
....
};
#define RFDEVICE_ASM_XXX_ASM_TRIGGER_NUM_REGS 1
static uint8 rfdevice_asm_XXX_asm_trigger_regs[RFDEVICE_ASM_XXX_ASM_TRIGGER_NUM_REGS] = {0x1C, };//trigger寄存器
static int16 rfdevice_asm_XXX_asm_trigger_data[RFDEVICE_ASM_SXXX_NUM_PORTS][RFDEVICE_ASM_XXX_ASM_TRIGGER_NUM_REGS] =
{
{ /* PORT NUM: 0 */
0x07, //默认为7
},
......
};
boolean rfdevice_asm_sky_XXX_data_ag::device_info_get( rfdevice_asm_info_type *asm_info )
{
asm_info->mfg_id = 0x1A5;//PID
asm_info->prd_id = 0x45;//MID
asm_info->prd_rev = 0;
asm_info->num_ports = RFDEVICE_ASM_XXX_NUM_PORTS;
ret_val = TRUE;
}
3、Modify the rfdevice_asm_factory.cpp file
#include"rfdevice_asm_XXX_data_ag.h" // 添加器件XYZ的头文件
.....
else if ( mfg_id == 0x01A5 && prd_id == 0x1C &&prd_rev == 0)
{//填加这款ASM的mid pid prd_rev
pa_data = rfdevice_asm_XXX_data_ag::get_instance();
}
高通RFC适配RFFE-添加MIPI设备【转】相关推荐
- 高通QCC306J接入windows10显示未知设备处理方法
第一步,进入设备管理器,这是发现设备一直在扫描,点击未知设备.具体如图1.1所示. 图1.1找到未知设备 第二步,点击未知设备属性,选择更新驱动.具体如图2.1,2.2所示. 图2.1选择更新驱动程序 ...
- 高通Qualcomm处理器的手机或设备进EDL 9008模式的办法
适用于变砖的设备 由于我们有很多基于 Qualcomm 的设备,其中一些设备可能会古怪地猜测如何进入 EDL 模式,或者如何正确进入. 例如,对于 Alcatel,您必须先按住两个音量键,然后再按住其 ...
- 高通msm8953 Android7.1支持Audio设备列表(十二)
android audio 生产者与消费者 简介 全面接触生产者/消费者问题是在操作系统原理中,并发性原理讨论的问题 生产者/消费者问题.最近的工作偏向音频,接着上一篇文章,用生产者,消费者模型来理解 ...
- 高通平台RF配置流程
高通平台RF配置流程 **注:**本文参考项目路径和代码为SIM7600 LE20分支 1 准备工作 需要的资料: 各个器件的datasheet 原理图 逻辑表(内容包含支持哪些制式.band,各个b ...
- 最高10万奖励!不限选题!高通AI应用创新大赛应用赛道详解
由高通技术公司.高通创投主办,极视角.小米.中科创达.CSDN共同协办,TensorFlow Lite作为开源技术合作伙伴的"2021高通人工智能应用创新大赛"已于3月24日正式开 ...
- 杂项-公司:高通百科
ylbtech-杂项-公司:高通百科 高通创立于1985年,总部设于美国加利福尼亚州圣迭戈市,33,000多名员工遍布全球.高通公司是全球3G.4G与5G技术研发的领先企业,目前已经向全球多家制造商提 ...
- 围观苹果高通口水战,今年没有5G版iPhone全怪高通?
关注网易智能,聚焦AI大事件,读懂下一个大时代! 责编 | 定西 翻译 | 小小 [网易智能讯 1月15日消息]据CNET报道,在美国联邦贸易委员会(FTC)周一对高通提起的反垄断诉讼中,苹果公司首席 ...
- 高通 Camera HAL3:项目开发技术点总结
做高通 Camera HAL3开发的一些技术点的总结.整理. 做个记录,方便后续查阅. 1.目录.so.配置文件 productName是项目名 out Target路径:\out\target\pr ...
- 未发先侃?对比华为,高通第二代5G调制解调器如何?
MWC大会前夕,所有手机和硬件厂商似乎都按奈不住了,接连公布最新研究成果.今年的焦点明显是5G,无论是芯片.手机还是其他设备都备受关注.作为5G时代的重要参与者,高通自然不甘沉默,抢先公开第二代5G调 ...
- 高通:推出全新5G基站
导读 在本世纪之交,出于各方面的综合考量,高通战略性放弃了无线系统设备与终端业务.但在随后的 20 年中,高通不但成长为千亿美金市值的行业巨头,其开创性的技术与商业模式,也在一定程度上为移动通信产业的 ...
最新文章
- mysql导入600万数据_mysql如何导出600万条记录的数据表?
- (DBA之路【五】)关于锁的故事
- 如何用 Slack 和 Kubernetes 构建一个聊天机器人?| 附代码
- mysql 用一条sql语句修改两个表里的内容,一条sql语句update更新两个表
- 添加MySql用户并授权
- pypark hive 开启动态分区_Hive分区与分桶
- Druid-目前最好的连接池
- C++内存管理——指针数组
- python爬虫知识大全_Python爬虫入门有哪些基础知识点
- JeecgBoot 移动OA 新版本上线啦!!!
- spring配置文件约束
- Android 存储学习之使用SharedPreference保存文件
- 数据分析软件SPSS22的授权及汉化
- 变速齿轮Delphi实现
- windows定时开关机方法
- day 05 DQL数据查询语言---连接查询---登堂入室
- STM32 Bootloader开发记录 3 固件签名校验
- Hive 中的时间加减暨间隔函数INTERVAL
- py脚本检索指定文件并发送邮件+脚本打包、伪装
- 和导师的微信聊天翻车现场,你一定也经历过!
热门文章
- 53多项式08——多元多项式、齐次多项式和对称多项式
- 谈谈数值分析中的插值(截断)误差,以牛顿法为例
- ffmpeg drawtext同时添加多行文本
- mysql连接字符串 .net_.net MYSQL连接字符串参数详细解析
- python flask request 参数映射_Flask request获取参数问题
- 关于为什么10000000可以表示-128
- Java String、StringBuffer、StringBuilder区别
- Harmony OS — Picker滑动选择器
- L1-007 念数字 (10 分)—团体程序设计天梯赛
- python3-基础2