2

我正在使用 STM32L4xx 和Sara R410m u-blox 调制解调器通过 UART 接口开发定制设备。固件是用 C 语言编写的。有一个额外的 USB 端口,因此在使用 GPIO 引脚启用调制解调器后,可以通过 u-blox m-center 向调制解调器发送具有更多图形界面的 AT-Command。驱动程序本身不是问题。

根据设备的经验,在调试上下文中重新刷新新固件后会出现一些奇怪的副作用(即使设备和调制解调器处于活动状态,配置失败等也会超时......所有这些都可能是由其他错误引起的/parameters,我知道,但回到正题)。项目管理设置了一个新条件/功能,即固件在使用 GPIO 开启设备后,必须在写入新参数之前清除非易失性存储器

我已经在数据表第 381 页中找到了将其值存储在非易失性存储器中的命令列表: https://www.u-blox.com/sites/default/files/SARA-R4_ATCommands_%28UBX-17003787%29。 pdf

我正在阅读数据表大约一个星期,但找不到清除非易失性内存或将出厂设置写入其中的解决方案。

也许你们可以帮助我或有建议?

编辑:尝试 AT&F0 或 ATZ 删除配置文件,查看日志文件内容:

[15:05:21.268] rx: AT&V
[15:05:21.268] tx: AT&V
[15:05:21.283] tx:
[15:05:21.283] tx: ACTIVE PROFILE: &C: 1; &D: 1; &F: e; Q: e; V: 1; X: 1; Z: e; &S: 1; 
[15:05:21.283] tx: &W: 0; \Q: 3; E: 1; L: 0; M: 0; &Y: 0; 0: 0; 50: 0; 54: 10; 55: 8; 56: 2; 
[15:05:21.283] tx: S7: 0; 58: 2; 510: 14; S3: 13; S2: 43; 512: 50; +ICE: 3,1; +IFC: 2,2; 
[15:05:21.283] tx: +IPR: 115200; +CMEE: 2; +W546: 12; +CFUN:; +UAUTHREQ: 1,0,-; +CEREG: 0; 
[15:05:21.283] tx: +CEMODE: 0; +CSCS: "IRA"; +CRC: 0;
[15:05:21.283] tx: +CGDCONT: (1,"IP","iot.lnce.net","0.0.0.0",0,0,0,0); +CGDSCONT: ; 
[15:05:21.283] tx: +CGEREP: 0,0; +CGSMS: 1; +CSMS: 0; +CMGF: 0; +CSAS: 0; +GRES: 0; 
[15:05:21.283] tx: +CSCA: "",; +CSMP: „0,0; +CREG: 0; +CGREG: 0; +CGPIAF: 0,0,0,0; 
[15:05:21.283] tx: +CSDH: 0; +CPIN: ,; +CMER: 0,0,0,0,0; +CPMS: "ME","ME","ME";
[15:05:21.283] tx: +CNMI: 0,0,0,0,0; +CMMS: 0; +COPS: 0,0,""; +CGATT: 1; +CGACT(1,1); 
[15:05:21.283] tx: +CPOL: 0,2,-,0,0,0,0; +CPLS: 0; +CTZR: 0; +CTZU: 0; +CSDF: 1; +CUSD: 0; 
[15:05:21.283] tx: +CIND: 5,1,1,0,0,1,1,0,1,0,0,0; +CPSMS: 0,"","","",""; +CEDRXS: 0,1,""; 
[15:05:21.283] tx: +URAT: 0,0; +UMNOPROF: 0; +UPSV: 0,0
[15:05:21.283] tx:
[15:05:21.283] tx: OK
[15:05:26.776] rx: AT&F8
[15:05:26.778] tx: AT&F8
[15:05:26.778] tx:
[15:05:26.778] tx: OK
[15:05:32.146] rx: AT&V
[15:05:32.152] tx: AT&V
[15:05:32.168] tx:
[15:05:32.168] tx: ACTIVE PROFILE: &C: 1; &D: 1; &F: 0; Q: e; V: 1; X: 1; Z: 0; &S: 1; 
[15:05:32.168] tx: &W: 0; \Q: 3; E: 1; L: 0; M: 0; &Y: e; 0: e; 50: e; S4: 10; S5: 8; S6: 2; 
[15:05:32.168] tx: S7: 0; S8: 2; 510: 14; S3: 13; S2: 43; 512: 50; +ICE: 3,1; +IFC: 2,2; 
[15:05:32.168] tx: +IPR: 115200; +CMEE: 2; +W546: 12; +CFUN:; +UAUTHREQ: 1,0,-; +CEREG: 0; 
[15:05:32.168] tx: +CEMODE: 0; +CSCS: "IRA"; +CRC: 0;
[15:05:32.168] tx: +CGDCONT: (1,"IP","iot.lnce.net","0.0.0.0",0,0,0,0); +CGDSCONT: ; 
[15:05:32.168] tx: +CGEREP: 0,0; +CGSMS: 1; +CSMS: 0; +CMGF: 0; +CSAS: 0; +GRES: 0; 
[15:05:32.168] tx: +CSCA: "",; +CSMP: „0,0; +CREG: 0; +CGREG: 0; +CGPIAF: 0,0,0,0; 
[15:05:32.168] tx: +CSDH: 0; +CPIN: ,; +CMER: 0,0,0,0,0; +CPMS: "ME","ME","ME";
[15:05:32.168] tx: +CNMI: 0,0,0,0,0; +CMMS: 0; +COPS: 0,0,-; +CGATT: 1; +CGACT(1,1); 
[15:05:32.168] tx: +CPOL: 0,2,-,0,0,0,0; +CPLS: 0; +CTZR: 0; +CTZU: 0; +CSDF: 1; +CUSD: 0; 
[15:05:32.168] tx: +CIND: 5,1,1,0,0,1,1,0,1,0,0,0; +CPSMS: 0,"","","",""; +CEDRXS: 0,1,-; 
[15:05:32.168] tx: +URAT: 0,0; +UMNOPROF: 0; +UPSV: 0,0
4

1 回答 1

1

正如您正确注意到的那样,AT&F0这不是您要查找的内容,因为它会将属于配置文件 0 的参数重置为默认值。NVM 参数属于不同的集合:实际上,它们在硬件重置时本机持久,无需提供任何进一步的命令。相反,配置文件参数需要AT&W0命令将当前配置保存在配置文件 0 中,并AT&P0在启动时将其设置为默认配置文件。

一些 uBlox 产品,例如Sara N2-N3,有一个特定的 AT 命令来重置 NVM 参数区域:AT+UFACTORY

句法:
AT+UFACTORY=<fs_op>,<nvm_op>

其中:
<fs_op>是对 FS 执行的操作(0:不恢复;1:FS 闪存扇区已擦除,2:存储在 FS 中的所有文件都已删除)

<nvm_op>是对 NVM 参数执行的操作(0:不恢复;1:NVM 闪存扇区已擦除,2:保留)

所以你会得到你需要的发行

AT+UFACTORY=0,1

不幸的是,Sara-R4 模块目前似乎不支持此命令。出于这个原因,我只能建议一个解决方法。这是策略:

  • 分析您在应用程序中更改的所有 NVM 参数
  • 定义一个字符串数组,其中包含要恢复的所有默认值
  • 循环发送相应命令的数组的所有元素,以便恢复所有可能更改的参数

就像是

#define MAX_CMD_SIZE 50

static char DefaultNVMPars[][MAX_CMD_SIZE] = 
{
    "AT+IPR=115200", //baudrate
    "ATE0"           //echo enabled
};

void SendATCommand(char *cmd); // a function that sends to AT port the string in input, appending '\r'

void ResetNVMPars(void)
{
    int i;

    for(i=0; i<(sizeof(DefaultNVMPars)/sizeof(DefaultNVMPars[0]); i++)
    {
        SendATCommand(DefaultNVMPars[i]);
    }
}

当然这样,为了DefaultNVMPars限制大小,你必须限制它,并注意你在应用程序中使用的任何新命令。另一方面,您可以使用在 NVM 中存储参数的所有命令进行填充,但在这种情况下,数组的大小可能会变得非常显着。

于 2021-02-02T11:40:48.267 回答