tag 标签: TI

相关博文
  • 2024-10-25 10:42
    43 次阅读|
    0 个评论
    智能运动控制系统是自动化领域中的一个重要分支,主要用于对机械运动部件的位置、力矩、速度、加速度等进行实时的控制管理,能够实现对工业机械臂、传送带、自动化装配线等设备的精确控制,以提高生产效率、降低能耗并保障生产安全。 它融合了精确反馈、先进感知、高性能控制和无缝连接技术,能够实现高精度、低延时的自动控制,在现代社会的生产和生活中具有重要意义。 该系统需要处理大量的传感器数据、执行复杂的运动算法,并实时响应外部指令,因此对系统的主控提出了较高的要求。在这里,推荐客户使用飞凌嵌入式FET6254-C核心板作为智能运动控制系统的主控设备。 基于TI Sitara™ AM62x系列处理器设计开发的飞凌嵌入式FET6254-C核心板,以其独具优势的多核异构架构、丰富的接口资源和高性能处理能力,为智能运动控制系统提供了理想的主控解决方案。 1 高性能主控,更高效 FET6254-C核心板作为系统的核心,负责数据处理、算法运算和指令下发,四核Cortex-A53+Cortex-M4F的多核异构架构确保了高性能计算与实时控制的高效结合。 不仅能够实现对运动轨迹的高精度规划和实时调整,确保设备的运动精度和稳定性,还能快速处理传感器数据,实现复杂的运动算法和故障诊断,提高系统的智能化水平。 2 功能接口丰富,更全能 飞凌嵌入式FET6254-C核心板将处理器的全部功能引出,扩展能力更全能。通过I2C、SPI等接口,可连接各类传感器(如位置传感器、速度传感器、力传感器等),实时采集设备状态信息;利用PWM、GPIO等接口,直接控制电机驱动器、电磁阀等执行机构,实现精确的运动控制。 值得注意的是,FET6254-C核心板原生支持3路CAN-FD,传输速度至高可达5Mbps,可高速、稳定地接入到工业网络系统中CAN-FD等通信接口,为工业自动化和车载应用提供功能支撑。 此外,FET6254-C核心板还支持TI处理器特有的通用存储控制器接口GPMC,数据读写速率高,可达100MB/s,支持多路片选,配置更加灵活,同时可以提供多种与外设相连的方法,可以和宽范围的外部设备通信。 3 人机交互能力更出众 FET6254-C核心板拥有卓越的显示能力,可支持双屏异显、三路显示,搭配上设计直观的操作界面,方便操作人员监控设备状态、调整参数和下达指令。 基于FET6254-C核心板的智能运动控制系统,凭借其高精度、高效率、实时性和可扩展性,为工业自动化领域提供了强大的技术支持。该系统不仅能够提高生产效率、降低能耗,还能提升生产线的智能化水平,为企业的转型升级提供有力保障。
  • 热度 1
    2024-10-11 15:15
    384 次阅读|
    0 个评论
    By Toradex胡珊逢 简介 CODESYS 是基于 IEC 61131-3 的 PLC 开发工具,在工业控制、交通等领域中有着广泛的应用。文章将介绍如何在 Toradex 采用 TI AM62 SoC 的 Arm 计算机模块 Verdin AM62 使用评估版本的 CODESYS。 硬件介绍 Verdin AM62使用 TI AM623/AM625 处理器,具有最多 4 个主频 1.4GHz 的 Cortex-A53 内核,以及一个 400MHz 主频的 M4F 核心。内存采用 LPDDR4,从 512 MB 到 2 GB 可供选择。eMMC 从 4~16 GB。模块采用 SODIMM DDR4 标准,提供两路千兆以太网、CAN、MIPI DSI 显示、I2C、SPI、UART 等接口。 BSP 配置 CODESYS 分为在电脑端使用 IDE,在 GUI 中开发 PLC 应用,和在设备上运行时 runtime 软件,例如在 Verdin AM62 上的 CODESYS Control for Linux ARM SL。CODESYS 的运行需要使用 RT-Linux 内核。Toradex 发布的 Linux BSP 采用Yocto Project 编译,可以在生成 BSP 时直接为 Linux 内核打上实时补丁。修改 local.conf 文件。 DISTRO="tdx-xwayland-rt" 为了尽可能保证内核时实时性,可以裁减 BSP 中的 wayland 显示、Qt demo 等组件,添加用于测试实时性能的 cyclictest。 IMAGE_INSTALL: remove = " weston wayland-qtdemo-launch-cinematicexperience" DISTRO_FEATURES: remove = "wayland" IMAGE_INSTALL: append = " rt-tests" 最后使用bitbake命令编译镜像,并使用Toradex Easy Installer将其烧录到 Verdin AM62 模块。 bitbake tdx-reference-multimedia- image CODESYS IDE 安装 从 CODESYS 网站下载IDE 开发工具,安装成功后再下载 64bit 的CODESYS Control for Linux ARM SL。这是后缀为 package 的文件,需要在 CODESYS IDE 中按照下图打开 CODESYS Installer 导入 package 文件进行安装。 安装完毕后可以看到以下目录C:\Program Files\CODESYS 3.5.20.20\CODESYS\CODESYS Control for Linux ARM64 SL。 Verdin AM62 软件安装 在 Verdin AM62 上需要安装来自C:\Program Files\CODESYS 3.5.20.20\CODESYS\CODESYS Control for Linux ARM64 SL\Delivery\linuxarm64 目录下的 codesyscontrol_linuxarm64_4.13.0.0_arm64.ipk。将其复制到开发板后运行下面命令安装。 opkginstallcodesyscontrol_linuxarm 64_4.13.0 . 0 _arm64.ipk 在 Dependency 目录下还有一个 deb 格式的 codemeter-lite 安装文件。如有你已经有 CODESYS 的授权密钥,安装 codemeter 后,上面安装的 codesyscontrol 将不受 30 分钟的试用时间限制。由于 Verdin AM62 默认不使用 Debian 包管理系统,可以参考CODESYS 的网页说明,手动解压 deb 安装包后复制相关文件。执行下面命令即可启动 codesysctonrol, ps aux|grep codesys 查看运行情况。当 codesyscontrol 运行后,在同一个网络中的电脑上的 CODESYSY IDE 就可以发现该设备。 /etc/ init .d / codesyscontrolstart ps aux|grepcodesys root 710 9.2 1.9 892328 39456 pts /0SLl08:040:00/ opt /codesys/ bin /codesyscontrol.bin/ etc /codesyscontrol/ CODESYSControl .cfg PLC 应用开发 打开 IDE 后点击新建项目,设置项目名称和保存路径。 Device 选择 CODESYS Control for Linux ARM64 SL,这是上面安装的组件。 点击 Scan Network 扫面本地网络,发现 Verdin AM62 设备。 首次发现设备时需要设置一个用户名和密码,IDE 将会使用该账户和设备通信。 创建完毕后使用该帐号登录。 然后就可以看到该设备,后面的 PLC 应用将这上面调试和运行。 具体的 PLC demo 编写可以参考我们开发者网页的说明。开启 web visu 功能后,可以连接到 Verdin AM62 的 IP,在浏览器中查看 PLC 运行情况。 Verdin AM62 实时性能测试 在使用 Yocto Project 编译镜像时已经添加了 rt-tests 工具,下面使用 cyclictest 测试实时性能。测试时把 AM62 4 个核心的时钟均设置到最高的 1.4 GHz。 # echo /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor # cpufreq-info|grepcurrent current policy:frequencyshouldbe within 200 MHz and 1.40 GHz. currentCPUfrequency is 1.40 GHz(asserted by call to hardware). current policy:frequencyshouldbe within 200 MHz and 1.40 GHz. currentCPUfrequency is 1.40 GHz(asserted by call to hardware). current policy:frequencyshouldbe within 200 MHz and 1.40 GHz. currentCPUfrequency is 1.40 GHz(asserted by call to hardware). current policy:frequencyshouldbe within 200 MHz and 1.40 GHz. currentCPUfrequency is 1.40 GHz(asserted by call to hardware). stress-ng 把所有核心的负荷加满,使用 cyclictest 持续运行 1 个小时并统计结果。 stress-ng -c 4 --cpu-method all & \ cyclictest -m -Sp98 -D1h -h400 -i200 - q output 总结 文章介绍了如何在 Verdin AM62 上使用 CODESYS,该方法同样也适用于其他 Toradex Arm 64bit 的模块,如 iMX8 SoC。关于 CODESYS 实时性调教,可以从 BSP、内核裁减,CPU 亲和性设置,中断优化等方面进行,具体参考下面文档。 参考: https://www.ti.com/lit/pdf/SPRADH0
  • 热度 1
    2024-9-18 18:07
    379 次阅读|
    0 个评论
    B y Toradex 胡珊逢 简介 Verdin AM62 是 Toradex 基于 TI AM623/AM625 SoC 的 Arm 计算机模块。它最多提供 4 个 A53 和 1 个 M4F 处理器。这是 TI 基于其 K3 平台的处理器,虽然和 NXP 的 iMX8M Mini/Plus 都使用 A53 核心,但是由于架构不同,在 Linux 系统中配置外设的方式也不同。文章将介绍如何配置 AM62 的引脚复用关系。 硬件介绍 Verdin AM62 所使用的 AM623/AM625 处理器的 GPIO 控制器如下图所示。GPIO 控制器根据不同的处理器可能有多个模块,AM623/AM625 拥有一个 MCU_GPIO0,一个 GPIO0 和一个 GPIO1 共三个模块。每个模块有 9 个 bank,每个 bank 有 16 个引脚,所以理论上最多有 3x9x46 = 432 个引脚。但 AM623/AM625 SoC 并不能使用所有引脚,SoC 实际可用的为 198 个引脚。Verdin AM62 模块并没有把 SoC 的引脚都引出,因而可用的引脚少于 198。 Device Tree 配置 在写本文章时,Verdin AM62 使用toradex_ti-linux-6.1.y分支内核。每个 GPIO 根据用途的不同,相应的配置分布在多个 device tree 文件中。如下图,k3-am62-mcu.dtsi 和 k3-am62-main.dtsi 中定义了三个 GPIO 控制器模块以及对应的物理地址,k3-am62-verdin.dtsi 中包含每个引脚的具体配置。三个 GPIO 控制器分为两种,MCU_GPIO 和 GPIO0/1,它们可以使用各自专门的函数来配置所控制的引脚。&mcu_pmx0 和 &main_pmx0 分别使用 AM62X_MCU_IOPAD 和 AM62X_IOPAD 配置。下面将介绍如何修改和使用 mcu_gpio0,main_gpio0 和 main_gpio1 模块所控制的引脚。 我们分别选择来自如下三个不同 IO 控制器的引脚,分别是 SOIDMM 19、21、61。 查看Verdi AM62 Datatsheet的 Table 12: Alternate functions 可以确定对应引脚的 SoC Ball ID 和 SoC ball name。在 TIAM623/AM625处理器的 Datasheet 中 Table 6-1. Pin Attributes 可以找到对应 SoC Ball ID 的 PADCONFIG Address。有了这些信息就能够在 Device tree 中进行配置。 SODIMM SoC Ball ID SoC ball name PADCONFIG Address ALT7 61 A6 MCU_UART0_CTSn 0x0408401C MCU_GPIO0_7 21 U24 GPMC0_AD15 0x000F4078 GPIO0_30 19 A14 SPI0_CLK 0x000F41BC GPIO1_17 SODIMM 19 k3-am62-verdin.dtsi 中提供了默认引脚的配置。Toradex 在代码中做了详细的注释,例如以 SODIMM 19 为关键字搜索,可以找到该引脚的默认配置,这里发现关于 SODIMM 19 的配置有两个。SODIMM 19 属于 GPIO1 控制器,所以该配置是 main_pmx0 下面的子节点,并使用 AM62X_IOPAD 函数进行配置。A14(Ball ID)的 PADCONFIG 地址是 0x000F41BC,对应的掩码是 0x1fff,AM62X_IOPAD 使用 0x01bc。 PIN_OUTPUT/PIN_INPUT 表示把该引脚配置为输出/输入状态。数字 2 表示该引脚使用第二个复用配置,即当作 PWM1_A 使用。数字 7 表示该引脚使用第七个复用配置,即当作 GPIO 使用。引脚所有可用的复用关系可在 Verdi AM62 Datatsheet Table 12: Alternate functions 查看。AM62 处理器的引脚最多可以有 10 个复用配置可选,在 Table 12 中由 ALT0 到 ALT9 表示。部分引脚可能少于 10 个复用配置。后面的注释中,A14 为 SoC Ball ID,SPI0_CLK 是 SoC Ball Name,GPIO1_17 指当前选择第七个复用配置,作为 GPIO 对应的编号 GPIO1_17。当配置为 PWM 功能时就由 GPIO1_17 改为 EHRPWM1_A。在修改为其他复用配置后,建议也对应修改注释,便于理解代码。 /* Verdin PWM_3_DSI */ pinctrl_epwm1_a: main-epwm1a-pins- default { pinctrl- single ,pins = < AM62X_IOPAD ( 0 x01bc, PIN_OUTPUT, 2 ) /* (A14) SPI0_CLK.EHRPWM1_A */ /* SODIMM 19 */ ; }; pinctrl_pwm3_dsi_gpio: main-gpio1 -17 -pins- default { pinctrl- single ,pins = < AM62X_IOPAD ( 0 x01bc, PIN_INPUT, 7 ) /* (A14) SPI0_CLK.GPIO1_17 */ /* SODIMM 19 */ ; }; 上面 AM62X_IOPAD 中配置的 PIN_OUTPUT/PIN_INPUT 将设置 PADCONFIG 的寄存器。PIN_OUTPUT/PIN_INPUT 在 k3-pinctrl.h 定义。 /* Only these macros are expected be used directly in device tree files */ # define PIN_OUTPUT (INPUT_DISABLE | PULL_DISABLE) # define PIN_OUTPUT_PULLUP (INPUT_DISABLE | PULL_UP) # define PIN_OUTPUT_PULLDOWN (INPUT_DISABLE | PULL_DOWN) # define PIN_INPUT (INPUT_EN | PULL_DISABLE) # define PIN_INPUT_PULLUP (INPUT_EN | PULL_UP) # define PIN_INPUT_PULLDOWN (INPUT_EN | PULL_DOWN) PIN_OUTPUT/PIN_INPUT 定义的值最终被写入 Pad Configuration 寄存器,具体的说明可以参考 AM623/625 的Technical Reference Manual中 Table 6-2045. Description Of The Pad Configuration Register Bits 相关说明。 根据 pinctrl_epwm1_a 查找,发现该引脚被分配到 epwm1,为了将 SODIMM 19 作为 GPIO 使用,在device tree 需要确保 epwm1 处于 disabled 状态。 /* Verdin PWM_3_DSI */ &epwm1 { pinctrl-names = "default" ; pinctrl-0 = ; status = "disabled" ; }; 如果使用 k3-am625-verdin-nonwifi-dev.dtb,那么在 k3-am62-verdin-dev.dtsi 中需要将 epwm1 禁用。 /* Verdin PWM_3_DSI */ &epwm1 { status = "disabled" ;}; 在 k3-am62-verdin.dtsi 的 main_gpio1 可以为 GPIO1 控制器的引脚添加 line-name,这样在 Linux 中 libgpiod 就能够使用更直观 line-name 直接访问引脚。gpio-line-names 从 gpio1_0 开始为每个引脚添加 line-name,gpio1_17 则设置为 SODIMM_19。 &main_gpio1 { gpio-line-names = "" , /* 0 */ "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , /* 10 */ "" , "" , "" , "" , "SODIMM_15" , "SODIMM_16" , "SODIMM_19" , 由于 SOIDMM 19 属于 GPIO1 控制器,在 k3-am62-verdin-dev.dtsi 中需要添加 main_gpio1 节点并将 pinctrl_pwm3_dsi_gpio 添加到节点中。 &main_gpio1 { pinctrl-names = "default" ; pinctrl-0 = ;}; SODIMM 21 SODIMM 21 也是类似的方法。在 Verdi AM62 Datatsheet Table 12: Alternate functions 中看到 SOIDMM 21 对应的 SoC Ball ID 为 U24,第七复用配置 ALT7 可以作为 GPIO 功能,编号 GPIO0_30,这属于 GPIO0 控制器。TIAM623/AM625处理器的 Datasheet 中 Table 6-1. Pin Attributes 中找到 U24 对应的 PADCONFIG Address 是 0x000F4078。因此,在 AM62X_IOPAD 使用 0x0078。 /* Verdin DSI_1_BKL_EN */ pinctrl_dsi1_bkl_en: main-gpio0 -30 -pins- default { pinctrl- single ,pins = < AM62X_IOPAD ( 0 x0078, PIN_INPUT, 7 ) /* (U24) GPMC0_AD15.GPIO0_30 */ /* SODIMM 21 */ ; }; 在 main_gpio0 中,GPIO0_30 的 line-name 已经被定义为 SODIMM_21。 &main_gpio0 { gpio - line - names = "" , "SODIMM_76" , "SODIMM_21" , /* 30 */ SODIMM 21 属于 GPIO0 控制器,在 k3-am62-verdin-dev.dtsi 中,将 pinctrl_dsi1_bkl_en 添加到 main_gpio0 节点中。 &main_gpio0 { pinctrl-names = "default" ; pinctrl-0 = , , , , , ;}; SODIMM 61 在 Verdi AM62 Datatsheet 的 Table 12 发现 SODIMM 61 对应 ALT7 为 MCU_GPIO0_7,SoC Ball ID 为 A6,SoC ball name 为 MCU_UART0_CTSn。在 TI AM623/AM625 处理器的 Datasheet 中 Table 6-1 中对应的 PADCONFIG Address 是 0x0408401C。使用 0x010c 作为关键字在 k3-am62-verdin.dtsi 检索只发现下面配置,但该子节点属于 main_pmx0 而非为 mcu_pmx0。所以在 k3-am625-verdin-nonwifi-dev.dtb 并未配置 SODIMM 61。那么就需要在 k3-am62-verdin.dtsi 添加相关配置。 pinctrl_sdhci2: main-mmc2-pins- default { pinctrl- single ,pins = < AM62X_IOPAD ( 0 x120, PIN_INPUT, 0 ) /* (C24) MMC2_CMD */ /* WiFi_SDIO_CMD */ AM62X_IOPAD ( 0 x118, PIN_INPUT, 0 ) /* (D25) MMC2_CLK */ /* WiFi_SDIO_CLK */ AM62X_IOPAD ( 0 x114, PIN_INPUT, 0 ) /* (B24) MMC2_DAT0 */ /* WiFi_SDIO_DATA0 */ AM62X_IOPAD ( 0 x110, PIN_INPUT, 0 ) /* (C25) MMC2_DAT1 */ /* WiFi_SDIO_DATA1 */ AM62X_IOPAD ( 0 x10c, PIN_INPUT, 0 ) /* (E23) MMC2_DAT2 */ /* WiFi_SDIO_DATA2 */ 在 mcu_pmx0 中把 SODIMM 61 配置作为子节点添加进去。注意,由于 SODIMM 61 属于 MCU_GPIO 控制器,所以这里使用 AM62X_MCU_IOPAD 来配置。 &mcu_pmx0 { /* Verdin GPIO_9 */ pinctrl_gpio_9: mcu-gpio0 -7 -pins- default { pinctrl-single,pins = < AM62X_MCU_IOPAD ( 0x001c , PIN_INPUT, 7 ) /* (A6) MCU_UART0_CTSn.MCU_GPIO0_7 */ /* SODIMM 61 */ ; }; 在 &mcu_gpio0 中第八个位置添加 MCU_GPIO0_7 对应的 line-name 为 SODIMM_61。其中第一行 SODIMM_244 对应的是 MCU_GPIO0_0,第二行 SODIMM_206 对应的是 MCU_GPIO0_1。 &mcu_gpio0 { gpio-line-names = "SODIMM_244" , "SODIMM_206" , "SODIMM_208" , "SODIMM_210" , "SODIMM_212" , "" , "" , "SODIMM_61" , 在 k3-am62-verdin-dev.dtsi 中的 mcu_gpio0 节点中添加前面配置的 pinctrl_gpio_9。 &mcu_gpio0 { pinctrl-names = "default" ; pinctrl-0 = , , , , , ;}; 引脚测试 上面配置完成后,重新编译 device tree,并部署到的开发板上。 make ti/k3-am625-verdin-nonwifi-dev.dtb 重启后使用gpioinfo命令找到上面配置三个引脚在 Linux 系统中对应的 bank 和 line 编号。 gpiochip1 - 24 lines : line 7 : "SODIMM_61" unused input active-high gpiochip2 - 92 lines : line 30 : "SODIMM_21" unused input active-high gpiochip3 - 52 lines : line 17 : "SODIMM_19" unused input active-high 下面三个命令分别可以把对应的引脚拉高或拉低。 root @verdin - am62 : ~ # gpioset 3 17=1 root @verdin - am62 : ~ # gpioset 2 30=1 root @verdin - am62 : ~ # gpioset 1 7=1 root @verdin - am62 : ~ # gpioset 3 17=0 root @verdin - am62 : ~ # gpioset 2 30=0 root @verdin - am62 : ~ # gpioset 1 7=0 除了像上面直接在 user space 控制 GPIO 的状态,驱动中也可以控制相关引脚。例如在 k3-am62-verdin-dev.dtsi 的根节点下添加一个 LED 子节点并使用 SOIDMM 61 来控制。首先,需要把 pinctrl_gpio_9 从原来 &mcu_gpio0 删除,因为这里该引脚不再作为普通的 GPIO 使用,而是用于 LED 驱动。在 gpios 参数中使用 &mcu_gpio0 7 来引用 SODIMM 61。如果是 main_gpio0 控制器下的 SODIMM 21,则对应需要使用 &main_gpio0 30 来引用。 gpio-leds { compatible = "gpio-leds" ; pinctrl-names = "default" ; pinctrl-0 = ; led-yellow { gpios = <&mcu_gpio0 7 ; default-state = "on" ; label = "status" ; }; }; 总结 文章就 AM623/625 SoC 介绍了如何在 Device tree 中配置和使用 GPIO,需要注意区分 GPIO 来自哪个控制器,并使用对应的函数和引用符号。
  • 热度 1
    2024-9-18 17:48
    1142 次阅读|
    0 个评论
    By Toradex秦海 1).简介 嵌入式设备对于网络安全的要求越来越高,而 Secure boot就是其中重要的一部分。 TI AM62X处理器基于行业标准 X.509认证来提供 Secure boot启动过程中的 Chain of Trust; X.509认证是基于公共密钥加密 (Public Key Cryptography)和数字签名 (Digital Signature)技术来实现 Secure boot的。AM62X处理器涉及 Security的架构框图如下。 AM62X处理器启动流程图参考如下。本文就基于 TI AM625处理器平台简单介绍其 Secure Boot的部署流程。 本文所演示的平台来自于ToradexVerdinAM62嵌入式平台,主要介绍基本的 Chain of Trust,也就是 U-boot和Linux Kernel/DTB两个层级的加密和验证启动,后面 Rootfs以及 Application层面暂不涉及。 2.准备 a).Verdin AM62 ARM核心版配合Dahlia载板,并连接调试串口用于测试。 这里下载 Toradex Yocto Linux BSP6 Reference Image用于后续测试,目前最新的是 6.7.0版本。 3). 生成 Customer Key Set文件 a).TI AM62处理器有如下三种设备类型,其中 GP (General Purpose)类型的处理器是不具备支持 Secure Boot功能的,只有 HS (High Security)类型的处理器是支持的,然后其还细分为两个状态,HS-FS (Field Securable)和 HS-SE (Security Enforced),具体的说明请见如下。TI AM62X HS类型处理器出厂配置为 HS-FS状态,且都已经预先写入了 TI Dummy Key在设备中。 b).由于将 HS设备从 HS-FS状态配置为 HS-SE状态是不可逆的,因此本文为了方便演示流程仅仅使用 TI预置的 Dummy Key在 HS-FS状态下进行 Signed Image Authentication流程演示,但会将 Customer key的生成和烧录流程进行说明。 c).通过下面命令生成 Customer Root Key Set (SMPK)和 Customer Back-up Key Set (BMPK)文件,用于后续的 Boot Image签名以及烧录 Image生成。 -------------------------------- ### key name should not be changed ### $exportCustomer_KEYS_DIR= $ export SMPK_NAME=custMpk $ export BMPK_NAME=backMpk ###Create the SMPK key pair and certificate using RSA 4096### $ cd $Customer_KEYS_DIR $ openssl genrsa -F4 -out ${SMPK_NAME}.key 4096 $ cp ${SMPK_NAME}.key ${SMPK_NAME}.pem $ openssl req -batch -new -x509 -key ${SMPK_NAME}.key -out ${SMPK_NAME}.crt ###Create the BMPK key pair and certificate using RSA 4096### $ openssl genrsa -F4 -out ${BMPK_NAME}.key 4096 $ cp ${BMPK_NAME}.key ${BMPK_NAME}.pem $ openssl req -batch -new -x509 -key ${BMPK_NAME}.key -out ${BMPK_NAME}.crt ### Remove write access to the keys and certificates ### $ chmod a-w * -------------------------------- 4). Boot Image编译和签名 这里说明下载Toradex YoctoLinuxBSP 6.x.y版本包含 U-boot在内的编译 Boot Images所需要的全部源代码 -------------------------------- ###Get the U-Boot source codefor Yocto Linux BSP 6.x.y ### $ git clone -b toradex_ti-u-boot-2023.04 https://git.toradex.cn/u-boot-toradex.git $ export UBOOT_DIR=$(pwd)/u-boot-toradex ###Get the binary-only System Firmware (SYSFW)### $ git clone git://git.ti.com/k3-image-gen/k3-image-gen.git $ export K3_DIR=$(pwd)/k3-image-gen ###Get the TI Linux Firmware### $ git clone -b ti-linux-firmware git://git.ti.com/processor-firmware/ti-linux-firmware.git $ export TI_LINUX_FW_DIR=$(pwd)/ti-linux-firmware ###Get the ARM Trusted Firmware (ATF/TF-A)### $ git clone https://github.com/ARM-software/arm-trusted-firmware.git $ export TFA_DIR=$(pwd)/arm-trusted-firmware ###Get the OP-TEE image source code### $ git clone https://github.com/OP-TEE/optee_os.git $ export OPTEE_DIR=$(pwd)/optee_os ###Get the K3 Security development package:### $ git clone https://git.ti.com/git/security-development-tools/core-secdev-k3.git -b master $ export CORE_SECDEV_K3_DIR=$(pwd)/core-secdev-k3 -------------------------------- b).Customer Key Set需要部署在K3 Security development package和U-Boot source code如下位置,默认部署的是 TI Dummy Key,本文因为都是基于 TI Dummy Key进行测试,因此不做替换修改。 ./K3 Security development package -------------------------------- $ cd $CORE_SECDEV_K3_DIR/keys $ ls custMpk.crt custMpk.key custMpk.pem swrv.txt ti-degenerate-key.pem $ md5sum custMpk.key bd90ee9fe69667315eeee32bc7a01b39 custMpk.key $ md5sum custMpk.pem bd90ee9fe69667315eeee32bc7a01b39 custMpk.pem $ md5sum custMpk.crt f2a1562c002fc38319bf82471b0661a3 custMpk.crt ### replace TI Dummy Key with Customer Key if needed ### $ cp $Customer_KEYS_DIR/* $CORE_SECDEV_K3_DIR/keys -------------------------------- ./U-Boot source code -------------------------------- $ cd $UBOOT_DIR/board/ti/keys/ $ ls custMpk.crt custMpk.key custMpk.pem swrv.txt ti-degenerate-key.pem $ md5sum custMpk.key bd90ee9fe69667315eeee32bc7a01b39 custMpk.key $ md5sum custMpk.pem bd90ee9fe69667315eeee32bc7a01b39 custMpk.pem $ md5sum custMpk.crt f2a1562c002fc38319bf82471b0661a3 custMpk.crt ### replace TI Dummy Key with Customer Key if needed ### $ cp $Customer_KEYS_DIR/* $CORE_SECDEV_K3_DIR/keys -------------------------------- 这里配置交叉编译 toolchain,注意由于不同的固件需要对应 32bit或者 64bit toolchain编译器,因此这里两种 toolchain都需要配置,配置完成后参考如下命令 export 32bit/64bit toolchain相应的环境变量。 -------------------------------- ### 64bit toolchain env ### $ export ARCH=arm64 $ export DTC_FLAGS="-@" $ export PATH=~/gcc-linaro-aarch64/bin/:$PATH $ export CROSS_COMPILE=aarch64-none-linux-gnu- ### 32bit toolchain env ### $ export PATH=~/gcc-linaro-arm/bin/:$PATH -------------------------------- d).参考这里对 Boot Images进行编译 ./ Build ARM Trusted Firmware (ATF/TF-A) -------------------------------- $ cd $TFA_DIR $ export ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- $ unset TFA_EXTRA_ARGS $ make PLAT=k3 SPD=opteed $TFA_EXTRA_ARGS TARGET_BOARD=lite -------------------------------- ./ Build OP-TEE Image -------------------------------- $ cd $OPTEE_DIR $ export OPTEE_EXTRA_ARGS="CFG_WITH_SOFTWARE_PRNG=y" $ export ARCH=arm $ export CROSS_COMPILE=arm-none-linux-gnueabihf- $ export CROSS_COMPILE64=aarch64-none-linux-gnu- $ make PLATFORM=k3-am62x CFG_ARM64_core=y $OPTEE_EXTRA_ARGS -------------------------------- ./ Build U-Boot for R5 -------------------------------- ### Step-1 under U-boot directory ### $ cd $UBOOT_DIR $ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- verdin-am62_r5_defconfig $ make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- BINMAN_INDIRS=$TI_LINUX_FW_DIR ### Step-2 under System Firmware directory ### $ cd $K3_DIR $ make SOC=am62x SOC_TYPE="hs-fs" TI_SECURE_DEV_PKG=$CORE_SECDEV_K3_DIR SBL=$UBOOT_DIR/spl/u-boot-spl.bin SYSFW_DIR=$TI_LINUX_FW_DIR/ti-sysfw $ cp tiboot3-am62x-hs-fs-evm.bin ../tiboot3-am62x-hs-fs-verdin.bin -------------------------------- //对应不同的 SOC_TYPE选项,会生成不同的 Binary Image,其对应关系参考如下两个表格,在出厂默认的 HS-FS SoC Type下,需要编译HS-FS对应的固件;而一旦通过 TI OTP Keywriter工具将 Customer Key写入 eFUSE并将设备配置为 HS-SE状态后,就需要编译 HS-SE SOC Type对应的固件才能正常启动了。 ./ Build U-Boot for A53 -------------------------------- ### Default configuration ### $ cd $UBOOT_DIR $ export ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- $ make verdin-am62_a53_defconfig ### Customized configuration to force FIT image to be authenticated ### $ make menuconfig CONFIG_FIT_SIGNATURE_ENFORCE=y ### Compile ### $ make BINMAN_INDIRS=$TI_LINUX_FW_DIR \ BL31=$TFA_DIR/build/k3/lite/release/bl31.bin \ TEE=$OPTEE_DIR/out/arm-plat-k3/core/tee-raw.bin $ cp tispl.bin ../ $ cp u-boot.img ../ -------------------------------- 5). 签名 Linux kernel FIT Image a).此步骤为可选步骤,如果不需要强制 FIT Image Authentication则在上面 4.d Build U-Boot for A53步骤中可以不使能CONFIG_FIT_SIGNATURE_ENFORCE配置,然后跳过此章节直接进行 BSP Image修改部署章节即可。 b).解压 Toradex Ycoto Linux BSP6 Image,获得 LInux Kernel/DTB/DTBO等文件 -------------------------------- ### uncompress BSP Image package ### $ tar xvf Verdin-AM62_Reference-Minimal-Image-Tezi_6.7.0+build.13.tar $ cd Verdin-AM62_Reference-Minimal-Image-Tezi_6.7.0+build.13/ ### uncompress boot filesystem ### $ mkdir bootfs/ $ tarJxfReference-Minimal-Image-verdin-am62.bootfs.tar.xz -C bootfs/ ### copy kernel/dtb/dtbo image fit image work folder ### $ export FIT_IMAGE_DIR= $ cd bootfs/ $cp -r * $FIT_IMAGE_DIR -------------------------------- c).修改 FIT Image描述文件,一个示例说明部分如下,需要根据你实际存放 Linux Kernel/DTB/DTBO文件的位置来修改文件“data”参数本文使用的完整描述文件模板请从这里下载。 ./ fitImage-its--6.1.83+git0+0a32d33d5f-r0-verdin-am62-20240701094251.its -------------------------------- /dts-v1/; / { description = "Kernel fitImage for TDX Wayland with XWayland/6.1.83+gitAUTOINC+0a32d33d5f/verdin-am62"; #address-cells = ; images { kernel-1 { description = "Linux kernel"; data = /incbin/("$FIT_IMAGE_DIR/Image.gz"); type = "kernel"; arch = "arm64"; os = "linux"; compression = "gzip"; load = ; entry = ; hash-1 { algo = "sha512"; }; }; fdt-ti_k3-am625-verdin-nonwifi-dahlia.dtb { description = "Flattened Device Tree blob"; data = /incbin/("$FIT_IMAGE_DIR/k3-am625-verdin-nonwifi-dahlia.dtb"); type = "flat_dt"; arch = "arm64"; compression = "none"; load = ; hash-1 { algo = "sha512"; }; }; ... ... -------------------------------- d).生成 FIT Image ./由于在生成 FIT Image的时候需要同时将 Public Key信息嵌入到 u-boot.dtb,因此这里需要找到 U-Boot默认的 dtb文件。根据 U-Boot编译 default configuration来确认默认的 dtb文件即为 "arch/arm/dts/k3-am625-verdin-wifi-dev.dtb" -------------------------------- $vi $UBOOT_DIR/configs/verdin-am62_a53_defconfig ... CONFIG_DEFAULT_DEVICE_TREE="k3-am625-verdin-wifi-dev" ... -------------------------------- ./在 FIT Image work folder通过下面命令生成签名的 FIT Image -------------------------------- $ mkimage -f fitImage-its--6.1.83+git0+0a32d33d5f-r0-verdin-am62-20240701094251.its -k $UBOOT_DIR/board/ti/keys -K $UBOOT_DIR/arch/arm/dts/k3-am625-verdin-wifi-dev.dtb -r fitImage -------------------------------- e).根据 4.d Build U-Boot for A53步骤,不修改任何 configuration的情况下,重新编译 U-Boot Image -------------------------------- $ cd $UBOOT_DIR ### Compile ### $ make BINMAN_INDIRS=$TI_LINUX_FW_DIR \ BL31=$TFA_DIR/build/k3/lite/release/bl31.bin \ TEE=$OPTEE_DIR/out/arm-plat-k3/core/tee-raw.bin $ cp tispl.bin ../ $ cp u-boot.img ../ -------------------------------- 6 ). 修改和部署 Yocto Linux BSP a).使用 4.d Build U-Boot for R5步骤生成的“tiboot3-am62x-hs-fs-verdin.bin”文件和 5.e步骤重新编译生成的“tispl.bin”和“u-boot.img”文件修改 Yocto Linux BSP对应的 Boot Images文件 -------------------------------- $ cdVerdin-AM62_Reference-Minimal-Image-Tezi_6.7.0+build.13/ $ rm tiboot3-am62x-hs-fs-verdin.bin tispl.bin u-boot.img $ cp .../tiboot3-am62x-hs-fs-verdin.bin . $ cp .../tispl.bin . $ cp .../u-boot.img . -------------------------------- b).将 5.d步骤生成的 FIT Image部署到刚才解压的Ycoto Linux BSP6 bootfs中,并重新创建bootfs压缩包 -------------------------------- ### copy FIT image to bsp rootfs folder ### $ cp$$FIT_IMAGE_DIR/fitImage.../Verdin-AM62_Reference-Minimal-Image-Tezi_6.7.0+build.13/bootfs/ ### remove default Linux kernel/dtb/dtbo files ### $ cd .../Verdin-AM62_Reference-Minimal-Image-Tezi_6.7.0+build.13/bootfs/ $ rm -rf Image.gz k3-am625-verdin-* overlays ### check bootfs files ### $ tree -L 1 . ├── boot.scr ├── fitImage └── overlays.txt ### compress new bootfs package ### $ tar Jcf ../Reference-Minimal-Image-verdin-am62.bootfs.tar.xz* ### clear bootfs $ cd .. $ rm -rf bootfs/ -------------------------------- c).修改BSP package中的“u-boot-initial-env-sd”文件,增加如下环境变量用于使能 U-Boot加载 FIT Image来启动 -------------------------------- ---a/u-boot-initial-env-sd2024-07-01 18:00:22.000000000 +0800 +++b/u-boot-initial-env-sd2024-09-12 16:35:02.000000000 +0800 @@ -30,6 +30,7 @@ kernel_addr_r=0x88200000 kernel_comp_addr_r=0x80200000 kernel_comp_size=0x08000000 +kernel_image=fitImage load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile} loadaddr=0x88200000 mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi -------------------------------- d).需要注意的是由于Kernel阶段的Secure Boot相关认证和加载都是基于U-Boot环境变量来实现的, 因此如果要让这个启动机制更加安全可靠,则要让U-Boot保持在上述安全启动路径,而不能通过其他启动介质或者脚本来启动而绕开 Secure Boot,比如 Toradex U-Boot默认是使能 Distro Boot功能的,可以自动扫描外设介质的启动脚本,那么这个功能就需要关闭掉,类似这样的 U-Boot定制化和启动路径固化可以参考如下文章,本文不做进一步介绍。 https://developer.toradex.cn/torizon/security/u-boot-hardening-for-secure-boot/ e).如果你的 Linux BSP Image是通过 Yocto Project编译生成,那么如下是一个 Toradex Security Meta Layer,你可以直接将其集成到你的 Yocto Project编译环境中,然后按照说明配置后直接生成签名甚至加密好的 BSP Image。 https://github.com/toradex/meta-toradex-security 7 ).部署 测试 a).参考这里将上述制作完成数字签名的 BSP Image通过 Toradex Easy Installer更新到 Verdin AM62模块。因为本文测试基于 TI已经预先烧写到 SoC的 dummy key,所以可以直接启动测试,如果是使用 Customized Key,则还需要参考后续 eFuse烧写操作将 Customized Key烧写到 SoC才能正确验证并启动。 ./启动后查看启动log,可以看到 Boot Images和 Linux FIT Image (Kernel Image/DTB/DTBO) Secure Boot验证签名成功并最终完整启动 -------------------------------- U-Boot SPL 2023.04-28170-gc997b1b09fb (Sep 10 2024 - 17:41:33 +0800) SYSFW ABI: 4.0 (firmware rev 0x000a '10.0.8--v10.00.08 (Fiery Fox)') Changed A53 CPU frequency to 1250000000Hz (T grade) in DT SPL initial stack usage: 13472 bytes Trying to boot from MMC1 Authentication passed // ATF authentication Authentication passed // TEE authentication Authentication passed // DM-FW authentication Loading Environment from nowhere... OK init_env from device 9 not supported! Authentication passed // A53 SPL authentication Authentication passed // A53 SPL DTB authentication Starting ATF on ARM64 core... NOTICE: BL31: v2.11.0(release):v2.10.0-1555-g8e9bdc5b1 NOTICE: BL31: Built : 17:04:05, Aug 30 2024 ... U-Boot SPL 2023.04-28170-gc997b1b09fb (Sep 12 2024 - 16:56:27 +0800) SYSFW ABI: 4.0 (firmware rev 0x000a '10.0.8--v10.00.08 (Fiery Fox)') SPL initial stack usage: 1904 bytes Trying to boot from MMC1 Authentication passed // A53 u-boot authentication Authentication passed // A53 u-boot DTB authentication U-Boot 2023.04-28170-gc997b1b09fb (Sep 12 2024 - 16:56:27 +0800) SoC: AM62X SR1.0 HS-FS DRAM: 1 GiB Core: 143 devices, 31 uclasses, devicetree: separate ... Found U-Boot script /boot.scr 6003 bytes read in 10 ms (585.9 KiB/s) ## Executing script at 90280000 82 bytes read in 9 ms (8.8 KiB/s) 8918270 bytes read in 78 ms (109 MiB/s) Bootargs: root=PARTUUID=33e36968-02 ro rootwait console=tty1 console=ttyS2,115200 consol0 ## Loading kernel from FIT Image at 90300000 ... Using 'conf-ti_k3-am625-verdin-wifi-dev.dtb' configuration Verifying Hash Integrity ... sha512,rsa4096:custMpk+ OK // Kernel Image authentication Trying 'kernel-1' kernel subimage Description: Linux kernel Type: Kernel Image Compression: gzip compressed Data Start: 0x90300108 Data Size: 8305029 Bytes = 7.9 MiB Architecture: AArch64 OS: Linux Load Address: 0x80200000 Entry Point: 0x80200000 Hash algo: sha512 Hash value: 1eae3ec7c7d250d709d07f8af174e8de9c2293a9a61683f1f1a4f5981e96dc9ab090cc Verifying Hash Integrity ... sha512+ OK ## Loading fdt from FIT Image at 90300000 ... Using 'conf-ti_k3-am625-verdin-wifi-dev.dtb' configuration Verifying Hash Integrity ... sha512,rsa4096:custMpk+ OK // Kernel DTB authentication Trying 'fdt-ti_k3-am625-verdin-wifi-dev.dtb' fdt subimage ... Verifying Hash Integrity ... sha512+ OK Loading fdt from 0x90b40bd0 to 0x83000000 ## Loading fdt from FIT Image at 90300000 ... Using 'conf-verdin-am62_dsi-to-hdmi_overlay.dtbo' configuration Verifying Hash Integrity ... sha512,rsa4096:custMpk+ OK // DTBO authentication Trying 'fdt-verdin-am62_dsi-to-hdmi_overlay.dtbo' fdt subimage ... Verifying Hash Integrity ... sha512+ OK ## Loading fdt from FIT Image at 90300000 ... Using 'conf-verdin-am62_spidev_overlay.dtbo' configuration Verifying Hash Integrity ... sha512,rsa4096:custMpk+ OK // DTBO authentication Trying 'fdt-verdin-am62_spidev_overlay.dtbo' fdt subimage ... Verifying Hash Integrity ... sha512+ OK Booting using the fdt blob at 0x83000000 Working FDT set to 83000000 Uncompressing Kernel Image Loading Device Tree to 0000000098ec8000, end 0000000098edc6b5 ... OK Working FDT set to 98ec8000 Starting kernel ... Booting Linux on physical CPU 0x0000000000 Linux version 6.1.83-6.7.0+git.0a32d33d5fb7 (oe-user@oe-host) (aarch64-td4 Machine model: Toradex Verdin AM62 WB on Verdin Development Board ... -------------------------------- b). AM62x SoC eFuse烧写以及将设备从 HS-FS转换为 HS-SE状态 ./ eFuse烧写流程详细烧写流程可以参考这里。 ./首先下载安装最新 TI MCU+ SDK,以及对应版本的 CCS和 sysconfig工具到 Linux开发主机 (推荐为 ${HOME}/ti/ )目录,详细过程参考上面的文章链接。 ./安装 TI OTP Keywriter工具软件和使用指南,这些是 secure资料,需要在 TI网站上面注册申请通过后才能获取。安装路径为 /mcu_plus_sdk_am62x_10_00_00_14/source/security。OTP Keywriter的详细使用指南文档是 AM62X_OTP_Keywriter_User_Guide。 -------------------------------- $ tree -L 2 ~/ti/mcu_plus_sdk_am62x_10_00_00_14/source/security/ /home/simon/ti/mcu_plus_sdk_am62x_10_00_00_14/source/security/ ├── sbl_keywriter │├── am62x-sk │├── boardcfgs │├── keywr_bin │├── manifest │├── scripts │└── tools ├── uninstall └── uninstall.dat -------------------------------- ./生成 X.509 Certificate // Keywriter预置 TI dummy key,因此如果是基于 TI dummy key set进行生成,则命令如下。注意“--keyrev”参数,只要这个参数被烧写到了 eFuse上面,那么这个设备就立即转化为 HS-SE状态,所有 secure boot限制将都生效,设备也无法再次刷写其他 key信息,因此此过程可以分步或者一次进行,前期测试阶段建议分步,先烧写 key,进行验证通过后,再进行 keyrev烧写,将设备变更为 HS-SE状态。 -------------------------------- ### Generate X.509 certificate ### ### Option-1, step by step $ cd /mcu_plus_sdk_am62x_10_00_00_14/source/security/sbl_keywriter/scripts/cert_gen/am62x ## Generate certificate for programming MSV(Model Specific Value) and TI dummy key sets, but not turn device into HS-SE $ ./gen_keywr_cert.sh -t tifek/ti_fek_public.pem --msv 0xC0FFE -b-def --bmek-def -s-def --smek-def --keycnt 2 ## Generates certificate for setting the program key revision to 1 ./gen_keywr_cert.sh -t tifek/ti_fek_public.pem --keyrev 1 ### Option-2, one-shot ## programming MSV, key sets, and turn device into HS-SE in one shot command $ ./gen_keywr_cert.sh -t tifek/ti_fek_public.pem --msv 0xC0FFE -b-def --bmek-def -s-def --smek-def --keycnt 2 --keyrev 1 ### Convert certificate binary to .h format ### $ cd /mcu_plus_sdk_am62x_10_00_00_14/source/security/sbl_keywriter/scripts/x509cert $ python3 ../../../../../tools/bin2c/bin2c.py final_certificate.bin keycert.h KEYCERT 2024 -------------------------------- //如果是基于 customized key set,则要将相关命令修改如下: -------------------------------- ### Copy customized key set for keywriter ### $ cd /mcu_plus_sdk_am62x_10_00_00_14/source/security/sbl_keywriter/scripts/cert_gen/am62x $ cp $Customer_KEYS_DIR/custMpk.key keys_devel/smek.key $ cp $Customer_KEYS_DIR/custMpk.pem keys_devel/smpk.pem $ cp $Customer_KEYS_DIR/backMpk.key keys_devel/bmek.key $ cp $Customer_KEYS_DIR/backMpk.pem keys_devel/bmpk.pem ### Generate X.509 certificate ### ### Option-1, step by step $ cd /mcu_plus_sdk_am62x_10_00_00_14/source/security/sbl_keywriter/scripts/cert_gen/am62x ## Generate certificate for programming MSV(Model Specific Value) and TI dummy key sets, but not turn device into HS-SE $ ./gen_keywr_cert.sh -t tifek/ti_fek_public.pem --msv 0xC0FFE -b keys_devel/bmpk.pem --bmek keys_devel/bmek.key -s keys_devel/smpk.pem --smek keys_devel/smek.key --keycnt 2 ## Generates certificate for setting the program key revision to 1 ./gen_keywr_cert.sh -t tifek/ti_fek_public.pem --keyrev 1 ### Option-2, one-shot ## programming MSV, key sets, and turn device into HS-SE in one shot command $ ./gen_keywr_cert.sh -t tifek/ti_fek_public.pem --msv 0xC0FFE -b keys_devel/bmpk.pem --bmek keys_devel/bmek.key -s keys_devel/smpk.pem --smek keys_devel/smek.key --keycnt 2 --keyrev 1 ### Convert certificate binary to .h format ### $ cd /mcu_plus_sdk_am62x_10_00_00_14/source/security/sbl_keywriter/scripts/x509cert $ python3 ../../../../../tools/bin2c/bin2c.py final_certificate.bin keycert.h KEYCERT 2024 -------------------------------- ./生成 keywriter binary - tiboot3.bin -------------------------------- ###createcompiler softlink### $ cd $ ln -s ccs1271/ccs/tools/compiler/ti-cgt-armllvm_3.2.2.LTS ti-cgt-armllvm_3.2.2.LTS ###Generate binary### $ cd /mcu_plus_sdk_am62x_10_00_00_14/source/security/sbl_keywriter/am62x-sk/r5fss0-0_nortos/ti-arm-clang $ make -sj clean PROFILE=debug $ make -sj PROFILE=debug -------------------------------- ./将 tiboot3.bin通过 USB DFU模式加载运行起来,具体的命令可以参考这里,只是需要注意的是由于烧写 eFuse的过程中还需要 AM62X SoC VPP管脚上拉到 1.8V同时具备至少 400mA瞬态电流负载能力,因此需要在载板上面部署相应的硬件设计,以保证仅在烧写 eFuse的时候拉高 VPP管脚同时提供足够的瞬变电流,而在其他任何时候 VPP管脚都是拉低的状态。参考如下 TI AM62 SK开发板设计,如图一布置了一个单独的 LDO电源芯片(TLV75518PDQNR)来给 VPP管脚提供 400mA/1.8V供电,正式由于极高的瞬变电流负载需求,load switch或者 DC/DC电源是不建议使用的;而 LDO的开关则通过 VPP_LDO_EN信号来控制。如图二,则是 AM62X SoC通过 I2C总线连接了一个 GPIO Expander芯片来扩展 GPIO管脚提供 VPP_LDO_EN信号控制。 //对于 IO Expander VPP_LDO_EN GPIO管脚的控制软件代码请参考 MCU+ SDK如下文件,你也可以根据你的实际载板设计来相应修改适配。 /mcu_plus_sdk_am62x_10_00_00_14/source/security/sbl_keywriter/am62x-sk/r5fss0-0_nortos/board.c 8 ).总结 本文基于 TI AM62X处理器简单演示了 Secure Boot流程,涉及 Boot Images和 Linux Kernel/DTB,至于 Rootfs的加密,则需要配置类似 Squashfs只读文件系统配合 Initramfs RAM Disk镜像进行加解密挂载启动,可以结合参考如下两篇文章和相关 meta-toradex-security layer数据参考,本文不做具体测试。 ./嵌入式 ARM 平台使用dm-crypt加密磁盘分区 ./使用Squashfs和Overlayfs提高嵌入式Linux文件系统可靠性 ./https://github.com/toradex/meta-toradex-security ​
  • 热度 3
    2024-7-28 08:10
    432 次阅读|
    0 个评论
    TI 微控制器 (MCU) 是一款具有高效、可扩展性能的微控制器,适用于从简单控制到高级数据分析的各种应用。其产品系列包括低功耗 MSP MCU、高性能 C2000™ 实时控制器和用于功能安全的 32 位 Hercules™ ARM® MCU 以及 Cortex®-M4 MCU。 TI MCU 产品系列在现代嵌入式设计中提供了多种选择,满足不同需求。从低功耗的 MSP MCU 到高性能的 C2000 实时控制器,再到专为功能安全设计的 Hercules™ MCU 和 Cortex-M4 MCU,TI 的产品涵盖了广泛的应用领域。以下是从几个方面进行具体介绍: 1. 低功耗 MSP MCU:MSP MCU以其低功耗特性而闻名,适合用于电池供电的便携式设备和需要长时间待机的应用。例如,MSPM0C/MSPM0L系列提供多达64KB闪存和4KB SRAM,并具有多种封装选项,适用于基本应用。 2. 高性能 C2000™ 实时控制器:C2000™ 实时控制器专门设计用于实时控制应用,如数字电源管理和电机控制。这些高性能MCU支持从简单的电机控制到复杂的多轴伺服驱动器和高效电源拓扑结构。 3. 32位功能安全的Hercules™ ARM® MCU:Hercules™ MCU是市场上首款通过TÜV SÜD认证,达到ISO 26262安全标准ASIL D和IEC 61508 SIL 3级别的ARM Cortex-R MCU。它们广泛应用于需要高可靠性和安全性的汽车和工业应用。 4.Cortex®-M4 MCU:Cortex®-M4 MCU结合了高性能和高效的信号处理能力,适用于需要复杂计算和控制功能的应用。它们提供了灵活的配置选项,以满足各种市场需求。 综上所述,TI 的MCU产品系列不仅功能强大、多样化,还通过强大的内部制造能力和广泛的生态系统支持,确保了产品的高可靠性和易于开发的特性。
相关资源