上海域格 cat1模块系列openCPU接口及相关问题
CLM920_RC3(RV3 RE3) 、CLM920_RC5(RV5 RE5)、RD6、CLM920_RV7、CLM920_RV8、YV9、KV3模块调试openCPU一些相关接口和常遇到的问题。
1、SDK相关接口
RC3强制关机接口: extern void OnKeyPoweroff_Start(void);
file数据读写: extern void nvm_cache_flush_all(void);
写完文件执行下这个接口,执行后等待2s再重启(ASR建议)
SDK ADC接口:
查询剩余空间大小接口: unsigned int FDI_GetFreeSpaceSize(void)
升级的时候,NVM勾选去掉,既不会擦除
临时屏蔽IO中断和屏蔽全局中断的API:
UINT32 cpsr;
cpsr = disableInterrupts();
//code
restoreInterrupts(cpsr);
重启和关机的接口:
关机:OnKeyPoweroff_Start(),重启:PM812_SW_RESET();
延迟接口:
通信需要1MS的阻塞,OSATaskSleep((x)) ,这个函数最小阻塞延时是1个TICKS, 也就是5ms
模块的MAC码能获取接口: UINT8 *mvUsbNetGetMacAddress(void)
SIM卡流量接口:
流量这块只能暂时获取档次开下状态下消耗的流量,,可以让客户试试这两个接口
unsigned long long get_rx_byte(void)
unsigned long long get_tx_byte(void)
检测系统内存使用状态的接口:
UINT32 OsaGetDefaultMemPoolFreeSize(void)
2、openCPU常见问题
SSP_SPI_MODE3,SPI空闲是高电平 第二个边沿有效,还有一个参数是第一位是最高位还是最低位
——这个是高位在前,第一位是最高位
两个IO中断,需要存储些数据这个要怎么做
——xtern UINT32 getGPIOPinmuxAddress(UINT32 GPIONum)
获取GPS的寄存器地址的:
UINT32 getGPIOPinmuxAddress(UINT32 GPIONum)
{
UINT32 GPIOPinmuxAddr = 0;
if(GPIONum <= 36)
GPIOPinmuxAddr = 0xd401e0dc + GPIONum*4;
else if(GPIONum >= 49 && GPIONum <= 54)
GPIOPinmuxAddr = 0xd401e1a0 + (GPIONum - 49)*4;
else if(GPIONum >= 60 && GPIONum <= 66)
GPIOPinmuxAddr = 0xd401e304 + (GPIONum - 60)*4;
else if(GPIONum >= 71 && GPIONum <= 86)
GPIOPinmuxAddr = 0xd401e1b8 + (GPIONum - 71)*4;
else
ASSERT(0);
return GPIOPinmuxAddr;
}
cat1open如何从SDK里获取IMEI 、ICCID、LBS数据,有函数接口可以用吗,比如 IMEIRead
——有个内部使用at的demo
调用 SilentResetDisable(); 在那个函数里调用?
——Phase2Inits_exit 开头就可以
用开发板调试的时候用的PCM输出语音,现在板子硬件没有加音频解码芯片,直接使用差分音频口输出,问一下这里程序怎么调用我们的API
——参考参考设计加一路功放才可以
i2c可以做普通io来用吗?
——i2c做普通io来用需要特殊版本
open不插SD卡情况下,如何创建一个文件进行读写:
参考这里:
amr录音文件固定时长
——接口里没有时间参数,只能用定时器去停止录音
OnKeyPoweroff_Start这个头文件是哪个
——没头文件,引用下就好 void OnKeyPoweroff_Start(void);
enable sys sleep设置休眠流程:
1、休眠中
2、数据唤醒后
3、disable sys sleep
4、唤醒后,程序需要处理的任务,比如发送数据
5、enable sys sleep
SendATCMDWaitResp参数说明:
sATPInd:AT执行通道,不需要管,默认使用TEL_AT_CMD_ATP_10,使用esim(TEL_AT_CMD_ATP_10+36),双卡使用详见sdk中sample中29-dualsim
inStr:AT指令字符串
timeOut:超时时间,单位s
okFmt:注意的参数,这里一般时判断是判断AT返回时,OK之前的正常上报数据,但是不要填写"OK",会和okFlag冲突造成异常,比如如下三个AT
AT^SYSINFO
^SYSINFO: 0,0,0,0,255
OK
SendATCMDWaitResp(TEL_AT_CMD_ATP_10, “AT^SYSINFO\r\n”, 3, “^SYSINFO:”, 1, NULL, resp_str, sizeof(resp_str));
也可以不关注okFmt, resp_str中解析判断即可
SendATCMDWaitResp(TEL_AT_CMD_ATP_10, “AT^SYSINFO\r\n”, 3, NULL, 1, NULL, resp_str, sizeof(resp_str));
AT+CGSN
123456789012347
OK
SendATCMDWaitResp(TEL_AT_CMD_ATP_10, “AT+CGSN\r\n”, 3, NULL, 1, NULL, resp_str, sizeof(resp_str));
AT+CMGF=1
OK
SendATCMDWaitResp(TEL_AT_CMD_ATP_10, “AT+CMGF=1\r\n”, 3, NULL, 1, NULL, resp_str, sizeof(resp_str));
okFlag:正常都是1,即表示捕捉OK作为AT的成功返回标志
errFmt:一般填写"ERROR",或者更准确的错误信息,判断到错误返回会在timeout之前结束AT
outStr:AT返回的结果,如"^SYSINFO: 0,0,0,0,255"
outLen: sizeof(outStr)
*/
int SendATCMDWaitResp(int sATPInd, char *inStr, int timeOut, char *okFmt, int okFlag, char *errFmt, char *outStr, int outLen);
检测系统内存使用状态的接口:UINT32 OsaGetDefaultMemPoolFreeSize(void)
后续会添加,请看下一篇文章。