我想修改信标示例,以便从OTP NVDS中提取主要值和次要值。
OTP NVDS将在生产(BD地址,主要,次要)期间以不同的值进行编程,以充当各种序列号。
是否需要在nvds_data_struct中添加一个字段来定义主要和次要字段?IE。
struct nvds_data_struct {
uint32_t nvds_validation_flag;//定义哪个字段有效
uint32_t nvds_tag_uart_baudrate; // uart baudrate
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;//默认信道重新评估定时器持续时间
UINT8_T NVDS_TAG_BLE_CA_MIN_RSSI; //默认最小RSSI阈值
uint8_t nvds_tag_ble_ca_nb_pkt;//接收统计数据的默认数据包数
UINT8_T NVDS_TAG_BLE_CA_NB_BAD_PKT; //删除频道所需的缺省数据包数
UINT16_T NVDS_TAG_MAJOR; //主要的广告数据
//次要的广告数据
};
然后在代码的初始化部分期间:
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,//主要值
.minor_alt_val2 = nvds_tag_minor,//次要值
.雷电竞下载appcompany_id = APPLE_COMP_ID, //Beacon公司ID
。adv_int = beacon_advertising_interval,//广告间隔
.Power = 0xC5,// TX功率
.beacon_type = default_beacon_type,
.url_prefix = httpwww,
.url = {0x0e,'d','我','a','s','e','m','我',dotcom},
.tlm_version = 0x00,
.tlm_used = 0x01
};
因为我们需要在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,//主要值
.minor_alt_val2 = nvds_tag_minor,//次要值
.雷电竞下载appcompany_id = APPLE_COMP_ID, //Beacon公司ID
。adv_int = beacon_advertising_interval,//广告间隔
.Power = 0xC5,// TX功率
.beacon_type = default_beacon_type,
.url_prefix = httpwww,
.url = {0x0e,'d','我','a','s','e','m','我',dotcom},
.tlm_version = 0x00,
.tlm_used = 0x01
};
然后使用PLT将数据写入NVDS位置?
生成序列号的推荐方式是什么,以便编程为该NVDS内存位置?PLT工具中有一个脚本来实现这个吗?
感谢您一直以来的支持!
你好,
建议不要修改OTP NVDS。在PLT中,有办法将客户特定字段刻录到OTP标题中。检查UM-B-041的7.2.8部分。
在您的固件中,您可以从右侧OTP字段中读出来并应用它。
问候,
yhe.
谢谢你,
如果在我在文档中找到它之前,请在最后回答它的最后一个问题。OTP客户字段的内存地址是什么,所以我可以分配主=&0xxxxx和minor =&0xxxxx?
谢谢你的快速支持!
我想我发现了信息:自定义特定字段在Word地址0x7f54到0x7f60。如果这些地址镜像到RAM上电时,是否意味着变量可以在RAM地址找到:0x20007F54至0x20007F60?
谢谢,
DLO.
你好,
我认为OTP标题将镜像到RAM。在您的固件中,您需要直接从OTP读取自定义特定字段。
问候,
yhe.