跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Blogs
  3. 云途芯片UID压缩指南

云途芯片UID压缩指南

已定时 已固定 已锁定 已移动 Blogs
1 帖子 1 发布者 157 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • majorM 离线
    majorM 离线
    major YunTu
    编写于 最后由 编辑
    #1

    UID 介绍

    UID是芯片唯一编码,这个编码主要是依据芯片生产的信息产生的,每个芯片都有唯一的ID,部分芯片的UID信息可以从CIM模块获取,后面新的芯片则直接通过Flash区域读取。

    在生产阶段UID都是在芯片测试阶段写入的,因为规则不用,UID长度基本都是128比特,这个长度对于很多应用来讲长度太长,所以这里提供了对UID进行压缩的方法,可以实现将128比特压缩到64比特。

    YTM32B1LE0x

    包含LE05x和LE04x系列芯片,可以通过如下函数获取64比特长度的UID信息:

    void SystemGetUid(uint32_t *uidh, uint32_t *uidl)
    {
        /* UID store in FLASH */
        *uidh =   ((*(uint8_t*)0x10000FE0) & 0xFU) <<  0U
                | ((*(uint8_t*)0x10000FE1) & 0xFU) <<  4U
                | ((*(uint8_t*)0x10000FE2) & 0xFU) <<  8U
                | ((*(uint8_t*)0x10000FE3) & 0xFU) << 12U
                | ((*(uint8_t*)0x10000FE4) & 0xFU) << 16U
                | ((*(uint8_t*)0x10000FE5) & 0xFU) << 20U;
        *uidl =   ((*(uint8_t*)0x10000FED) & 0xFFU) <<  0U
                | ((*(uint8_t*)0x10000FEC) & 0xFFU) <<  8U
                | ((*(uint8_t*)0x10000FE8) & 0xFFU) << 16U
                | ((*(uint8_t*)0x10000F40) & 0xFFU) << 24U;
    }
    

    YTM32B1MC0x

    void SystemGetUid(uint32_t *uidh, uint32_t *uidl)
    {
        /* UID store in FLASH */
        *uidh =   ((*(uint8_t*)0x10013F28) & 0xFU) <<  0U
                | ((*(uint8_t*)0x10013F29) & 0xFU) <<  4U
                | ((*(uint8_t*)0x10013F2A) & 0xFU) <<  8U
                | ((*(uint8_t*)0x10013F2B) & 0xFU) << 12U
                | ((*(uint8_t*)0x10013F2C) & 0xFU) << 16U
                | ((*(uint8_t*)0x10013F2D) & 0xFU) << 20U;
        *uidl =   ((*(uint8_t*)0x10013F40) & 0xFFU) <<  0U
                | ((*(uint8_t*)0x10013F38) & 0xFFU) <<  8U
                | ((*(uint8_t*)0x10013F30) & 0xFFU) << 16U
                | ((*(uint8_t*)0x10013F58) & 0xFFU) << 24U;
    }
    

    YTM32B1HA0x

    UID通过CIM读取,读取前需要开启CIM的时钟。

    void SystemGetUid(uint32_t *uidh, uint32_t *uidl)
    {
        /* UID store in CIM */
        *uidh = (CIM->UID0 >>  0U & 0xFU) <<  0U
                | (CIM->UID0 >>  8U & 0xFU) <<  4U
                | (CIM->UID0 >> 16U & 0xFU) <<  8U
                | (CIM->UID0 >> 24U & 0xFU) << 12U
                | (CIM->UID1 >>  0U & 0xFU) << 16U
                | (CIM->UID1 >>  8U & 0xFFU) << 20U;
        *uidl = (CIM->UID2 >>  0U & 0xFFFFU) << 0U
                | (CIM->UID3 >> 0U & 0xFFFFU) << 16U;
    }
    

    YTM32B1MD1x

    UID通过CIM读取,读取前需要开启CIM的时钟。

    void SystemGetUid(uint32_t *uidh, uint32_t *uidl)
    {
        /* UID store in CIM */
        *uidh = (CIM->UID0 >>  0U & 0xFU) <<  0U
                | (CIM->UID0 >>  8U & 0xFU) <<  4U
                | (CIM->UID0 >> 16U & 0xFU) <<  8U
                | (CIM->UID0 >> 24U & 0xFU) << 12U
                | (CIM->UID1 >>  0U & 0xFU) << 16U
                | (CIM->UID1 >>  8U & 0xFFU) << 20U;
        *uidl = (CIM->UID2 >>  0U & 0xFFFFU) << 0U
                | (CIM->UID3 >> 0U & 0xFFFFU) << 16U;
    }
    

    YTM32B1ME0x

    UID通过CIM读取,读取前需要开启CIM的时钟。

    void SystemGetUid(uint32_t *uidh, uint32_t *uidl)
    {
        /* UID store in CIM */
        *uidh = (CIM->UID0 >>  0U & 0xFU) <<  0U
                | (CIM->UID0 >>  8U & 0xFU) <<  4U
                | (CIM->UID0 >> 16U & 0xFU) <<  8U
                | (CIM->UID0 >> 24U & 0xFU) << 12U
                | (CIM->UID1 >>  0U & 0xFU) << 16U
                | (CIM->UID1 >>  8U & 0xFFU) << 20U;
        *uidl = (CIM->UID2 >>  0U & 0xFFFFU) << 0U
                | (CIM->UID3 >> 0U & 0xFFFFU) << 16U;
    }
    
    1 条回复 最后回复
    1
    • majorM major 被引用 于这个主题

  • 云途开发生态介绍

    快速上手云途开发生态

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YT CONFIG TOOL调查问卷

    帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

  • demo
    19
    can
    18
    uds
    11
    lin stack
    7
    fbl
    5
    yt-link
    5
    md14
    4
    adc模块
    3
    Online Users
    • 登录

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门