我想修改Beacon示例以从OTP NVDS中拉动主要值和次要值。
OTP NVDS将在生产过程中使用不同的值(BD地址,主要的,次要的)作为不同的序列号。
我需要在nvds_data_struct中添加一个字段来定义主字段和次要字段吗?即。
struct nvds_data_struct {
uint32_t NVDS_VALIDATION_FLAG;//定义哪些字段是有效的
// 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;//默认通道重估定时器持续时间
//默认的RSSI最小阈值
uint8_t NVDS_TAG_BLE_CA_NB_PKT;//接收统计报文的缺省数量
uint8_t NVDS_TAG_BLE_CA_NB_BAD_PKT;//移除通道所需的缺省坏包数
uint16_t NVDS_TAG_MAJOR;//主广告数据
UINT16_T 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, //发送功率
.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; 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, //发送功率
.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读取您的自定义特定字段。
问候,
最迟报