这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » 【S32K3学习整理】CPU 属性信息获取

共1条 1/1 1 跳转至页

【S32K3学习整理】CPU 属性信息获取

高工
2026-11-04 09:14:55     打赏

【简介】

在开发中经常会有同样的软件需要根据芯片的PART ID进行差分关联的处理,这样就需要软件能获取到当前的CPU 属性的配置信息。

S32K3的寄存器中可以获取到芯片的PART ID 及封装最大运行频率,Flash 属性等基本信息。S32K3 的SIUL2->MIDR1寄存器可以获取到芯片的PartNO信息.

image.png

image.png

S32K3 的SIUL2->MIDR2寄存器可以获取到芯片最大运行频率,支持的最高运行温度芯片的封装及Flash 大小的信息。

image.png

根据上述的信息我们编写如下的测试代码打印芯片的属性信息。

void S32K3_PrintCpuInfo(void)
{
    uint32_t reg_midr1 = readl(S32K3_SIUL2_BASE + SIUL2_MIDR1_OFF);
    uint32_t reg_midr2 = readl(S32K3_SIUL2_BASE + SIUL2_MIDR2_OFF);

    PRINTF("CPU PART S32K3%ld\r\n", ((reg_midr1 & S32K3_SIUL2_MIDR1_PART_NO_MASK) >> S32K3_SIUL2_MIDR1_PART_NO_SHIFT) - 0x136 + 10);

    PRINTF("CPU TEMPERATURE max %dC\r\n", ((reg_midr2 & S32K3_SIUL2_MIDR2_TEMPERATURE_MASK) >> S32K3_SIUL2_MIDR2_TEMPERATURE_SHIFT) == 2 ? 105 : 125);

    PRINTF("CPU FREQUENCY max %dMHz\r\n", ((reg_midr2 & S32K3_SIUL2_MIDR2_FREQUENCY_MASK) >> S32K3_SIUL2_MIDR2_FREQUENCY_SHIFT) == 3 ? 120 : 
                                          (((reg_midr2 & S32K3_SIUL2_MIDR2_FREQUENCY_MASK) >> S32K3_SIUL2_MIDR2_FREQUENCY_SHIFT) == 4 ? 160 :
                                          (((reg_midr2 & S32K3_SIUL2_MIDR2_FREQUENCY_MASK) >> S32K3_SIUL2_MIDR2_FREQUENCY_SHIFT) == 5 ? 240 : 
                                          (((reg_midr2 & S32K3_SIUL2_MIDR2_FREQUENCY_MASK) >> S32K3_SIUL2_MIDR2_FREQUENCY_SHIFT) == 6 ? 320 : 0))));

    PRINTF("CPU PACKAGE %s\r\n", ((reg_midr2 & S32K3_SIUL2_MIDR2_PACKAGE_MASK) >> S32K3_SIUL2_MIDR2_PACKAGE_SHIFT) == 3 ? "257-MAPBGA" : 
                                 (((reg_midr2 & S32K3_SIUL2_MIDR2_PACKAGE_MASK) >> S32K3_SIUL2_MIDR2_PACKAGE_SHIFT) == 4 ? "289-MAPBGA" : 
                                 (((reg_midr2 & S32K3_SIUL2_MIDR2_PACKAGE_MASK) >> S32K3_SIUL2_MIDR2_PACKAGE_SHIFT) == 0X22 ? "100-HDQFP" :
                                 (((reg_midr2 & S32K3_SIUL2_MIDR2_PACKAGE_MASK) >> S32K3_SIUL2_MIDR2_PACKAGE_SHIFT) == 0X23 ? "100-HDQFP" :
                                 (((reg_midr2 & S32K3_SIUL2_MIDR2_PACKAGE_MASK) >> S32K3_SIUL2_MIDR2_PACKAGE_SHIFT) == 0X25 ? "172-HDQFP" : 
                                 (((reg_midr2 & S32K3_SIUL2_MIDR2_PACKAGE_MASK) >> S32K3_SIUL2_MIDR2_PACKAGE_SHIFT) == 0X26 ? "172-HDQFP" :
                                 (((reg_midr2 & S32K3_SIUL2_MIDR2_PACKAGE_MASK) >> S32K3_SIUL2_MIDR2_PACKAGE_SHIFT) == 0X27 ? "172-HDQFP-EP" :"UNKNOWN")))))));

    PRINTF("CPU FLASH_SIZE_DATA %dKB\r\n", ((reg_midr2 & S32K3_SIUL2_MIDR2_FLASH_SIZE_DATA_MASK) >> S32K3_SIUL2_MIDR2_FLASH_SIZE_DATA_SHIFT) == 0 ? 64 :
                                           (((reg_midr2 & S32K3_SIUL2_MIDR2_FLASH_SIZE_DATA_MASK) >> S32K3_SIUL2_MIDR2_FLASH_SIZE_DATA_SHIFT) == 1 ? 128 :
                                           (((reg_midr2 & S32K3_SIUL2_MIDR2_FLASH_SIZE_DATA_MASK) >> S32K3_SIUL2_MIDR2_FLASH_SIZE_DATA_SHIFT) == 2 ? 256 : 0)));

    PRINTF("CPU FLASH_SIZE_CODE %ldKB\r\n", ((reg_midr2 & S32K3_SIUL2_MIDR2_FLASH_SIZE_CODE_MASK) >> S32K3_SIUL2_MIDR2_FLASH_SIZE_CODE_SHIFT)*256);
}

将上述程序运行在S32K312/324/344/388上读取属性信息。

以下是在S32K344 的板卡上运行该函数的打印信息。

image.png

本地的S32K388的板子上运行打印

image.png

本地S32K324 的板子运行打印

image.png

以下是S32K312 板子运行打印

image.png   


           


共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]