英飞凌(Infineon)TC264单片机---LED

这篇具有很好参考价值的文章主要介绍了英飞凌(Infineon)TC264单片机---LED。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文介绍如何应用Infineon官方提供的免费IDE开发环境AURIX Development Studio和TC264开发板(龙邱科技提供)实现LED的闪烁。

1. AURIX Development Studio

AURIX Development Studio(下简称ADS), 是英飞凌推出在针对自家AURIX芯片的免费编译环境,软件使用无需license,长期免费。该开发环境基于业内流行的Eclipse打造而成,界面非常友好,对于刚刚接触英飞凌的朋友们而言更是易于上手。ADS集成了编译器、调试器、iLLD底层开发库等必备组件,无需开发者四处寻找调试器和底层库代码。ADS的编译器和调试器是基于TASKING编译器、调试器打造而成,稳定性上无需额外担心,调试器比较难用,全当是一个高阶版的下载器吧。

2. 硬件环境

本次实现的硬件环境是用龙邱科技提供的TC264核心板+母版+下载器:

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

3.代码

3.1新建工程

打开ADAS,选择工作区(略)之后,在File→New,新建AURIX工程

 ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

填写工程名称,选择Next下一步: 

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程 选择对应的芯片(TC26x B-Step),点击Finish:

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程 在产生的结构树中新建一个“src”文件夹,用于存放自己写的代码:

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

建立以下代码文件: 

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

3.2 关键代码

先说明下,以下为该开发板默认的LED接口:
LED0p P10_6 龙邱TC母板核心板上LED0 翠绿
LED1p P10_5 龙邱TC母板核心板上LED1 蓝灯
LED2p P20_6 龙邱TC母板上LED0
LED3p P20_7 龙邱TC母板上LED1

3.2.1 LQ_GPIO

为了实现对GPIO引脚的基本操作,先建立LQ_GPIO的头文件,LQ_GPIO主要目的是:

  • 定义相关针脚枚举类GPIO_NAME,如P10_5 = 0xB005(B005的前两位B0实际是Module编号,05实际是PIN的编号)

 该地址可参考英飞凌TC264用户手册第十四章《General Purpose I/O Ports and Peripheral I/O Lines (Ports)
ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

如上表,每个Moudule的所有寄存器加起来需要的内存大小有256个字节(00-FF),以下为iLLD中IfxPort_regdef.h中对Port结构体的定义,可以看出共有256字节的相关的寄存器: 

Port结构体:

/** \brief  Port object */
typedef volatile struct _Ifx_P
{
    Ifx_P_OUT OUT;                          /**< \brief 0, Port Output Register */
    Ifx_P_OMR OMR;                          /**< \brief 4, Port Output Modification Register */
    Ifx_P_ID ID;                            /**< \brief 8, Identification Register */
    unsigned char reserved_C[4];            /**< \brief C, \internal Reserved */
    Ifx_P_IOCR0 IOCR0;                      /**< \brief 10, Port Input/Output Control Register 0 */
    Ifx_P_IOCR4 IOCR4;                      /**< \brief 14, Port Input/Output Control Register 4 */
    Ifx_P_IOCR8 IOCR8;                      /**< \brief 18, Port Input/Output Control Register 8 */
    Ifx_P_IOCR12 IOCR12;                    /**< \brief 1C, Port Input/Output Control Register 12 */
    unsigned char reserved_20[4];           /**< \brief 20, \internal Reserved */
    Ifx_P_IN IN;                            /**< \brief 24, Port Input Register */
    unsigned char reserved_28[24];          /**< \brief 28, \internal Reserved */
    Ifx_P_PDR0 PDR0;                        /**< \brief 40, Port Pad Driver Mode 0 Register */
    Ifx_P_PDR1 PDR1;                        /**< \brief 44, Port Pad Driver Mode 1 Register */
    unsigned char reserved_48[8];           /**< \brief 48, \internal Reserved */
    Ifx_P_ESR ESR;                          /**< \brief 50, Port Emergency Stop Register */
    unsigned char reserved_54[12];          /**< \brief 54, \internal Reserved */
    Ifx_P_PDISC PDISC;                      /**< \brief 60, Port Pin Function Decision Control Register */
    Ifx_P_PCSR PCSR;                        /**< \brief 64, Port Pin Controller Select Register */
    unsigned char reserved_68[8];           /**< \brief 68, \internal Reserved */
    Ifx_P_OMSR0 OMSR0;                      /**< \brief 70, Port Output Modification Set Register 0 */
    Ifx_P_OMSR4 OMSR4;                      /**< \brief 74, Port Output Modification Set Register 4 */
    Ifx_P_OMSR8 OMSR8;                      /**< \brief 78, Port Output Modification Set Register 8 */
    Ifx_P_OMSR12 OMSR12;                    /**< \brief 7C, Port Output Modification Set Register 12 */
    Ifx_P_OMCR0 OMCR0;                      /**< \brief 80, Port Output Modification Clear Register 0 */
    Ifx_P_OMCR4 OMCR4;                      /**< \brief 84, Port Output Modification Clear Register 4 */
    Ifx_P_OMCR8 OMCR8;                      /**< \brief 88, Port Output Modification Clear Register 8 */
    Ifx_P_OMCR12 OMCR12;                    /**< \brief 8C, Port Output Modification Clear Register 12 */
    Ifx_P_OMSR OMSR;                        /**< \brief 90, Port Output Modification Set Register */
    Ifx_P_OMCR OMCR;                        /**< \brief 94, Port Output Modification Clear Register */
    unsigned char reserved_98[8];           /**< \brief 98, \internal Reserved */
    Ifx_P_LPCR0 LPCR0;                      /**< \brief A0, Port LVDS Pad Control Register 0 */
    Ifx_P_LPCR1 LPCR1;                      /**< \brief A4, Port LVDS Pad Control Register 1 */
    Ifx_P_LPCR2 LPCR2;                      /**< \brief A8, Port LVDS Pad Control Register 2 */
    unsigned char reserved_A4[76];          /**< \brief AC, \internal Reserved */
    Ifx_P_ACCEN1 ACCEN1;                    /**< \brief F8, Port Access Enable Register 1 */
    Ifx_P_ACCEN0 ACCEN0;                    /**< \brief FC, Port Access Enable Register 0 */
} Ifx_P;

定义GPIO的模式,本例最终用的是推挽输出模式
定义宏:根据GPIO_NAME获取Port的Module首地址
定义宏:根据GPIO_NAME获取PIN的编号
声明GPIO的PIN初始化函数_void PIN_InitConfig(GPIO_Name_t pin,IfxPort_Mode mode, uint8 output);_
声明GPIO的PIN的写入函数_void PIN_Write(GPIO_Name_t pin,uint8 output);_通过该函数来更新电平状态,(output为0则高电平,为1则低电平)
声明GPIO的PIN电平翻转函数void PIN_Reverse(GPIO_Name_t pin);


LQ_GPIO的头文件(.h文件)如下:

#ifndef SRC_LQ_GPIO_H_
#define SRC_LQ_GPIO_H_

#include "Platform_Types.h"
#include "IfxPort_regdef.h"
#include "IfxPort.h"

// GPIO Port No.
typedef enum //
{
    P21_4 = 0xC104,
    P21_5 = 0xC105,
    P20_8 = 0xC008,
    P20_9 = 0xC009,
}GPIO_Name_t;

//GPIO Mode
#define PIN_MODE_OUTPUT          IfxPort_Mode_outputPushPullGeneral    /*!< 推挽输出  */
#define PIN_MODE_OUTPUT_OD       IfxPort_Mode_outputOpenDrainGeneral   /*!< 开漏输出  */
#define PIN_MODE_INPUT           IfxPort_Mode_inputNoPullDevice        /*!< 浮空输入  */
#define PIN_MODE_INPUT_PULLUP    IfxPort_Mode_inputPullUp              /*!< 上拉输入  */
#define PIN_MODE_INPUT_PULLDOWN  IfxPort_Mode_inputPullDown            /*!< 下拉输入  */

// Get the GPIO Port Module Base Address
#define PIN_GetModule(GPIO_NAME)    (Ifx_P*)(0xF0030000u | (GPIO_NAME & 0xFF00))
// Get the GPIO Port Pin Index
#define PIN_GetIndex(GPIO_NAME)    (uint8)(GPIO_NAME & 0x000F)

void PIN_InitConfig(GPIO_Name_t pin,IfxPort_Mode mode, uint8 output);
void PIN_Write(GPIO_Name_t pin,uint8 output);
void PIN_Reverse(GPIO_Name_t pin);

#endif /* SRC_LQ_GPIO_H_ */

其中typedef enum中的地址为下图对应的地址

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

查看原理图,发现开发板的四个等分别是P21.4,P21.5,P20.8,P20.9所以0xC104,0xC105,0xC008,0xC009。这个根据自己开发板而定。

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

对应的实现源文件(.c文件)是: 

#include "LQ_GPIO.h"

void PIN_InitConfig(GPIO_Name_t pin,IfxPort_Mode mode,uint8 output)
{
    Ifx_P *port = PIN_GetModule(pin);
    unsigned char pinIndex = PIN_GetIndex(pin);

    // 配置GPIO模式
    IfxPort_setPinMode(port, pinIndex, mode);
    IfxPort_setPinPadDriver(port, pinIndex, IfxPort_PadDriver_cmosAutomotiveSpeed2);

    /* GPIO输出模式时 输出状态 */
    if (0 == output)
    {
        IfxPort_setPinState(port, pinIndex, IfxPort_State_low);
    }
    else
    {
        IfxPort_setPinState(port, pinIndex, IfxPort_State_high);
    }
}


void PIN_Write(GPIO_Name_t pin,unsigned char output)
{
    Ifx_P *port = PIN_GetModule(pin);
    unsigned char pinIndex = PIN_GetIndex(pin);

    // GPIO output Mode
    if (output == 0)
    {
        IfxPort_setPinState(port, pinIndex, IfxPort_State_low);
    }
    else
    {
        IfxPort_setPinState(port, pinIndex, IfxPort_State_high);
    }
}

void PIN_Reverse(GPIO_Name_t pin)
{
    Ifx_P *port = PIN_GetModule(pin);
    unsigned char pinIndex = PIN_GetIndex(pin);

    IfxPort_togglePin(port, pinIndex);
}
3.2.2 LQ_GPIO_LED

建立LED与GPIO引脚的关系并定义相关操作,编写LQ_GPIO_LED头文件,该头文件主要目的是:

定义LED灯的编号枚举类LEDn_e
定义LED灯的状态枚举类LEDs_e
定义LED灯编号与PIN NAME的对应关系
声明LED初始化函数_void GPIO_LED_Init(void);_
声明LED控制函数_void LED_Ctrl(LEDn_e LEDn,LEDs_e LEDs);_
声明LED测试函数void Test_GPIO_LED(void);
相关头文件(.h文件):

#ifndef SRC_LQ_GPIO_LED_H_
#define SRC_LQ_GPIO_LED_H_

#include "LQ_GPIO.h"

// define enum for LED number
typedef enum
{
    LED0 = 0,
    LED1 = 1,
    LED2 = 2,
    LED3 = 3,
    LED_ALL = 4
} LEDn_e;

// define enum for LED state
typedef enum
{
    ON = 0,
    OFF = 1,
    RVS = 2 
}LEDs_e;

// LED and Pin
#define LED0p   P20_8
#define LED1p   P20_9
#define LED2p   P21_4
#define LED3p   P21_5

void GPIO_LED_Init(void);
void LED_Ctrl(LEDn_e LEDn,LEDs_e LEDs);
void Test_GPIO_LED(void);

#endif /* SRC_LQ_GPIO_LED_H_ */

 对应的源文件(.c文件):

#include "LQ_GPIO_LED.h"
#include "LQ_STM.h"


void GPIO_LED_Init(void)
{
    // 初始化,输入口,高电平
    PIN_InitConfig(LED0p, PIN_MODE_OUTPUT, 0);
    PIN_InitConfig(LED1p, PIN_MODE_OUTPUT, 0);
    PIN_InitConfig(LED2p, PIN_MODE_OUTPUT, 0);
    PIN_InitConfig(LED3p, PIN_MODE_OUTPUT, 0);
}


void LED_Ctrl(LEDn_e LEDno,LEDs_e sta)
{
    switch(LEDno)
    {
        case LED0:
            if(sta==ON)    PIN_Write(LED0p, 0);
            else if(sta==OFF)    PIN_Write(LED0p, 1);
            else if(sta==RVS)   PIN_Reverse(LED0p);
        break;

        case LED1:
          if(sta==ON)        PIN_Write(LED1p,0);
          else if(sta==OFF) PIN_Write(LED1p,1);
          else if(sta==RVS) PIN_Reverse(LED1p);
        break;

        case LED2:
          if(sta==ON)        PIN_Write(LED2p,0);
          else if(sta==OFF) PIN_Write(LED2p,1);
          else if(sta==RVS) PIN_Reverse(LED2p);
        break;

        case LED3:
          if(sta==ON)        PIN_Write(LED3p,0);
          else if(sta==OFF) PIN_Write(LED3p,1);
          else if(sta==RVS) PIN_Reverse(LED3p);
        break;

        case LED_ALL:
          if(sta==ON)
          {
              PIN_Write(LED0p,0);
              PIN_Write(LED1p,0);
              PIN_Write(LED2p,0);
              PIN_Write(LED3p,0);
          }
          else if(sta==OFF)
          {
              PIN_Write(LED0p,1);
              PIN_Write(LED1p,1);
              PIN_Write(LED2p,1);
              PIN_Write(LED3p,1);
          }
          else if(sta==RVS)
          {
              PIN_Reverse(LED0p);
              PIN_Reverse(LED1p);
              PIN_Reverse(LED2p);
              PIN_Reverse(LED3p);
          }
        break;
        default:
        break;
    }
}

void Test_GPIO_LED(void)
{
    GPIO_LED_Init();
    while(1)
    {
        LED_Ctrl(LED_ALL, RVS);
        delayms(100);
    }
}
3.2.3 LQ_STM

由于实现对LED的翻转闪烁控制,需要实现计时功能,即要借助于TC264的系统定时器(STM),并实现自己的定时功能,LQ_STM实现以下功能:

定义STM枚举类STM_t,包含STM0和STM1,其实这个对应于TC264两个CPU的时钟源,我们这里当然选STM0
声明微妙级的延时函数_void STM_DelayUs(STM_t stm, unsigned long us);_
声明毫秒级的延时函数_void delayms(unsigned short stmms);_


声明两个延时函数:第一个是通过调用iLLD中的IfxStm_getTicksFromMicroseconds函数实现精确的微妙级计时;第二个是调用汇编指令NOP(无操作)实现不怎么精确的计时。
本例中用#if条件汇编指令默认选用第一种方法

头文件(.h文件):

#ifndef LQ_STM_H_
#define LQ_STM_H_

#include "Platform_Types.h"
#include "IfxStm_regdef.h"
#include "IfxStm.h"
#include "IfxStm_cfg.h"

// STM Module enumerate
typedef enum{
    STM0 = 0,
    STM1 = 1
}STM_t;

void STM_DelayUs(STM_t stm, unsigned long us);
void delayms(unsigned short stmms);

# endif

对应的源文件(.c文件):

#include "LQ_STM.h"

// STM Delay
 void STM_DelayUs(STM_t stm, uint32 us)
 {
    Ifx_STM * STM = IfxStm_getAddress((IfxStm_Index)stm);
    uint32 tick = IfxStm_getTicksFromMicroseconds(STM, us);

    IfxStm_waitTicks(STM, tick);
 }


// delay function
void delayms(unsigned short stmms)
{
    #if 1
    // Accurate Delay
    while(stmms--){
        STM_DelayUs(STM0,1000);
    }
    #else 
    // Not accurate delay
    volatile unsigned long i = 0;
    while(stmms--)
    {
        for(i=0;i<16580;++i){
            __asm("NOP");
        }
    }
    #endif
}
3.2.4 Cpu0_Main.c

我们只利用Cpu0进行LED的控制,以下为源文件:

#include "LQ_GPIO_LED.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"
#include "IfxScuCcu.h"
#include "LQ_STM.h"


IfxCpu_mutexLock mutexCpu0InitIsOk = 1; // Flag of Cpu0 initialization

int core0_main(void)
{
    // Close the CPU Interrupt
    IfxCpu_disableInterrupts();
    // Close the Watch Dog
    IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
    IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());
    // Initial LED
    GPIO_LED_Init();
    // Open CPU Interrupt
    IfxCpu_enableInterrupts();
    // Tell Cpu1, the Cpu0 finished initialization
    IfxCpu_releaseMutex(&mutexCpu0InitIsOk);

    while(1)
    {
        LED_Ctrl(LED_ALL,RVS);
        delayms(100);
    }
    return (1);
}
3.2.5 Cpu1_Main.c

对应的Cpu1的源文件:

#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"

extern IfxCpu_mutexLock mutexCpu0InitIsOk;

int core1_main(void)
{
    // 开启CPU总中断
    IfxCpu_enableInterrupts();
    // 关闭看门狗
    IfxScuWdt_disableCpuWatchdog (IfxScuWdt_getCpuWatchdogPassword ());
    // 等待CPU0 初始化完成
    while(!IfxCpu_acquireMutex(&mutexCpu0InitIsOk));
    while(1)//主循环
    {

    }
}

 4. Build & Debug

注意:在这一步的编译和Debug中,如果提示“找不到FTD2××.dll”,都是因为开发板和电脑没有连接上,可以打开设备管理器,找到对应串口安装

4.1 编译

点击Build按钮,对代码进行编译:

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

编译结束后,务必保证无Error: 

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程 同时,在Debug文件夹下会产生.elf文件,用于debug和下载

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

4.2 Debug

Debug前,请务必用英飞凌的DAS工具确保硬件与PC通讯连接,连接方法本文不赘述。

点击debug按钮旁边的小三角,选择Debug Configurations

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

双击TASKING C/C++ Debugger:

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

① 选择出现的"LQ_GPIO_LED",② 选择默认出现的File,③ 将其删除 ④ 选择Add,在弹出的对话框中添加刚才的.elf文件 ⑤ 点击Debug
ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程 弹出对话框,选择“Switch”:

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

出现Debug界面,可以进行Debug:

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程

4.3 烧录

ifxstm_getticksfrommicroseconds,嵌入式开发,英飞凌,单片机,嵌入式硬件,mcu,硬件工程点击这个就能烧录了。文章来源地址https://www.toymoban.com/news/detail-776078.html

到了这里,关于英飞凌(Infineon)TC264单片机---LED的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 英飞凌TC397 BootLoader (SOTA)开发目录

    目录 欢迎大家来到TC397 BootLoader专栏,开始前我会先列出TC397 BootLoader学习大纲,同时可以作为大家学习、开发BootLoader的参考。点击下面的链接,可以传送到对应的文章下。 开始前的准备 TC397 BootLoader讲解 - 总目录 TC397 BootLoader讲解 - 准备工作 TC397 BootLoader讲解 - 资料下载 1、

    2023年04月11日
    浏览(27)
  • 英飞凌TC3xx系列GTM系统介绍

    英飞凌TC3xx是英飞凌AURIX 2G系列单片机,该系列单片机是32位微控制器,具有多个TriCore CPU、程序及数据存储器、总线、中断系统、DMA及功能强大的外围设备。 AURIX 2G系列按不同的需求有不同的内存及功能组合的单片机选择,全系均可满足ASIL D功能安全要求,其中功能最强大的

    2024年02月09日
    浏览(47)
  • 英飞凌TC3xx之一起认识DSADC系列(一)架构介绍

    Delta-Sigma 模数转换器模块具有多个通道,对于TC387有6个通道,提供片上调制器和相关解调器模块,以及用于解调、抽取和滤波的可配置滤波器链(参见图 285)。片上的二阶前馈调制器可以将模拟输入信号转换为数据流,同时也支持多种类型的外部调制器连接到输入路径上。调

    2024年02月20日
    浏览(34)
  • 英飞凌TC367芯片Port口配置IN和OUT的寄存器操作

    一. 打开数据手册查看配置Port口对应的寄存器   TC367配置IN和OUT的寄存器为 PXX_IOCR0, PXX_IOCR4, PXX_IOCR8, PXX_IOCR12      这四个寄存器对应的PCx分别代表1-15pin脚的配置为输入输出   Port口输入配置的值 Port口输出配置的值   二.代码实现部分         P00_IOCR0 (*(volatile Ifx_P_IOCR0

    2024年02月07日
    浏览(35)
  • 英飞凌-AURIX-TC3XX-内核架构:AURIX TriCore 1.6P

    1、AURIX TC1.6P内核简介及特点 TC3XX 系列属于 AURIX™ 2G 系列, AURIX™ 2G 系列系列单片机采用的是 TC1.6.E 和 TC1.6P 的核心组合。使用的是32位哈弗架构,将程序指令存储和数据存储分开。具有如下特点: ①、地址范围达到 4GB ,分为16段,每段256MB; ②、使用的16位和32位指令可减

    2024年02月02日
    浏览(28)
  • 英飞凌TC3xx--深度手撕HSM安全启动(一)--安全启动方式

            汽车MCU的信息安全在最近几年是越来越火,而信息安全最重要的一个功能就是系统的安全启动;         从嵌入式角度出发,安全启动最早应用在linux系统上,全称叫secure boot;它是一种逐级验证镜像,从而实现固件可信运行。以常见的uboot启动为例,通常要经过

    2024年02月08日
    浏览(44)
  • 英飞凌TC3xx--深度手撕HSM安全启动(二)--加密算法解析

            在第一节,我们简单描述了汽车MCU常见的安全启动,以及英飞凌和vector设计的安全启动流程。这里我们就要对启动中所使用的加密算法进行描述。         首先我们来分析在MCU中安全启动时所需要的成员: 待校验对象(通常为应用程序)的数据长度、起始地址;

    2024年02月06日
    浏览(29)
  • 英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构

    GTM系统使用GTM全局时钟f GTM 运行(本文称为SYS_CLK)。 特点如下 : GTM模块由两个主要部分组成: 由博世设计的GTM IP v3.1.5.1 GTM IP 由许多不同的子模块组成,提供多种功能来解决所有问题 与定时器模块相关的最常见应用 由英飞凌设计的GTM Wrapper 以下是子模块中一些最重要的

    2024年02月03日
    浏览(37)
  • 英飞凌TC3xx--深度手撕HSM安全启动(三)--TC3xx HSM系统架构

            今天聊TC3xx HSM系统,包括 所用内核、UCB相关信息、Host和HSM交互方式 。         下图来源于英飞凌官网培训材料。         TC3xx的HSM内核是一颗32位的ARM Cortex M3,主频可达100MHz,支持对称算法AES128、非对称算法PKC(Public Key Crypto) ECC256、Hash SHA2,以及TRNG(真随机数生成

    2024年02月09日
    浏览(33)
  • 瑞萨RH850-P1X ECM和英飞凌TC3xx SMU对比

            P1X ECM(Error Control Module)收集从不同的错误源和监控电路发来的错误信号,并通过error pin(ERROROUTZ)对外输出、产生中断并发出ECM reset信号。         P1x-C系列根据产品型号不同,ECM个数也不相同,如下:         对应寄存器基地址如下:         其内部结构

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包