HPM6750 读取 芯片 OTP 内置 UID UUID MAC地址 USB 地址
根据 OPT 信息配置进行宏定义

点击查看代码
// UID
#define OTP_CHIP_UID_IDX_START (8U)
#define OTP_CHIP_UID_IDX_END (11U)
// 芯片型号代码 [0:31]
#define OTP_CHIP_ID_IDX_START (64U)
// ETH0 MAC 地址 [0:47]
#define OTP_CHIP_MAC0_IDX_START (65U)
// ETH1 MAC 地址 [16:63]
#define OTP_CHIP_MAC1_IDX_START (66U)
#define OTP_CHIP_MAC_IDX_END (67U)
// USB 厂商 ID USB_VID [0:15], USB 设备 ID USB_PID [16:31]
#define OTP_CHIP_USB_IDX_START (68U)
#define OTP_CHIP_USB_IDX_END (68U)
// 用户可以自行烧写 OTP Word 69~79,用于存放应用数据
#define OTP_SW_INFO_IDX_START (72U)
#define OTP_SW_INFO_IDX_END (79U)
// UUID
#define OTP_CHIP_UUID_IDX_START (88U)
#define OTP_CHIP_UUID_IDX_END (91U)
参考官网例子实现几个读取函数:
点击查看代码
/**
* @brief 获取芯片 UUID,128 bit,
* UUID 是MCU唯一身份标识,可以以8bit,16bit,32bit读取
* @param void
* @retval void
*/
void show_uuid(void)
{
uint32_t uuid_words[4];
uint32_t word_idx = 0;
for (uint32_t i = OTP_CHIP_UUID_IDX_START; i <= OTP_CHIP_UUID_IDX_END; i++)
{
uuid_words[word_idx++] = ROM_API_TABLE_ROOT->otp_driver_if->read_from_shadow(i);
}
printf(">>MCU UUID:");
uint8_t *uuid_bytes = (uint8_t *)uuid_words;
for (uint32_t i = 0; i < sizeof(uuid_words); i++) {
printf("0x%02X ", uuid_bytes[i]);
}
printf("\n");
}
/**
* @brief 获取芯片 UID,128 bit
* @param void
* @retval void
*/
void show_uid(void)
{
uint32_t uid_words[4];
uint32_t word_idx = 0;
for (uint32_t i = OTP_CHIP_UID_IDX_START; i <= OTP_CHIP_UID_IDX_END; i++) {
uid_words[word_idx++] = ROM_API_TABLE_ROOT->otp_driver_if->read_from_shadow(i);
}
printf("UID: ");
uint8_t *uid_bytes = (uint8_t *)uid_words;
for (uint32_t i = 0; i < sizeof(uid_words); i++) {
printf("%02x ", uid_bytes[i]);
}
printf("\n");
}
/**
* @brief 获取 mac 地址 96 bit
* 需要先自行写入
* @param void
* @retval void
*/
void show_eth_mac_address(void)
{
uint32_t mac_words[3];
uint32_t word_idx = 0;
for (uint32_t i = OTP_CHIP_MAC0_IDX_START; i <= OTP_CHIP_MAC_IDX_END; i++) {
mac_words[word_idx++] = ROM_API_TABLE_ROOT->otp_driver_if->read_from_shadow(i);
}
printf("MAC: ");
uint8_t *mac_bytes = (uint8_t *)mac_words;
for (uint32_t i = 0; i < sizeof(mac_words); i++) {
printf("%02x ", mac_bytes[i]);
}
printf("\n");
}
/**
* @brief 获取 芯片型号代码,32 bit
* @param void
* @retval void
*/
void show_chip_id(void)
{
uint32_t chip_id_word;
chip_id_word = ROM_API_TABLE_ROOT->otp_driver_if->read_from_shadow(OTP_CHIP_ID_IDX_START);
printf("CHIP ID: ");
uint8_t *chip_id_bytes = (uint8_t *)&chip_id_word;
for (uint32_t i = 0; i < sizeof(chip_id_word); i++) {
printf("%02x ", chip_id_bytes[i]);
}
printf("\n");
}
测试发现 UUID 可以正常读取,MAC与USB地址读取全是0x00,看来这两个地址需要用户自行提前写入才行。
本文来自博客园,作者:求隐,转载请注明原文链接:https://www.cnblogs.com/duguqiuying/articles/17833232.html

浙公网安备 33010602011771号