高通modem代码中的NV读写
MTK_NVRAM等操作
MTK 中nvram 的读写操作定义NVRAM 数据有三种方式:(一)、在nvram_editor_data_item.h、nvram_data_item.h、nvram_data_item.c三个文件中添加。
1、在nvram_editor_data_item.h文件中定义自己保存在nvram 中的结构体数据类型。
例如:typedef struct{Int a;Char b;}my_nvram_data_t;2、在nvram_data_item.h 文件中的nvram_lid_core_enum 枚举中定义自己的nvram ID(建议在最后面添加,但必须添加到NVRAM_EF_LAST_LID_CORE 的前面)。
再定义两个宏,一个宏是前面定义的结构体的字节大小,另一个是在nvram中保存的数据个数,如果在nvram 中只需要保存一个数据的话,就定义为1。
例如:typedef enum{…………My_nvram_data_lid, //自己定义的nvram IDNVRAM_EF_LAST_LID_CORE}nvram_lid_core_enum;#define my_nvram_data_size sizeof( my_nvram_data_t )#define my_nvram_data_total 13、在nvram_data_items.c文件中的lobical_data_item_table_core 结构体数组中添加自己的项。
建议添加在最后,仿照前面的添加。
例如:Itable_entry_struct logical_data_item_table_core[] ={…………,{My_nvram_data_lid , //前面定义的枚举IDmy_nvram_data_size , //前面定义的宏,结构体大小my_nvram_data_total , //前面定义的宏,nvram中数据的个数NVRAM_EF_ZERO_DEFAULT,NVRAM_A TTR_A VERAGE,NVRAM_CATEGORY_USER,“ MT1D” ,// 根据前面的数据项递增VER( My_nvram_data_lid ),“ my nvram test\0” ,//数据描述,只做参考,无其他作用NVRAM_RESERVED_VALUE}, { NVRAM_EF_RESERVED_LID}}4、my_nvram_data_t my_nvram_data = {0};S16 error ;//将my_nvram_data中的数据写到nvram中My_nvram_data_lid 标志处,error保存错误标志WriteRecord(My_nvram_data_lid, 1, &my_nvram_data, sizeof(my_nvram_data_t ), & error);//将nvram中My_nvram_data_lid 标志处的数据读到my_nvram_data中,error保存错误标志ReadRecord(My_nvram_data_lid, 1, &my_nvram_data, sizeof(my_nvram_data_t ), & error);二、在common_nvram_editor_data_item.h、nvram_user_defs.h、nvram_user_config.c 中定义1、common_nvram_editor_data_item.h 此处定义nvram 中保存数据的结构体数据类型2、nvram_user_defs.h 此处定义nvram ID 和结构体数据大小、数据总数3、nvram_user_config.c 此处填充nvram 结构数据内容及defult值(在MTK 下建议使用此方法修改nvram)(mtk 中nvram 的读写操作(一,二)/epll_apple/blog/item/94b29c22083a14a84723e846.html)三、在coustom_mmi_default_value.h、common_mmi_cache_config.c中定义1、在custom_mmi_default_value.h 文件中有三个枚举类型BYTEDATA,SHORTDATA和DOUBLEDATA。
modem是什么
modem是什么什么是modem?Modem(调制解调器)是一种设备,用于将数字信号转换为模拟信号,以便通过电缆、光纤或电话线等传输介质传输数据。
它的名称来自于其功能,即将数字信号调制为模拟信号以进行传输,并将接收到的模拟信号解调为数字信号。
Modem的工作原理Modem的工作原理可以分为调制和解调两个过程:1.调制(Modulation)在调制过程中,modem将数字信号转换为模拟信号。
为了将数字信号转换为模拟信号,调制器使用一种或多种调制技术。
最常见的调制技术是调幅(AM)和调频(FM)调制。
在调幅调制中,数字信号通过改变模拟信号的振幅来编码。
调幅的优点是简单、成本低廉,但容易受到噪声的干扰。
调频调制则是通过改变模拟信号的频率来编码数字信号。
2.解调(Demodulation)在解调过程中,modem将收到的模拟信号转换回数字信号。
解调器使用与调制过程相反的技术,将模拟信号还原为数字信号。
解调过程在接收到模拟信号后,通过分析信号的振幅或频率变化来还原数字信号。
Modem的应用Modem在通信领域有广泛的应用。
以下是一些常见的应用领域:1.互联网接入Modem用于将计算机连接到互联网。
在宽带接入还未普及的时代,调制解调器是连接计算机与电话线之间的桥梁,允许用户通过拨号方式访问互联网。
随着技术的发展,宽带调制解调器取代了传统的拨号调制解调器,提供更快的互联网速度。
2.传真传真机也需要modem来进行数据传输。
在发送传真时,modem将传真数据转换为模拟信号,并通过电话线发送到接收方。
接收方的modem则将接收到的模拟信号转换为数字信号,从而还原传真内容。
3.无线通信在移动通信中,modem也扮演着重要的角色。
例如,在智能手机中,modem负责将数据转换为无线信号,以便通过无线网络进行传输。
这使得用户能够通过手机进行语音通话、发送短信、上网等各种功能。
4.工业自动化在工业自动化领域,modem用于远程监控和控制。
VoLTE测试终端使用指导
VOLTE测试终端使用指导一、终端的初始设置目前商用测试以高通MSM8974芯片的终端为主,常用的包括Sony Z2、HTC M8t、Samsung S5等。
以上测试终端已实现VoLTE的支持,相关IMS域配置已烧录,无需手工配置,对测试者/用户而言,由于IMS及PS处理已隐去,呼叫操作与CS呼叫无异。
测试前,需完成终端、PC、软件之间的配置及对接,此处以HTC M8t 为例,简述步骤如下:1. 终端端口的开启HTC默认端口关闭,需在“应用程序→HTC SSD Test Tool→Control Diag Port/ Control Modem中选择enable开启”,终端每次重启后都必须进行开启操作:2. 终端驱动安装终端通过USB连接PC后,设备管理器将检测到多个未知端口,右键选择更新驱动,并选择驱动存放路径即可,需注意每个未知端口都要完成更新。
1、终端连接PC后,设备管理器显示未知端口:2、驱动安装后,Diag Port及Modem已识别:3. 关停终端的LOG采集终端与CDS、鼎利、QXDM等软件对接时,需关停终端内部的Log采集,否则软件无法抓取终端信令,可在“应用程序→HTC SSD Test Tool→QXDMLogger”中关停(终端每次重启后都必须进行如下操作):点击Disable DQ:去掉图中红圈内的小勾:4. 网络类型选择根据测试需要,可以在“应用程序→HTC SSD Test Tool→Network Type Switch”中选择锁定LTE、2G/3G/4G自动等方式,一般VoLTE基本语音测试选择锁定LTE,而eSRVCC、CSFB等选择2G/3G/4G自动。
二、终端常用操作1. VoLTE语音编码标准VoLTE使用两种语音编码标准:AMR(或AMR-NB)、AMR-WB。
每种编码标准又都包含多种码率,中移的测试用例中包含不同编码方式及不同码率之间的对比测试,终端侧可在QXDM的NV Browser中对编码方式及码率进行修改,方法如下:码率及对应NV Value1、在QXDM中打开NV Browser(View→New→Common→NV Browser),找到“65964 QIPCall HD Voice Enabled”,Value为0代表标清AMR-NB ,Value为1代表高清AMR-WB。
高通QMI协议
⾼通QMI协议QMI(Qualcomm MSM Interface,官⽅名称应该是Qualcomm Message Interface)是⾼通⽤来替代OneRPC/DM的协议,⽤来与modem通信。
QMI协议定义了多个服务: DMS(设备管理Device Management) 提供载⼊设备信息的功能 NAS(⽹络访问Network Access)提供欧冠你注册⽹络的动作 WDS(数据连接)PDS(GPS定位报告) UIM(管理User Identity Module) CTL(控制服务:⽤户发起其他服务请求前,必须先申请 ClientID, 这个ID就是由控制服务分配的, 这个服务永远在线)协议⾥的每个服务都定义了请求和响应(也叫做 Indication) 每个请求响应都有⼀个匹配的ID,这样⽤户可以⼀次发出多个请求。
并且响应也不必严格按照请求的顺序进⾏回应。
Indication作为主动提供的消息,要么发送给某个特定的客户端, 要么是⼴播消息(⼴播给所有使⽤这个服务的客户)。
通常情况下,⽤户需要通过⼀些请求/响应来打开indication协议中的每条消息都定义了⼀系列输⼊(在请求中才有输⼊)参数,或者输出(在响应或者indications中才有输出)参数。
这些参数,我们命名为TLVQMI协议可以通过Linux kernels (>= 3.4)来访问。
载⼊cdc-wdm和qmi_wwan之后即可$ lsmod...qmi_wwan 20971 0cdc_wdm 17427 1 qmi_wwan...usbnet 30844 3 rndis_host,qmi_wwan,cdc_etherusbcore 195340 14 rndis_host,rt2x00usb,usb_storage,rt2800usb,ehci_hcd,ehci_pci,qmi_wwan,usbhid,usbnet,cdc_wdm,xhci_hcd,cdc_ether设置适当的usb模式# setprop b.config diag,serial_smd,serial_tty,rmnet_bam,mass_storage,adb在PC上可以看到$ ls -la /dev/cdc*crw------- 1 root root 180, 0 10⽉ 12 20:29 /dev/cdc-wdm0演⽰# qmicli -d /dev/cdc-wdm0 --dms-get-revision[/dev/cdc-wdm0] Device revision retrieved:Revision: 'M8626A-AAAANAZM-1.1.00759 1 [Dec 31 2013 03:00:00]'# qmicli -d /dev/cdc-wdm0 --dms-uim-get-imsi[/dev/cdc-wdm0] UIM IMSI retrieved:IMSI: '204043154974997'# qmicli -d /dev/cdc-wdm0 --dms-uim-get-iccid[/dev/cdc-wdm0] UIM ICCID retrieved:ICCID: '89860313100205205744'# qmicli -d /dev/cdc-wdm0 --dms-get-capabilities[/dev/cdc-wdm0] Device capabilities retrieved:Max TX channel rate: '1800000'Max RX channel rate: '3100000'Data Service: 'non-simultaneous-cs-ps'SIM: 'supported'Networks: 'cdma20001x, evdo, gsm'# qmicli -d /dev/cdc-wdm0 --dms-get-ids[/dev/cdc-wdm0] Device IDs retrieved:ESN: 'C33BA980'IMEI: '355991*********'MEID: 'A1000051CA0BE1'# qmicli -d /dev/cdc-wdm0 --dms-get-band-capabilities[/dev/cdc-wdm0] Device band capabilities retrieved:Bands: 'bc-0-a-system, bc-0-b-system, gsm-dcs-1800, gsm-900-extended, gsm-850, gsm-pcs-1900'LTE bands: '(null)'v# qmicli -d /dev/cdc-wdm0 --nas-get-system-selection-preference[/dev/cdc-wdm0] Successfully got system selection preferenceEmergency mode: 'no'Mode preference: 'cdma-1x, cdma-1xevdo, gsm'Band preference: 'bc-0-a-system, bc-0-b-system, bc-1-all-blocks, bc-2, bc-3-a-system, bc-4-all-blocks, bc-5-all-blocks, gsm-dcs-1800, gsm-900-extended, gsm-900-primary, bc-6, bc-7, bc-8, bc-9, bc-10, bc-11, gsm-450, gsm-480, gsm-750, gsm- LTE band preference: '(null)'TD-SCDMA band preference: 'a, b, c, d, e, f'CDMA PRL preference: 'any'Roaming preference: 'any'Network selection preference: 'automatic'Service domain preference: 'cs-ps'Service selection preference: 'wcdma'详细调试信息v# qmicli -d /dev/cdc-wdm0 -v --dms-get-ids[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Opening device with flags 'none'...[12 10⽉ 2014, 20:55:31] [Debug] QMI Device at '/dev/cdc-wdm0' ready[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Assuming service 'dms' is supported...[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Allocating new client ID...[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Sent message...<<<<<< RAW:<<<<<< length = 16<<<<<< data = 01:0F:00:00:00:00:00:01:22:00:04:00:01:01:00:02[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Sent message (translated)...<<<<<< QMUX:<<<<<< length = 15<<<<<< flags = 0x00<<<<<< service = "ctl"<<<<<< client = 0<<<<<< QMI:<<<<<< flags = "none"<<<<<< transaction = 1<<<<<< tlv_length = 4<<<<<< message = "Allocate CID" (0x0022)<<<<<< TLV:<<<<<< type = "Service" (0x01)[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Received message...>>>>>> RAW:>>>>>> length = 24>>>>>> data = 01:17:00:80:00:00:01:01:22:00:0C:00:02:04:00:00:00:00:00:01:02:00:02:03[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Received message (translated)...>>>>>> QMUX:>>>>>> length = 23>>>>>> flags = 0x80>>>>>> service = "ctl">>>>>> client = 0>>>>>> QMI:>>>>>> flags = "response">>>>>> transaction = 1>>>>>> tlv_length = 12>>>>>> message = "Allocate CID" (0x0022)>>>>>> TLV:>>>>>> type = "Result" (0x02)>>>>>> length = 4>>>>>> value = 00:00:00:00>>>>>> translated = SUCCESS>>>>>> TLV:>>>>>> type = "Allocation Info" (0x01)>>>>>> length = 2>>>>>> value = 02:03>>>>>> translated = [ service = 'dms' cid = '3' ][12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Registered 'dms' (version unknown) client with ID '3'[12 10⽉ 2014, 20:55:31] [Debug] Asynchronously getting IDs...[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Sent message...<<<<<< RAW:<<<<<< length = 13<<<<<< data = 01:0C:00:00:02:03:00:01:00:25:00:00:00[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Sent message (translated)...<<<<<< QMUX:<<<<<< length = 12<<<<<< flags = 0x00<<<<<< service = "dms"<<<<<< client = 3<<<<<< QMI:<<<<<< flags = "none"<<<<<< transaction = 1<<<<<< tlv_length = 0<<<<<< message = "Get IDs" (0x0025)[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Received message...>>>>>> RAW:>>>>>> length = 66>>>>>> data = 01:41:00:80:02:03:02:01:00:25:00:35:00:02:04:00:00:00:00:00:12:0E:00:41:31:30:30:30:30:35:31:43:41:30:42:45:31:10:08:00:43:33:33:42:41:39:38:30:11:0F:00:33:35:35:39:39:31:30:32:30:39:32:37:34:38:30 [12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Received message (translated)...>>>>>> QMUX:>>>>>> length = 65>>>>>> flags = 0x80>>>>>> service = "dms">>>>>> client = 3>>>>>> QMI:>>>>>> flags = "response">>>>>> transaction = 1>>>>>> tlv_length = 53>>>>>> message = "Get IDs" (0x0025)>>>>>> TLV:>>>>>> type = "Result" (0x02)>>>>>> length = 4>>>>>> value = 00:00:00:00>>>>>> translated = SUCCESS>>>>>> TLV:>>>>>> type = "Meid" (0x12)>>>>>> length = 14>>>>>> value = 41:31:30:30:30:30:35:31:43:41:30:42:45:31>>>>>> translated = A1000051CA0BE1>>>>>> TLV:>>>>>> type = "Esn" (0x10)>>>>>> length = 8>>>>>> value = 43:33:33:42:41:39:38:30>>>>>> translated = C33BA980>>>>>> TLV:>>>>>> type = "Imei" (0x11)>>>>>> length = 15>>>>>> value = 33:35:35:39:39:31:30:32:30:39:32:37:34:38:30>>>>>> translated = 355991*********[/dev/cdc-wdm0] Device IDs retrieved:ESN: 'C33BA980'IMEI: '355991*********'MEID: 'A1000051CA0BE1'[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Releasing 'dms' client with flags 'release-cid'...[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Unregistered 'dms' client with ID '3'[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Sent message...<<<<<< RAW:<<<<<< length = 17<<<<<< data = 01:10:00:00:00:00:00:02:23:00:05:00:01:02:00:02:03[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Sent message (translated)...<<<<<< QMUX:<<<<<< length = 16<<<<<< flags = 0x00<<<<<< service = "ctl"<<<<<< client = 0<<<<<< QMI:<<<<<< flags = "none"<<<<<< transaction = 2<<<<<< tlv_length = 5<<<<<< message = "Release CID" (0x0023)<<<<<< TLV:<<<<<< type = "Release Info" (0x01)<<<<<< length = 2<<<<<< value = 02:03<<<<<< translated = [ service = 'dms' cid = '3' ][12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Received message...>>>>>> RAW:>>>>>> length = 24>>>>>> data = 01:17:00:80:00:00:01:02:23:00:0C:00:02:04:00:00:00:00:00:01:02:00:02:03[12 10⽉ 2014, 20:55:31] [Debug] [/dev/cdc-wdm0] Received message (translated)...>>>>>> QMUX:>>>>>> length = 23>>>>>> QMI:>>>>>> flags = "response">>>>>> transaction = 2>>>>>> tlv_length = 12>>>>>> message = "Release CID" (0x0023)>>>>>> TLV:>>>>>> type = "Result" (0x02)>>>>>> length = 4>>>>>> value = 00:00:00:00>>>>>> translated = SUCCESS>>>>>> TLV:>>>>>> type = "Release Info" (0x01)>>>>>> length = 2>>>>>> value = 02:03>>>>>> translated = [ service = 'dms' cid = '3' ][12 10⽉ 2014, 20:55:31] [Debug] Client releasedusb⽹络接⼝ ECM: Ethernet Control Model 802.3 ethernet frames 以太⽹控制模型NCM: Network Control ModelMBIM协议 (由⾼通,爱⽴信,微软等开发, USB论坛发布) 内核驱动是 cdc_mbim (Linux Kernel >= 3.8) 设备是 /dev/cdc-wdm libmbim mbimcli(libmbim-utils) mbimcli-d /dev/cdc-wdm1--basic-connect-query-subscriber-ready-status。
关于高通的NV
一,引言 1. 什么是NV 高通平台的NV,保存了系统运行过程中各个模块可能用到的一些参数值,它是以单个文件的形式保存在EFS中,但用户是不能随意访问的,只能通过QXDM来进行读写。
对于60X0平台,NV就有将近5千多项。
2. 为什么要备份恢复NV NV值是需要通过校准和终测才能使手机硬件达到最佳工作状态,特别是其中的RF相关的NV项,经过校准及终测后,每台手机的这些NV值基本上都不一样,又加上NV数据是是存储在EFS,而EFS的数据很可能遭到破坏(如:重新烧写版本),这时的NV数据也将被破坏,之前校准和终测后的NV数据也将无法恢复,使得手机将面临重新走校准、终测的生产流程。
3. 备份恢复的原则备份:首先要确定需要备份的NV有那些项(一般是RF 相关的),一旦检测到对NV项的修改,则在EFS中创建一个标志文件,在每次开机时判断这个标志文件是否存在而执行是否做备份。
恢复:同样在每次开机的时候判断EFS中是否存在恢复标志文件,如果不存在则恢复NV,然后创建这个标志文件,创建成功后,下次开机就会不进行恢复。
二,NV的备份1. 备份的区域由于所需要备份的NV项不是很多(一般就几十项),所以我们可以在FLASH上开辟一块区域专门用于保存NV备份数据。
备份区域是以一定的组织格式来存放数据的(如图):其中每个Item都是以:Item号+内容大小(Byte)+内容的形式来存放的。
比如第10项NV可能有2个值,分别是0x11,0x22,则它在FLASH中存放的形式就是:0a 00 00 00 02 00 00 00 11 22 --------(这里Item号、内容大小都是UINT32 类型)。
2. 备份的时机一般一台机器在出厂前,都要通过终测仪进行校准、终测。
这个过程就会修改到一些RF相关的NV项,也就是我们需要备份的NV。
对于软件上来说,不管是用终测仪,或则高通的QPST,QXDM工具来修改NV项,最后都会调用到写NV的函数:nvdiag_write(),我们可以在这个函数里面创建备份标志文件,在下次系统启动时读取这个文件是否存在来判断是否要做备份。
nvenc参数
nvenc参数
NVENC参数是指NVIDIA的视频编码器参数,它是一种硬件加速的视频编码技术,可以在NVIDIA显卡上进行视频编码,提高视频编码的速度和质量。
在使用NVENC参数进行视频编码时,需要了解一些常用的参数设置,以达到最佳的视频编码效果。
NVENC参数中最重要的是编码器的选择。
NVIDIA提供了两种编码器:H.264和H.265。
H.264编码器适用于大多数情况下,它可以提供高质量的视频编码,并且具有广泛的兼容性。
而H.265编码器则可以提供更高的压缩比和更好的视频质量,但是需要更高的计算能力和更高的硬件要求。
NVENC参数中还有一些常用的参数设置,如码率、分辨率、帧率等。
码率是指视频的比特率,它决定了视频的清晰度和文件大小。
一般来说,码率越高,视频的清晰度越高,但是文件大小也会越大。
分辨率是指视频的像素数,它决定了视频的清晰度和画面大小。
帧率是指视频的每秒帧数,它决定了视频的流畅度和动态效果。
NVENC参数中还有一些高级参数设置,如GOP大小、B帧数、参考帧数等。
GOP大小是指视频的关键帧间隔,它决定了视频的压缩效率和画面质量。
B帧数是指视频中的双向预测帧数,它可以提高视频的压缩比和画面质量。
参考帧数是指视频中的参考帧数,它可以影响视频的压缩效率和画面质量。
NVENC参数是视频编码中非常重要的一部分,它可以提高视频编码的速度和质量。
在使用NVENC参数进行视频编码时,需要根据具体的情况进行参数设置,以达到最佳的视频编码效果。
同时,还需要注意硬件要求和兼容性问题,以确保视频编码的稳定性和可靠性。
nvpmodel指令
nvpmodel指令nvpmodel指令是一种用于控制NVIDIA Jetson系列开发板功耗和性能的命令。
它可以帮助用户在不同的应用场景下灵活地调整设备的性能和功耗。
下面我将以人类视角来描述如何使用nvpmodel指令。
在使用NVIDIA Jetson开发板时,我们经常会面临一个问题:如何在保证性能的同时,尽量减少功耗,以延长设备的电池寿命。
这就需要我们根据不同的使用场景,灵活地调整设备的性能模式。
nvpmodel指令就是为了解决这个问题而设计的。
通过使用nvpmodel 指令,我们可以在不同的模式之间切换,以达到我们想要的性能和功耗平衡。
例如,我们可以选择性能模式来提高设备的计算能力,但这会导致功耗的增加;相反,我们也可以选择节能模式来降低功耗,但计算能力也会相应减弱。
使用nvpmodel指令非常简单。
只需在终端中输入指令"sudo nvpmodel -m <模式名称>"即可切换到指定的模式。
常见的模式包括0-15,分别对应不同的性能和功耗设置。
例如,模式0表示最低功耗模式,而模式15则表示最高性能模式。
还可以通过输入"sudo nvpmodel -q"来查询当前的模式。
这样,我们就可以随时了解设备当前的性能和功耗状态。
nvpmodel指令为我们提供了一种简单而有效的方式来控制NVIDIA Jetson开发板的性能和功耗。
通过合理地选择不同的模式,我们可以在不同的应用场景中取得最佳的性能和功耗平衡。
这对于开发者来说,无疑是一个非常有用的工具。
希望这篇文章能够帮助你更好地了解和使用nvpmodel指令。
高通modem信号上报流程
1
目录
一、信号量参数...............................................................................................................................3 二、信号上报的 timer....................................................................................................................4 三、 LTE 信号量上报流程...........................................................................................................5
if (| rsrq - current_rsrq | >= rsrq_delta)
if(current_lte_sinr != sinr )
{
ss_ptr->info.sinr = current_lte_sinr;
report_rssi
= TRUE;
} /* if there is difference in sinr level */
-125dBm:
2. SYS_SYS_MODE_LTE
如果设备注册了 LTE 网络,那么要同时满足一下四个条件时,新的信号值才会上报。 rssi 是上次获取的信号值 current_rssi 是最新获取的信号值
6
if ( |rssi - current_rssi | > rssi_delta ) if ( | rsrp - current_rsrp | >= rsrp_delta)
HY016射频设计4_静态NV生成说明
HY016射频设计4_静态NV生成说明在PCB投板的两周间隙中,射频工程师可以先把静态NV和校准文件准备起来。
这样等板子贴片回来后就可以下载静态NV,验证原理图设计了。
本文对静态NV进行介绍,并详细说明如何生成HY016的静态NV。
目前高通平台,绝大部分射频相关参数是通过NV来进行配置的。
一份静态NV包括如下部分:1、硬件设计对应的RF Card(NV1878)2、射频电路支持的所有频段,包括2G/3G/4G,发射/主接收/分集接收3、每个支持频段的射频相关参数,包括发射和接收的增益等级、切换点、最大最小发射功率、温度补偿、时序控制等一份正确的静态NV是要让射频电路跑起来的必要条件。
RF CardRF Card是硬件和驱动正确关联的关键。
每份不同的硬件设计采用不同的RF Card,比如有些是WTR2965+QFE4373的,有些是WTR4905+QFE4320的,有些支持南美频段,有些支持国内CA。
这些不同的硬件设计,都对应不同的RF Card。
驱动则根据不同的RF Card对硬件做相应的配置。
所以RF Card弄错,往往都会导致开机死机。
RF Card保持在NV1878中。
以HY016南美全频段为例,射频和驱动约定这个设计的RF Card是111,即NV1878=111。
在这个RF Card中,射频采用WTR4905+RDA PhaseII来实现南美全频段。
驱动也需要在这个RF Card下修改代码,使之和硬件相匹配,重点是通过MIPI 和GPIO对芯片的模式和频段进行控制。
若我们使用的是高通的参考设计,那高通会有默认原理图和驱动代码,我们只要沿用这份原理图的RF Card即可。
以8909 QCN_XTT_MBN_NV_sysRFCalDll_8909_JO.3.0_r00046为例,在软件代码如下路径中可以看到高通支持的RFCardQCN_XTT_MBN_NV_sysRFCalDll_8909_JO.3.0_r00046\modem_proc\rftarget_jolokia\msm8909\ qcn(驱动每个基线都会把这部分文档上传到服务器)但这些RF Card都是采用高通的PA进行设计的电路,在成本上会贵不少。
MTK modem配置
MTK modem配置-- l1_rf
6. GSM900 RX走的TXM的TRX8,对应寄存器值为0x0D 7. DATA0,写入值为0x00,0x04,打到任意一TRX口,初始化,此处每个平台
不一样,需要参考其对应格式。 8. DATA1,写入值为0x00,0x0D,打开TRX8 9. DATA2,写入值为0X00,0X00,关闭接收
MTK modem配置-- ul1_rf
• ul1d_custom_mipi.c,TX EVENT示意图
MTK modem配置-- el1_rf
• lte_custom_rf.h,定义支持的频段,transceiver的TX/RX端口,GPIO配置
MTK modem配置-- el1_rf
• lte_custom_rf.h,定义支持的频段,transceiver的TX/RX端口,GPIO配置
MTK modem配置
MTK modem架构(以MTK6762为例)
MTK modem配置-- mml1_rf
• mml1_custom_drdi.h,一般情况下不用单软多硬功能,在下图位置标记
部分置零关闭此功能。单软多硬即一套软件,支持不同版本的频段配置, 通过GPIO或者ADC检测来实现。
MTK modem配置-- mml1_rf
位 ...... 值
9876543210 01100000
MTK modem配置-- l1_rf
• l1d_custom_mipi.h
MTK modem配置-- l1_rf
• l1d_custom_mipi.c,一共分四个频段,分别为
GSM850/GSM900/DCS1800/PCS1900
调制解调器(MODEM)介绍
调制解调器(MODEM)介绍 = =一.调制解调器用途:调制解调器经由公共电信网络实现远程通信的重要设备。
主要用来将二进制数字信息转换成可以通过普通公共信息系统传送的模拟信号,或将接收到的模拟信号转换成数字信息。
主要应用场合:1. 连接互联网:连接互联网是应用最多最直接的方式。
在网上,电子邮件是迅速、廉价的通信方式,网上的信息世界更是让人眼花缭乱,所有信息都由一条电话线通过MODEM传送到您眼前。
2. 点对点方式连接:一台本地MODEM与另一台远端MODEM连接,进行数据发送或接收。
连接方式是由一端(呼叫方)拔号,另一端(应答方)应答;连接后两方依靠MODEM连接的电脑互相作为对方的服务器共享资源。
另一种方式可以不拔号,以一根专线电话线直接相接,这就是模拟专线方式。
通过AT 指令,一方在呼叫,另一方自动应答,这样可以省去拔号的电话费。
3.通用终端方式:主机连接一台,终端连接另一台,连接后,终端机就能取得主机资料(用于银行、保险、证券等单位)。
4. 个人用户使用:不仅仅有数据链接平台,还有语音、传真、数字全双工电话等功能。
二、调制解调器硬件原理:调制解调节器器硬件上可分为五部分:DAA部分、DATA PUMP(数据泵)、控制电路、接口电路、电源。
1. DAA部分,我们通常叫拔号部分,由振铃检测、保护电路、摘机检测电路等组成。
2. DATA PUMP(数据泵):对发送接收数据进行处理,完成调制与解调功能。
3. 控制电路:完成数据纠错压缩,基本数据传输协议支持以及响应AT指令等功能。
4. 接口电路:实现数据传输,必须与数据终端设备连接,(如计算机)外置一般通过RS-232串行接口与计算机相连,主机与MODEM之间的DTE速度(从110bit/s-115200bit/s)视MODEM的DCE速度以及线路质量而定,一般DTE速度是DCE速度的两倍。
USB接口提供极高的DTE速度,(如91200bit/S),同时,具有PNP(即插即用)与免去外置电源的优点;内置式 MODEM 与计算机可通过ISA(工业标准体系)和PCI(外部设备互连)槽连接,ISA是16位的扩展总线接口,PCI是32位或64位总线接口,因PCI槽比ISA槽短,PCI总线上的时钟频率要比 ISA总线快得多,传输率高,因此,目前市场上的ISA卡槽越来越少。
[高通项目] [modem] S89536AA1 CMCC N2 hardcoded 配置紧急号码1234
[modem] S89536AA1 CMCC N2 hardcoded 配置紧急号码12341.Qualcomm 三种修改ecc的方式1-1.modem 侧,改nv方式,这种方式1是配置信息少,2是地址有对应关系,不好更新,故一般会拿掉这种方式,拿掉方法:Pbm.c (amss\mpss.ta.2.2\modem_proc\uim\pbm\src)pbm_ecc_init函数,注掉:/*for(slot_index = PBM_SLOT_1_INDEX; slot_index <= PBM_SLOT_3_INDEX; slot_index++) {(void)pbm_init_nv_ecc_per_slot(slot_index);}*/1-2.modem侧,改hardcode方式,就是修改modem测代码的方式,适用于较少ecc的更新,也就是本文要说明的方法,后面做详细说明1-3.ap侧,改database方式,适用于较多ecc的更新,本文暂不讨论,后面专门新帖子做说明2.如何通过hardcoded 配置有卡紧急号码1234Pbm.c (amss\mpss.ta.2.2\modem_proc\uim\pbm\src)pbm_ecc_set_hardcoded_eccs函数,hardcoded_with_uim变量配置有卡,hardcoded_with_no_uim变量配置无卡,我们就在hardcoded_with_uim 中抄一个有卡,配置为1234,如下:{ "1234", 5, FALSE,PBM_EMERGENCY_SERVICE_CAT_LEN,PBM_EMERGENCY_SERVICE_CAT_DEFAULT,EM ERGENCY_GW_1X}说明下,其中参数,依次代表:配置的号码字串,字串长度,是否已经配置,服务台接受长度(一般1个字节),服务器处理策略(一般default),ecc mode(EMERGENCY_GW_1X,就表示2g,3g,电信2g可用)3.配置好后,需要重新编译modem,借用丁亮的一段如下说明:编译Modem: /amss/MPSS.TA.2.2/modem_proc/build/ 执行 ./wt_build_8953.sh p=base c=n2编译adsp: /amss/ 执行 ./build.sh adsp n2打包:/amss/.1.0/ 执行 ./set_path.sh4.编译好后按照如下步骤烧录到手机:cd amss/.1.0/common/build/bin/asicadb reboot bootloaderfastboot devicesfastboot flash modem NON-HLOS.binfastboot reboot5.拨打号码,发现1234变为了紧急呼叫6.qxdm modem log再次印证:6-1.修改前拨打1234,可以看到还是正常呼叫送出去OTA LOG [0x713A/005/036]MM/CM Service Request 08:02:10.632 Direction: MS To Network, Length: 13OTA LOG [0x713A/003/005]CC/Setup 08:02:11.164 Direction: MS To Network, Length: 30OTA LOG [0x713A/003/002]CC/Call Proceeding 08:02:11.300 Direction: Network To MS, Length: 2OTA LOG [0x713A/003/037]CC/Disconnect 08:02:11.890 Direction: Network To MS, Length: 9OTA LOG [0x713A/003/045]CC/Release 08:02:41.891 Direction: Network To MS, Length: 10OTA LOG [0x713A/003/042]CC/Release Complete 08:02:41.893 Direction: MS To Network, Length: 26-2.修改后拨打1234,可以看到是紧急呼叫送出去OTA LOG [0x713A/005/036]MM/CM Service Request 11:42:11.880 Direction: MS To Network, Length: 13OTA LOG [0x713A/005/024]MM/Identity Request 11:42:12.039 Direction: Network To MS, Length: 3OTA LOG [0x713A/005/025]MM/Identity Response 11:42:12.040 Direction: MS To Network, Length: 11OTA LOG [0x713A/005/033]MM/CM Service Accept 11:42:12.099 Direction: Network To MS, Length: 2OTA LOG [0x713A/003/014]CC/Emergency Setup 11:42:12.099 Direction: MS To Network, Length: 21OTA LOG [0x713A/003/002]CC/Call Proceeding 11:42:12.289 Direction: Network To MS, Length: 2OTA LOG [0x713A/003/037]CC/Disconnect 11:42:13.999 Direction: Network To MS, Length: 9OTA LOG [0x713A/003/045]CC/Release 11:42:55.279 Direction: Network To MS, Length: 2OTA LOG [0x713A/003/042]CC/Release Complete 11:42:55.280 Direction: MS To Network, Length: 27.如上,这种方式修改有效。
高通modem代码中的NV读写
高通modem代码中的NV读写NVRAM非易失性随机访问存储器(Non-Volatile Random Access Memory) ,是指断电后仍能保持数据的一种RAM。
在手机中,NVRAM位于flash芯片中。
手机上所谓的NVRAM是一套机制,它的数据部分:默认存在flash的code区,NARAM文件存在文件系统区域(系统盘),电话本数据是以NVRAM文件的形式保存在文件系统区域的(系统盘),SIM卡的电话本就在SIM卡上了,T卡是扩展的flash,都是文件系统区。
(来自于百度百科)这样看来,EFS统一管理着flash芯片,以及扩展flash(sd卡),至于手机的内存,一般是另外的一块单独的RAM,供手机操作系统、应用程序运行时使用,不受EFS管理。
有两种方法设置需要保存的NV值(nv_cmd_type. data_ptr):1.在nv_items.h中找到nv_item_type这个联合体的源代码,把自己需要的数据结构放到这个联合体中;2.不在nv_item_type联合体中添加任何代码,直接使用强制类型转换,将自己的数据结构强制类型转换为nv_item_type。
说明:nv_cmd_type. data_ptr是一个nv_item_type的指针,在做NV 写操作的时候,我们需要传入一个(nv_item_type*)的参数,然后把这个传进来的(nv_item_type*)的参数赋值给nv_cmd_type. data_ptr,这样nv_cmd函数在发送NV_WRITE_F命令的时候,就将需要保存到NV分区中的数据传送给了nv_task,在nv_task正常响应NV_WRITE_F命令后,我们需要的NV值就被保存到NV分区中去了。
对于NV的读操作,nv_cmd_type. data_ptr的值将会赋值给一个(nv_item_type*)类型的出参,这样在nv_task正常响应NV_READ_F 命令后,出参中就保存了从NV分区中读到的NV值了。
高通androidQMI机制
⾼通androidQMI机制⾼通android QMI机制概论Qualcomm MSM Interface,作⽤⽤于AP和BP侧的交互,通俗说法就是让设备终端TE(可以是⼿机,PDA,计算机)对⾼通BP侧的AMSS系统进⾏操作,如调⽤函数,读取数据,设置其中的NV项等。
QMI的核⼼称之为QMI框架(QMI Framework),其主要功能包括以下3点:连接MSM模块和设备终端,提供⼀个正交的控制和数据通道。
在QMI的消息⽤有两种定义,⼀种是QMIControl Message;另⼀种是QMI DataMessage,⽀持这两种消息并发,不会互相⼲扰导致出错。
列举⼀系列的枚举逻辑设备,提供给连接使⽤。
QMI机制类似于⼀个服务器机制,有相应的client端和services端,对应于QMI的control point和service。
在AP向BP发送请求时,AP作为client端,当AP接收BP侧返回的响应时,AP作为services端。
QMI包含了⼀系列的QMI Service,例如nas,voice,wds等,这些不同的services相当于不同逻辑设备,给不同的app调⽤。
QMI有相应的消息和消息的协议,设备终端就是通过这些消息来访问AMSS。
对于不同的qmi消息,消息长度不⼀样,可⾃⼰定义消息长度,不同的qmi消息,消息格式是相同的。
上图是QMIFramework的⼀个软件结构图。
从图中可以看出,上层控制点打包对应类型的QMI消息或通过其他操作系统的框架,将要发出的数据传到AP侧底层的逻辑设备,最后逻辑设备通过内联的总线接⼝,传到BP侧的AMSS。
在代码中可以找到从控制点发送到逻辑设备的函数。
rrno_enum_type qcril_qmi_client_send_msg_sync {qcril_qmi_client_e_type svctype,unsigned long msg id,*void req_c struct,int reg_c_struct_len,void *resp_c_struct,int resp_c_struct_ len}这个是控制点向BP侧发送同步消息的函数,参数包括⾛的QMI_Service类型,Service⾥⾯消息的名称,请求消息的初始地址,长度,返回相应的初始地址和长度。
MODEM常用术语解释
MODEM常用术语解释1.Mo dem(调制解调器):Modul ator/Demodulator(调制器/解调器)的缩写,它是在发送端通过将数字信号转换为模拟信号,而在接收端通过解调再将模拟信号转换为数字信号的一种装置。
2.A Tcommands即A T命令:由Hayes公司发明而为所有调制解调器制造商所使用的一个调制解调器命令语言。
每条命令以字母"A T"开头,后跟字母和数字。
3.Baud(波特):模拟线路信号的速率,也称调制速率,以每秒的振荡数来度量。
如果数据不压缩,波特等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒有时会产生错误。
4.bps:“bitsper second(比特/秒)”的缩略词,表示每秒钟传输数据的位数。
5.class(类):一种传真/调制解调器标准,用于将工作量从调制解调器移交给计算机的硬件和传真软件。
6.Data buffer(数据缓冲器):当数据在具有不同传输能力的元件之间通过时,用来暂存这些数据的存储器。
例如,电话线、计算机和串口、计算机的数据总线等,其传输速度均不相同,缓冲器在每种部件之间平衡数据流,而允许它们以一最合适的速率发送和接收数据。
7.Datac ompression(数据压缩):通过把重复的数据流编码而降低在传输时总的位数,以增大吞吐量的一种方法。
经常使用的数据压缩协议是V.42bis(最好情况下4:1)和MNP(最好情况下2:1)。
8.DCE:“Data co mmunication equi pment(数据通信设备)”字母缩略词,DCE提供建立、保持和终止联接功能,例如,调制解调器。
9.DTE:“Dataterm inalequipment(数据终端设备)”的首字母缩略词。
Modem指令集
Modem 指令集ats0=1 自动应答A 送出ANSWER TONEA/ 重新执行上一个指令。
次指令不加前置码AT 每个指令之前置码BB0=自动扫描速度,及CCITT低速B1=自动扫描速度,及BELL低速D 拨号指令DS 选择拨出内存四组号码EE0=不回应输入字节E1=回应输入字节+++ 由资料模式跳回指令模式HH0=MODEM 执行ON HOOK(一般状态)H1=MODEM 执行OFF HOOK(举起电话动作)II0=显示产品号码I1=显示CHECKSUMI2=内部MEMORY测试I3=显示DEVICE IDI4=显示INTERNAL IDLL1=小音量L2=中音量L3=大音量MM0=喇叭静音M1=喇叭发声至连线M2=喇叭持续发声M3=条件同M1,但拨号时为静音Sr? 读出暂存器r之值(r=0~28)Sr=n 设定暂存器r之值为n。
(r=0~28,n=0~255)P 脉冲拨号T 音频拨号QQ0=执行指令。
回应信息Q1=执行指令。
不回应信息VV0=以数字形式。
回应信息V1=以文字形式。
回应信息XX0=和SMART MODEM 300 相容。
连线仅出现CONNECTX1=连线后会出现连线速率。
X2=连线后会出现连线速率。
并监测DIAL TONE。
X3=连线后会出现连线速率。
并监测BUSY TONE。
X4=连线后会出现连线速率。
并监测DIAL TONE和BUSY TONE。
YY0=断线前。
不送出BREAK信号Y1=断线前。
送出4秒BREAK信号ZZ0=RESET 并重新使用第零组参数表。
Z1=RESET 并重新使用第壹组参数表。
MODEM 延伸指令:指令功能&C&C0=将DCD信号。
一直认定为HIGH&C1=依据远端送来CARRY信号。
实际回应&D&D0=MODEM忽略DTR信号。
&D1=当DTR信号变化。
MODEM跳至指令模式。
&D2=当DTR信号变化。
【MBN简介】
【MBN简介】
MBN概念:mbn是⾼通包含了特定运营商定制的⼀套efs,nv的集成包⽂件。
同样的mbn⽂件会有很多。
每个运营商都会有⼀个特定mbn包含在modem的代码中。
需要使⽤⾼通最新的PDC⼯具load和激活,然后才能切换。
烧录MBN⽂件:mbn⽂件是刷⾼通ril芯⽚的⽂件,需要⽤⾼通的QPST软件烧录,mbn直接是个⽂件,不需要解压,把QPST切换到software download—Multi-image,这个sheet就可以识别mbn⽂件烧录。
具体如如下截图:
1)mcfg_sw.mbn 编译⽣成SW_DEFAULT
2)mcfg_hw.mbn 编译⽣成HW_DEFAULT
3)MCFG 框架的⽬标是启⽤单个⼆进制映像,以与可以⽀持多个软件/硬件配置的配置数据/映像配对。
此⽬标主要是通过使⽤
mcfg_hw.mbn 和 mcfg_sw.mbn ⽂件完成。
4)各个运营商的MBN:
Commercial-CSFB-SS-CU 联通
Commercial-CSFB-SS-CMCC 移动
Commercial-SRLTE-SS-CT 电信
5)ROW_Generic_3GPP 由3GPP的XML⽂件编译⽽来,⽤来兼容国外运营商。
modem芯片
modem芯片Modem是一种用于传输和接收数字信息的设备,它可以将数字信号转化为模拟信号以便通过电话线路传输。
Modem芯片是用于实现Modem功能的集成电路芯片。
Modem芯片通常由多个功能模块组成,包括调制解调器、数字信号处理器、数据编码解码器等。
调制解调器是Modem芯片的核心部分,它负责将数字信号转化为模拟信号以便通过电话线路传输,同时还可以将接收到的模拟信号转化为数字信号。
数字信号处理器可以对数字信号进行处理和优化,以提高数据传输的速度和可靠性。
数据编码解码器则负责将数据进行编码和解码,以确保数据传输的准确性和完整性。
Modem芯片的工作原理如下:首先,调制解调器将数字信号转化为模拟信号,并通过电话线路将其发送出去。
接收端的Modem将接收到的模拟信号转化为数字信号,并交给数字信号处理器进行处理和优化。
然后,数据编码解码器对数据进行编码和解码,以确保数据的准确传输。
最后,Modem芯片将解码后的数据再转化为数字信号,并传递给计算机或其他设备。
Modem芯片在现代通信中起到了非常重要的作用。
它可以实现高速、可靠的数据传输,并可以与各种通信设备进行连接,如计算机、路由器、调制解调器等。
Modem芯片具有较低的功耗和尺寸,很适合于无线通信和移动设备。
此外,Modem芯片还支持多种通信标准和协议,如DSL、LTE、WiFi等,可以适应不同环境和需求。
总之,Modem芯片是一种实现Modem功能的集成电路芯片,能够实现数字信号到模拟信号的转换和数据传输的功能。
它在现代通信中扮演着重要角色,能够提供高速、可靠的数据传输,并适应不同的通信环境和需求。
Modem芯片的发展将继续推动通信技术的进步和创新。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NVRAM非易失性随机访问存储器(Non-Volatile Random Access Memory) ,是指断电后仍能保持数据的一种RAM。
在手机中,NVRAM位于flash芯片中。
手机上所谓的NVRAM是一套机制,它的数据部分:默认存在flash的code区,NARAM文件存在文件系统区域(系统盘),电话本数据是以NVRAM文件的形式保存在文件系统区域的(系统盘),SIM卡的电话本就在SIM卡上了,T卡是扩展的flash,都是文件系统区。
(来自于百度百科)
这样看来,EFS统一管理着flash芯片,以及扩展flash(sd卡),至于手机的内存,一般是另外的一块单独的RAM,供手机操作系统、应用程序运行时使用,不受EFS管理。
有两种方法设置需要保存的NV值(nv_cmd_type. data_ptr):
1.在nv_items.h中找到nv_item_type这个联合体的源代码,把自己需要的数据结构放到
这个联合体中;
2.不在nv_item_type联合体中添加任何代码,直接使用强制类型转换,将自己的数据结
构强制类型转换为nv_item_type。
说明:
nv_cmd_type. data_ptr是一个nv_item_type的指针,在做NV写操作的时候,我们需要传入一个(nv_item_type*)的参数,然后把这个传进来的(nv_item_type*)的参数赋值给nv_cmd_type. data_ptr,这样nv_cmd函数在发送NV_WRITE_F命令的时候,就将需要保存到NV分区中的数据传送给了nv_task,在nv_task正常响应NV_WRITE_F命令后,我们需要的NV值就被保存到NV分区中去了。
对于NV的读操作,nv_cmd_type. data_ptr的值将会赋值给一个(nv_item_type*)类型的出参,这样在nv_task正常响应NV_READ_F命令后,出参中就保存了从NV分区中读到的NV值了。
高通提供了如下的函数读写NV:
diag_nv_read
diag_nv_write
tmcnv_read
tmcnv_write
dcc_get_nv_item
dcc_put_nv_item
dsatutil_get_nv_item
dsatutil_put_nv_item
nvio_read(对于文件性质的NV的读写)
nvio_write
等等。
在高通平台中,要读写NV,只需要做如下两个步骤:
1.在nv_items.h中添加一个NV项
2.自己写两个函数,分别实现对NV的读写操作(也可以使用高通已经写好的读写函数)
自己实现NV的读写函数的具体实现思路如下:
统一使用nv_cmd函数,往nv_task发送读写命令;
用户可以定义一个nv_cmd_type结构体变量,假定变量名为NVcmd,
设置如下的六个值:
NVcmd.sigs---高通平台用于区分不同task的不同消息一个标志位
NVcmd.tcb_ptr---消息发送完成后,被通知的task的指针
NVcmd.done_q_ptr---消息发送完成后,该消息继续传递到哪个队列中
NVcmd.cmd---读、写等命令,分别设置成NV_READ_F、NV_WRITE_F
NVcmd.data_ptr---需要往nv中写入的数据的值
NVcmd.item---添加在nv_items.h中的NV项
其中,NVcmd.sigs、NVcmd.tcb_ptr、NVcmd.done_q_ptr的不同设置,会导致该NV读写函数属于不同的task。
至此,明白高通为什么不写一个通用的NV读写函数了。