I would like to modify the beacon example to pull the major and minor values from 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; //主要的广告数据
uint16_t NVDS_TAG_MINOR;// Minor advertising data
};
然后在代码的初始化部分期间:
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,//次要值
。company_id = APPLE_COMP_ID, //Beacon company 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,很难做trial and error without possibly waste a lot of parts due to its one time programmable.
感谢您的帮助!
你好,
Your way of adding private parameters in OTP is not guaranteed to work. You can store your parameters in the available OTP address directly and read it directly from the address.
Regards,
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,//次要值
。company_id = APPLE_COMP_ID, //Beacon company 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字段中读出来并应用它。
Regards,
yhe.
谢谢你,
如果在我在文档中找到它之前,请在最后回答它的最后一个问题。OTP客户字段的内存地址是什么,所以我可以分配主=&0xxxxx和minor =&0xxxxx?
谢谢你的快速支持!
我想我发现了信息:自定义特定字段在Word地址0x7f54到0x7f60。如果这些地址镜像到RAM上电时,是否意味着变量可以在RAM地址找到:0x20007F54至0x20007F60?
谢谢,
DLO.
你好,
我认为OTP标题将镜像到RAM。在您的固件中,您需要直接从OTP读取自定义特定字段。
Regards,
yhe.