互芯平台 建立软件开发环境 和其他的简明介绍 - 图文(9)

2019-08-30 22:12

}

#endif // TGT_MCD_CONFIG #endif

#ifdef TGT_WITH_MCD_IF_sdmmc #ifndef TGT_MCD_CONFIG

#define TGT_MCD_CONFIG \\ { \\ .cardDetectGpio = HAL_GPIO_NONE, \\ .gpioCardDetectHigh = TRUE, \\ .dat3HasPullDown = FALSE \\ }

#endif // TGT_MCD_CONFIG #endif

SDMMC有两种控制方式,一种是通过SPI,一种是通过专门的SDMMC接口,目前一般使用SDMMC接口的方式。如果支持热拔插,需要配置.cardDetectGpio为某个GPIO(0-7)作为中断检测口。 4.2.19、TSD

#define TGT_TSD_CONFIG \\ { \\ .penGpio = HAL_GPIO_0, \\ .debounceTime = 5*HAL_TICK1S/1000, \\ .downPeriod = 3, \\ .upPeriod = 3, \\ .maxError = 0x50 \\

}

pmic集成了触摸ic,如果启用触摸屏功能,需要在target.def里定义TSD_MODEL ?= rda1203_gallite

.penGpio:芯片内部固定接到GPIO_0上,所以不能改;

.debounceTime:debounce时间,越大越准确,但是灵敏度和反应时间降低。建议用默认值; .downPeriod和.upPeriod:多少个debounceTime之后开始pendown/penup取数; .maxError:同一点上两次采样的最大差异。 4.2.20、FM

#ifdef TGT_WITH_FM_MODEL_rda5802e_gallite #ifndef TGT_FMD_CONFIG

#define TGT_FMD_CONFIG \\ { \\ .powerOnTime = 16384, \\ .channelSpacing = FMD_CHANNEL_SPACE_100, \\ .seekRSSIThreshold = 0x10 \\ }

#endif // TGT_FMD_CONFIG

#endif // TGT_WITH_FM_MODEL_rda5802e_gallite

#ifdef TGT_WITH_FM_MODEL_rda5802na #ifndef TGT_FMD_CONFIG

#define TGT_FMD_CONFIG \\ { \\ .i2cBusId = HAL_I2C_BUS_ID_2, \\

.i2cBps = HAL_I2C_BPS_100K, \\ .powerOnTime = 1600, \\ .volumeVal = {0,0x7,0x10,0x12,0x15,0x1b,0x1e,0x25}, \\

.channelSpacing = FMD_CHANNEL_SPACE_100, .seekRSSIThreshold = 0x05, }

#endif // TGT_FMD_CONFIG #endif

#ifdef TGT_WITH_FM_MODEL_rda5888e #ifndef TGT_FMD_CONFIG

#define TGT_FMD_CONFIG { .i2cBps = HAL_I2C_BPS_100K, .powerOnTime = 1600, .volumeVal = {0,0x7,0x10,0x12,0x15,0x1b,0x1e,0x25}, .channelSpacing = FMD_CHANNEL_SPACE_100, .seekRSSIThreshold = 0x05, .pinPdn = { .gpioId = HAL_GPIO_NONE } }

#endif // TGT_FMD_CONFIG #endif

#ifdef TGT_WITH_FM_MODEL_rda5888h #ifndef TGT_FMD_CONFIG

#define TGT_FMD_CONFIG { .i2cBps = HAL_I2C_BPS_100K, .powerOnTime = 1600, .volumeVal = {0,0x7,0x10,0x12,0x15,0x1b,0x1e,0x25}, .channelSpacing = FMD_CHANNEL_SPACE_100, .seekRSSIThreshold = 0x05, .pinPdn = { .gpioId = HAL_GPIO_NONE } }

#endif // TGT_FMD_CONFIG #endif

根据target.def里面配置的不同,会选用不同的fm配置。一般不必修改。 4.2.21、GPIO模拟I2C

#ifndef TGT_GPIOI2C_CONFIG

#define TGT_GPIOI2C_CONFIG \\ \\ \\ \\

\\ \\ \\

\\ \\ \\ \\ \\

\\ \\ \\

\\ \\ \\ \\

{ \\ .i2c_gpio_Bps = GPIO_I2C_BPS_80K , \\ .scl_i2c_gpio = HAL_GPIO_25 , \\ .scl_i2c_gpo = HAL_GPO_NONE , \\ .sda_i2c = HAL_GPIO_24 \\ }

#endif // TGT_GPIOI2C_CONFIG . i2c_gpio_Bps:波特率设置

. scl_i2c_gpio:SCL的GPIO设置;

. scl_i2c_gpo:SCL的GPO设置,和. scl_i2c_gpio二选一即可; . sda_i2c:SDA的GPIO设置 4.2.22、BT

#define TGT_BTD_CONFIG \\ { \\ .i2cBusId = HAL_I2C_BUS_ID_2, \\ .pinReset = { .gpoId = HAL_GPIO_9 }, \\ .pinWakeUp = { .gpioId = HAL_GPIO_NONE }, \\ .pinSleep = { .gpioId = HAL_GPIO_1 } \\ }

.i2cBusId:选用哪组I2C;

.pinReset:基带的哪个IO控制BT的reset脚; .pinWakeUp:不用了,配成HAL_GPIO_NONE;

.pinSleep:BT通过这个脚唤醒基带,所以要配成GPIO0-8之间的可中断脚。 4.3、tgt_app_cfg.h详细描述

4.3.1、该文件配置用户数据区。用户数据区是用来存储 NVRAM、系统参数、WAP/MMS、短消息、电话本和用户数据(机身内存)的。我们通常会被告知客户要求支持 500 条短信或者更多,支持的越多需要在用户数据区内分配给SMS的空间就越大,当然同时还会占用一部分 RAM。下面是一个例子:

#define TGT_DSM_PART_CONFIG \\ { \\ { \\ .szPartName = \ \\

.eDevType = DSM_MEM_DEV_FLASH, \\ .eCheckLevel = DSM_CHECK_LEVEL_1, \\ .uSecCnt = 35, \\ .uRsvBlkCnt = 1, \\

.eModuleId = DSM_MODULE_FS_ROOT \\ }, \\ { \\ .szPartName = \ \\

.eDevType = DSM_MEM_DEV_FLASH, \\ .eCheckLevel = DSM_CHECK_LEVEL_1, \\ .uSecCnt = 5, \\ .uRsvBlkCnt = 1, \\

.eModuleId = DSM_MODULE_FS \\

}, \\ { \\

.szPartName = \ \\ .eDevType = DSM_MEM_DEV_FLASH, \\ .eCheckLevel = DSM_CHECK_LEVEL_3, \\ .uSecCnt = 43, \\ .uRsvBlkCnt = 2, \\

.eModuleId = DSM_MODULE_FS \\ }, \\ { \\ .szPartName = \ \\

.eDevType = DSM_MEM_DEV_FLASH, \\ .eCheckLevel = DSM_CHECK_LEVEL_1, \\ .uSecCnt = 15, \\ .uRsvBlkCnt = 1, \\

.eModuleId = DSM_MODULE_CSW \\ }, \\ { \\ .szPartName = \ \\

.eDevType = DSM_MEM_DEV_TFLASH, \\ .eCheckLevel = DSM_CHECK_LEVEL_3, \\ .uSecCnt = 0, \\ .uRsvBlkCnt = 0, \\

.eModuleId = DSM_MODULE_FS \\ } \\ }

带WAP/MMS的单T卡项目一般有5个分区,不带WAP/MMS的单T卡项目一般有4个分区,对于双T卡项目再加多一个分区,如下:

{ \\ .szPartName = \ \\

.eDevType = DSM_MEM_DEV_TFLASH, \\ .eCheckLevel = DSM_CHECK_LEVEL_3, \\ .uSecCnt = 0, \\ .uRsvBlkCnt = 0, \\

.eModuleId = DSM_MODULE_FS \\ }

每个分区的存储一般如下约定:

VDS0:这个是根分区,其它的分区都mount到VDS0。VDS0本身存储NV数据(包括电话簿,因为电话簿本身就是以NV方式存储的)。VDS0的容量可以如下估算(以3216项目为例):

logical_data_item_table_cust 70K logical_data_item_table_custpack 25K

NVRAM_UNIT 除电话本部分是 35.5K

电话本:NVRAM_PHB_NVRAM_LID(名字+号码) 电话本条目数 × sizeof(CFW_PBK_ENTRY_INFO)(78字节) 取整到512字节倍数

NVRAM_EF_PHB_SOMEFIELDS_LID(家庭号码??) 电话本条目数 × OPTIONAL_FIELDS_RECORD_SIZE (229字节)取整到512字节倍数 取整到512字节倍数

按照250个本机电话本来计算如下:

250*78=19500 取整到512字节倍数 19968 19.5K 250*229=57250取整到512字节倍数 57344 56K 电话本共需要19.5K +56K =75.5K

VDS0共需要70K +25K +35.5K +75.5K =206K。如果NVRAM_EF_PHB_SOMEFIELDS_LID是使用部分域,则VDS0需要的空间可以更小。保险起见,建议多增加30%的大小。

VDS1:用户数据区,就是在手机的filemgr里看到的分区。大小要根据项目需求来定义,如果打开了qq,则尽可能增加该分区的大小。 WAP_MMS:存储WAP/MMS的数据。

CSW:存储短消息和注册表数据。由于注册表数据不大,所以一个比较粗略的计算方式是,该分区大小正比与短消息容量。

MMC0/1:T卡的映射,不占用用户数据区。

现在知道了分区的存储容量,比如VDS0是206K,如何计算其.uSecCnt呢?这里有两个经验公式:

公式1:BlkCnt = (SecSz*SecCnt)/528 - RsvBlkCnt - 1

公式2:DataSz = (SecSz*SecCnt/528 - RsvBlkCnt - 38 - 1)*512 其中

BlkCnt:Block数目,Block是一个逻辑存储单位,大小是512字节。 DataSz:分区可存储的数据大小,注意它并不等于分区分配的物理空间大小(SecSz*SecCnt),因为FAT文件系统和VDS的扇区管理都需要空间。

SecSz:sector的大小,这个是flash本身决定的,现在的spi flash一般都是4K。 SecCnt:分区分配的sector的数目,也就是.uSecCnt。

RsvBlkCnt:分区分配的保留block的数目,保留的block越多,存储和访问的速度就越快,但是占用额外的空间也越多。 还有几个约束:

1)分区总数(包括T-Flash分区在内)不能大于8;

2)各个分区的SecCnt之和再加1不能大于flash用户区的sector_number(用户区的sector number在该项目用到的memd.def中)。

3)每个Flash分区划分必须符合如下最低要求:secCnt >=1 && RsvBlkCnt >= 1; 4)有且只有一个根目录分区,DataSz > 100KByte;

5)必须有一个CSW分区,SecCnt >=1(SecSz >= 64KByte的情况下); 6)可以有零个或多个普通文件系统分区;

7)分区名称最长不能超过15字节且必须由如下ASCII字符组成:

根据这些约束和公式2,可以算出某个存储容量需要多少物理sector。保险起见,建议多增加30%。

4.3.2、该文件还定义了CSW和MMI用到的heap大小,例如:

#define TGT_CSW_CONFIG \\ { \\


互芯平台 建立软件开发环境 和其他的简明介绍 - 图文(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第十五章控制技术 练习题十五

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: