我想修改信标示例,从OTP NVDS中提取主要值和次要值。
在生产过程中,OTP NVDS将使用不同的值进行编程(BD地址,主要,次要),以充当各种序列号。
我是否需要在nvds_data_struct中添加一个字段来定义主要和次要字段?即。
struct nvds_data_struct {
uint32_t NVDS_VALIDATION_FLAG;//定义哪些字段有效
uint32_t NVDS_TAG_UART_BAUDRATE;// UART波特率
uint32_t NVDS_TAG_DIAG_SW;/ / Diagport配置
uint32_t NVDS_TAG_DIAG_BLE_HW;/ / Diagport配置
uint16_t NVDS_TAG_NEB_ID;// Neb会话ID
uint16_t NVDS_TAG_LPCLK_DRIFT;//低功率时钟度数
uint8_t NVDS_TAG_SLEEP_ENABLE;//开启睡眠模式
uint8_t NVDS_TAG_EXT_WAKEUP_ENABLE;/ /外部唤醒启用
uint8_t NVDS_TAG_SECURITY_ENABLE;//启用BLE应用程序的安全性
uint8_t ADV_DATA_TAG_LEN;//发布数据大小
uint8_t SCAN_RESP_DATA_TAG_LEN;//扫描响应数据大小
uint8_t DEVICE_NAME_TAG_LEN;//设备名称大小
uint8_t NVDS_TAG_APP_BLE_ADV_DATA [32];/ /广告数据
uint8_t NVDS_TAG_APP_BLE_SCAN_RESP_DATA [32];//扫描响应数据
uint8_t NVDS_TAG_DEVICE_NAME [62];/ /设备名称
uint8_t NVDS_TAG_BD_ADDRESS [6];//设备蓝牙地址
uint16_t NVDS_TAG_BLE_CA_TIMER_DUR;//默认通道评估定时器持续时间
uint8_t NVDS_TAG_BLE_CRA_TIMER_DUR;//默认通道重估定时器持续时间
NVDS_TAG_BLE_CA_MIN_RSSI;//默认最小RSSI阈值
uint8_t NVDS_TAG_BLE_CA_NB_PKT;//接收统计的默认数据包数
uint8_t NVDS_TAG_BLE_CA_NB_BAD_PKT;//移除通道时默认的坏包数
NVDS_TAG_MAJOR;//主要广告数据
NVDS_TAG_MINOR;//次要发布数据
};
然后在代码的初始化部分:
Const struct user_beacon_config_tag user_default_beacon_config = {
.uuid = {0xC3, 0x8B, 0x2D, 0x50, 0xBE, 0xE8, 0xCE, 0x52, 0x14, 0xA6, //10字节命名空间
0xF3, 0xA7, 0xC6, 0x99, 0x2F, 0x0B},//6字节实例
.major_ALT_val1 = NVDS_TAG_MAJOR, //Major值
.minor_ALT_val2 = NVDS_TAG_MINOR, //次要值
.亚博全网company_id = APPLE_COMP_ID, //Beacon公司ID
.adv_int = BEACON_ADVERTISING_INTERVAL, //发布间隔
.power = 0xC5, //Tx Power
.beacon_type = DEFAULT_BEACON_TYPE,
.url_prefix = HTTPWWW,
.url = {0 x0e,‘d’,‘我’,‘‘,‘s’,‘e’,‘米’,‘我’,互联网},
.TLM_version = 0 x00,
.TLM_used = 0 x01
};
因为我们需要在OTP上测试这个,因为它是一次性可编程的,所以很难在不浪费很多零件的情况下进行试验和错误。
谢谢你的帮助!
你好,
在OTP中添加私有参数的方法不能保证有效。您可以将参数直接存储在可用的OTP地址中,并直接从该地址读取参数。
问候,
yhe_Dialog
你好,
所以我可以创建一个指向NVDS地址的指针,例如:
Uint16_t *nvds_tag_major = 0x20000360;//主要广告数据指针
Uint16_t *nvds_tag_minor = 0x20000364;//次要广告数据指针
Const struct user_beacon_config_tag user_default_beacon_config = {
.uuid = {0xC3, 0x8B, 0x2D, 0x50, 0xBE, 0xE8, 0xCE, 0x52, 0x14, 0xA6, //10字节命名空间
0xF3, 0xA7, 0xC6, 0x99, 0x2F, 0x0B},//6字节实例
.major_ALT_val1 = nvds_tag_major, //Major值
.minor_ALT_val2 = nvds_tag_minor, //次要值
.亚博全网company_id = APPLE_COMP_ID, //Beacon公司ID
.adv_int = BEACON_ADVERTISING_INTERVAL, //发布间隔
.power = 0xC5, //Tx Power
.beacon_type = DEFAULT_BEACON_TYPE,
.url_prefix = HTTPWWW,
.url = {0 x0e,‘d’,‘我’,‘‘,‘s’,‘e’,‘米’,‘我’,互联网},
.TLM_version = 0 x00,
.TLM_used = 0 x01
};
然后使用PLT将数据写入NVDS位置?
什么是推荐的方法来生成一个顺序数字被编程到那个NVDS存储器位置?是否有一个脚本在PLT工具来实现这一点?
感谢您一直以来的支持!
你好,
不建议修改OTP NVDS。在PLT中,有一种方法将客户特定的字段刻入OTP报头中。检查UM-B-041第7.2.8节。
在您的固件中,您可以从正确的OTP字段读取并应用它。
问候,
最迟报
谢谢你最迟报,
最后一个问题如果你能在我在文档中找到答案。OTP客户字段的内存地址是多少,这样我就可以分配MAJOR = &0xXXXX和MINOR = &0xXXXX ?
感谢您的及时支持!
我想我找到了信息:自定义特定字段是在字地址0x7F54到0x7F60。如果这些地址被镜像到RAM上,这是否意味着变量可以在RAM地址:0x20007F54到0x20007F60中找到?
谢谢你!
dlo
你好,
我不认为OTP头将镜像到RAM。在你的固件中,你需要直接从OTP读取你的自定义特定字段。
问候,
最迟报