tag 标签: m4

相关博文
  • 2025-3-21 10:51
    343 次阅读|
    0 个评论
    B y Toradex 胡珊逢 简介 Apalis iMX8QM 使用了 NXP 的 iMX8 Quad Max 处理器。该 CPU 提供 A72 和 A53 Application Processor 和 M4 MCU。文章将介绍如何在硬件层面上隔离 AP 和 MCU 的资源,从而提高系统的可靠性。 System Controller Unit (SCU)System Controller Unit 是 iMX8 Quad Max 处理器上的一个专用 M4 核,连接 PMIC 和控制处理器上的子系统,为处理器的硬件功能提供抽象接口,供子系统使用。其主要管理以下功能和资源: 系统初始化与启动系统控制器通信电源管理资源管理引脚配置定时器中断处理 默认情况下,AP 核和 M4 核均能够使用 Apalis iMX8QM 的所有资源,包括 DDR RAM。SCU 可以通过分区 partition 的方式,将 AP 和 M4 之间,以及两个 M4 核之间所使用的资源从硬件上隔离开。一个分区中除了处理器核心外,还可以有外设、引脚 Pads 和内存区域。处理器核只能访问位于同一个分区内的资源。如果尝试访问其他分区的资源,则会返回总线错误。 当 AP 核和 M4 核在同一个分区时,AP 上的 Linux 虽然可以通过 reserved memory 方式不去使用相关 RAM 区域,但是直接物理地址访问的方式仍起作用。这对于 M4 端也是如此。使用 SCU 的分区,可以从底层规避该问题。除此之外,AP 和 M4 使用独立 Power Domain,在隔离分区情况下,对于 M4 的实时关键任务和 AP 上基于富操作系统 Linux 的应用独立运行提供可能。 在刚启动时,系统会划分三个分区。 SCU:包含所有运行 SCFW 固件所需的 Pads、外设和内存区域SECO:Security Controller 运行所需的相关资源Boot:系统剩余的所有资源如 Pads、外设和内存区域都将会划分到该分区 当系统继续启动时,如果不做进一步的分区,默认情况下 AP 和 M4 核都将运行在 Boot 分区中,它们之间只能通过软件的方式隔离各自的资源。为了实现 AP 和 M4 之间的硬件隔离,可以采用下面分区。 AP0:拥有运行 U-boot,Linux 的分区MCU0 和 MCU1:两个 Cortex-M4 核各自运行的分区Shared:共享资源的分区,例如将一段用于 rpmsg 通信的 RAM 区域划分到其中,AP 和 M4 就能够相互发送消息 分区的创建和资源划分在 SCU 的固件 SCFW 中调整。 SCU 固件 SCFW SCFW 的下载和编译方法参考 Build Custom i.MX 8/8X System Controller Firmware (SCFW) 。接下来将针对上面使用 AP0、MCU0、MCU1 和 Shared 分区案例进行说明。按照上面方法下载的 SCFW 源码中,mx8qm_apalis/board.c 已经包含上面分区的实现代码,所以无需额外的修改。在组装 Boot Container 时传入特定的 Flags 值可以启用。 在 platform/board/mx8qm_apalis/board.c 中配置分区和资源。宏定义 PARTITION_NAME 命令系统启动时的设置三个分区名字。 PARTITION_NAME (SC_PT, "SCU"); PARTITION_NAME (SECO_PT, "SECO"); PARTITION_NAME (pt_boot, "BOOT"); 检测标志位判断是否需要创建 AP0、MCU0、MCU1 和 Shared 分区。 if (alt_config != SC_FALSE) { 在需要进行分区时,PARTITION_NAME 设置相应分区的名称。 PARTITION_NAME (pt_boot, "AP0"); ... PARTITION_NAME (pt_m4_0, "MCU0"); ... PARTITION_NAME (pt_m4_1, "MCU1"); ... PARTITION_NAME (pt, "Shared"); 这里以 MCU0 分区为例, rsrc_list 中包含了划分到 MCU0 分区的资源,如 M4 中断、Message Unit、定时器等。 static const sc_rsrc_t rsrc_list = { SC_R_SYSTEM, SC_R_IRQSTR_M4_0, SC_R_MU_5B, SC_R_MU_7A, SC_R_MU_8B, SC_R_GPT_4, SC_R_SECO_MU_4 }; pad_list 中包含 MCU0 分区所使用的引脚范围。 static const sc_pad_t pad_list = { RM_RANGE (SC_P_M40_I2C0_SCL, SC_P_M40_GPIO0_01) }; 结合 sc_fw_api_qm_b0.pdf 文档,index 7~10 的引脚都将在划分到 MCU0 分区。 sc_rm_mem_list_t 配置了包括 RAM 在内的可使用存储空间。 static const sc_rm_mem_list_t mem_list = { {0x088000000ULL, 0x0887FFFFFULL}, {0x008081000ULL, 0x008180FFFULL} }; rm_partition_create 使用上面配置的所有资源创建 MCU0 分区。 BRD_ERR (rm_partition_create(pt_boot, pt_m4_0, SC_FALSE, SC_TRUE, SC_FALSE, SC_TRUE, SC_FALSE, SC_R_M4_0_PID0, rsrc_list, ARRAY_SIZE(rsrc_list), pad_list, ARRAY_SIZE (pad_list), mem_list, ARRAY_SIZE (mem_list))); 组装 Boot Container NXP i.MX 8QuadMax 处理器使用前面提到的 SCU 来启动系统。启动时除了加载 SCFW,它还可以加载 ATF 和 U-Boot,以及直接加载 M4 核的固件。Boot Container 组装方法参考 Specifics: Build U-Boot for NXP i.MX 8/8X-based SoMs 。默认情况下,如网页描述,使用下面命令组装 Boot Container。该方法生成的 flash.bin 文件中并不包含 M4 核的固件,并且 AP 和 M4 在同一个分区。M4 的固件在 U-Boot 启动时,使用 bootaux 命令从 eMMC 上加载后运行。 make SOC=iMX8QM flash_b0 为了使用上面 SCFW 中划分的分区,使用下面命令组装 Boot Container。 make SOC=iMX8QM flash_regression_linux_m4 编译目标来自 imx-mkimage/iMX8QM/soc.mak 中的定义。flash_regression_linux_m4: $(MKIMG) $(AHAB_IMG) \ scfw_tcm. bin u-boot-atf. bin m4_image. bin m4_1_image. bin \ ./$( MKIMG ) -soc QM -rev B0 -append $( AHAB_IMG ) \ -c -flags 0x00200000 -scfw scfw_tcm.bin \ -ap u-boot-atf.bin a53 0x80000000 \ -p3 -m4 m4_image. bin 0 0x34FE0000 \ -p4 -m4 m4_1_image. bin 1 0x38FE0000 \ - out flash.bin -flags 0x00200000 向 SCFW 的 board.c 传递,SCU 在启动时将会创建 AP0、MCU0、MCU1 和 Shared 的分区。 if (alt_config != SC_FALSE) { sc_fw_port.pdf 中说明了 Bit 21 SCFW_SC_BD_FLAGS_ALT_CONFIG 为更改 SCFW 配置的位,对应 0x00200000。 上面命令中 m4_image.bin 和 m4_1_image.bin 为两个 M4 各自的固件,从各自的 TCML 运行。因此,在执行上面命令前,需要把两个 M4 的固件复制到 imx-mkimage/iMX8QM 目录下。 如下修改 U-boot 源码中 U-boot/cmd/booti.c,重新编译后将 u-boot.bin 复制到 imx-mkimage/iMX8QM 目录下。 if (dest gd - ram_base || dest gd - ram_top) { puts ( "kernel_comp_addr_r is outside of DRAM range!\n" ); //return -EINVAL; } Linux device tree 更新 接下来的演示中,我们在 M4 上使用 multicore_examples/rpmsg_lite_pingpong_rtos 作为演示,在 AP 上的 Linux 系统中也需要开启 rpmsg 节点并加载驱动。针对 Apalis iMX8 BSP 7 的 imx8qm-apalis-v1.1-ixora-v1.2.dtb 需要打 该补丁 。 更新 Boot Container 文件 上面命令执行成功后生成的 flash.bin,需要更新到 Apalis iMX8 模块上的 eMMC 上。对于使用 Toradex Easy Installer 进行批量烧写或者重装系统,可以将 flash.bin 重名为 imx-boot,替换原来的烧录文件中 imx-boot。在开发期间,使用 U-Boot 直接更新 flash.bin 会更加方便,免于重装整个系统镜像。 将 flash.bin 复制到的一台 TFTP 服务器的下载目录中。然后在 U-Boot 中配置 Apalis iMX8 和 TFTP 服务器 IP 地址。 Apalis iMX8 # setenv ipaddr 192.168.3.181 Apalis iMX8 # setenv serverip 192.168.3.196 Apalis iMX8 # saveenv 使用 tftpboot 和 mmc 命令将 flash.bin 下载并写入到 eMMC 上。 mmc write $loadaddr 0 0x973 中最后的数值是写入的 block 数量。tftpboot 在下载时会显示文件大小,例如这里为 1238016 字节。需要写入的 block = (1238016+511)/512,计算结果向上取整,并转为十六进制数值。 Apalis iMX8 # tftpboot $loadaddr flash.bin Using ethernet @5b040000 device TFTP from server 192.168.3.196 ; our IP address is 192.168.3.181 Filename 'flash.bin' . Load address : 0 x95400000 Loading: ################################################## 1.2 MiB 3.4 MiB/s done Bytes transferred = 1238016 ( 12 e400 hex) Apalis iMX8 # mmc dev 0 1 Apalis iMX8 # mmc write $loadaddr 0 0x973 测试 在 U-Boot 中配置启动时加载的 device tree 文件。 Apalis iMX8 # setenv fdtfile imx8qm-apalis-v1.1-ixora-v1.2.dtbApalis iMX8 # saveenvApalis iMX8 # reset 启动后可以在 Linux 和两个 M4 的调试串口上看到启动内容。 Linux 中进入 kernel modules 驱动目录 kernel/drivers/rpmsg,加载 imx_rpmsg_pingpong.ko。两个 M4 上的固件在发现 rpmsg 通道后,自动向 Linux 发送消息。 # insmod imx_rpmsg_pingpong .ko ... get 91 ( src : 0 x1f) get 101 ( src : 0 x1e) imx_rpmsg_pingpong virtio1 .rpmsg-openamp-demo-channel .-1 .30 : goodbye ! get 93 ( src : 0 x1f) get 95 ( src : 0 x1f) get 97 ( src : 0 x1f) get 99 ( src : 0 x1f) get 101 ( src : 0 x1f) imx_rpmsg_pingpong virtio3 .rpmsg-openamp-demo-channel-1 .-1 .31 : goodbye ! 总结 文章介绍了如何使用 SCU 划分不同的分区,将 AP 和 M4 之间做硬件隔离,并使用 SCFW 直接加载 M4 的固件,不仅提高系统可靠性,也将 M4 运行提前到 U-Boot 之前,加快启动速度。更多关于 SCU 的高级高级功能,可以参考 SCFW 的说明文档。 ​
  • 热度 24
    2015-1-16 10:06
    1696 次阅读|
    0 个评论
             本人使用 keil 5 有一段时间了,发现 keil 5 真考虑周到,里面驱动库也帮你准备好了。这个新功能可以节省我们的时间,也可以让初学者能尽快上手和掌握这个芯片。大家以后既就可以很方便的建自己的工程模板了,再也不会为了找芯片的驱动库而烦恼。          今天外我来教大家来怎么使用这个建工程的利器吧。 首先是新建工程吧,如下图步骤:   因为我用的是 stm32f401 Necleo ,所以芯片型号应该要选择 stm32f401te, 选好芯片类型后,会弹出一个大的面板,如下图: 红色框里的都是一些集成在 keil 5 的启动文件, arm 内核的文件, st 公司的库函数和一些 API 等等。一个工程最起码也要选上 core 和 startup 两个选项,如下图: 然后选择 OK ,就建好了空白的工程。然后就要对工程做一些设置,如下图: 然后在你工程的路径新建一个 USE (这个大家可以随便建个文件,不一定是 USE 名字的)的文件夹,然后在里面新建一个 main.c 的文件,如下图: 然后新建的文件 main.c 添加到工程当中,步骤如下: 然后在 main.c 文件中添加如下代码: 到这里我们的空白工程建好了,后面我来教大家怎样加 keil 5 里自带的 st 库。首先我点击那个绿色的小图标,如下图:   点击后会弹出一个大的页面,然后找到 Device-StdPeriph Drivers 。如下图: 点开 StdPeriph Drivers 选项的加号图标,就可以看到 st 库目录下各外设的驱动文件,后面是他的版本说明,这是 V1.3 版本的,是比较新的,建议大家尽量使用新的库。 我这里就勾上了所有外设的驱动的文件,如下图: 然后点击 OK 后,就可以看到原先工程目录下的 Device 添加了刚才选择外设的驱动文件。添加完后大家不要急着编译工程,还有对工程进行相关的配置,否则如下图,编译不成功的: 接下来,我来配置下工程,右击 target ,然后进入配置工程的面板,步骤如下: 这里要填上 USE_STDPERIPH_DRIVER ,这就表明编译器选择了 st 的 库   然后我们来指定编译器头文件的路径         以上这两个路径是编译器编译时要找的路径,这几个头文件至关重要,这里编译器关联头文件所需要的。 当做完以上工作后,我们就可以来编译一下工程,在编译时,编译器就会根据我们的配置来编译驱动头文件和驱动的 C 文件。如下图: 当编译成功后会出现以下的信息:   下面我们要看看新的 stm32f4xx_conf.h 里的内容吧,如下图: 可以看出这跟旧版本的 stm32f4xx_conf.h 文件有些区别,在每个头文件这里多了个条件编译, 大家可以理解成开关吧,就是用来选择编译头文件用的,而这些开关都在 RTE_Components.h 这个头文件里,如下图: 编译完成后,可以看出 main.c 里包含了各驱动库的头文件,如下图: 做完以上工作后,我们就建好了一个基于库函数的模板了。 当大家编译完工程后,会发现工程目录里多出了好多文件,这是正常的,这是编译后产生的文件,如下图: 先把原来的产生的文件删除掉,删除后如下图:   现在我教大家怎样把这些文件指定每次编译后生成在指定的地方。 步骤如下: 首先还是进入工程配置的选项面板,然后在自己的工程目录里新建一个 Output 的文件,然后点击去,再点击 OK ,这样就代表告诉编译器器每次编译后生成的文件都会放在这个文件夹里。 这个跟上面的一样配置。 做好这些工作后,就可以编译工程了,编译完后生成的文件会保存在自己指定的那两个文件,如下图:     这样工程目录下的结构就清爽多了。    
  • 热度 20
    2015-1-16 10:06
    1317 次阅读|
    2 个评论
            Atmel 的 SAM4L-Xplained-Pro 套件的 MCU 是 cortex-m4 核,那么 IAR 肯定支持这款套件。于是我今天就那 IAR 演示了一个 GPIO 的例程。 关于 IAR 的版本,最好要比较新的,推荐用 7.3 版本的,这样会对这款的套件支持得教好,还有注意的一点是,大家下载 IAR 时,要选 ARM 版本的,因为每种不同的芯片的 IAR 是不同的,如有 IAR for 430 , IAR for stm8 等等。 这是我电脑上 IAR 的版本,如图: 关于 IAR 的例程,大家可以进去这个链接里下载: http://www.atmel.com/tools/AVRSOFTWAREFRAMEWORK.aspx 就是下这个 Atmel Software Framework 3.19 的压缩包就可以了。 这个例程支持多种型号和套件的。我们的 SAM4L-Xplained-Pro 套件的例程的所在位置如下图: 把 GPIO 的打开后的后,我来说说 IAR 要注意的地方吧,在顶端,画着红色方框的位置是你打开以下文件的历史,如果嫌文件打开得很多,可以在某个文件上右击,可以选择单个文件关闭或者全部关掉。   还有在 IAR 编译器的最右方,也可以查看你以前打开过的文件的历史。             关于 IAR 的使用,我就简单说说吧。     图上画着红色框的是编译按钮,第一个是所在文件的编译,第二个是整个工程编译,一般我们是用第二个按钮的。画着黄色框的是下载并仿真的按钮。点击它就可以对板子进行硬件仿真并下载程序,前提是你要有仿真器。画着绿色框的仿真不下载,这个只是仿真,程序不会吓到单片机里的。 接下来,要注意的是编译器的仿真器的选择,仿真器的选择如下图: 当点击仿真时,编译器会切换到仿真的界面,如下图: 画这红色方框的功能按钮,我就不多说了,跟其他的编译器也是大同小异的。 这个例程的功能是一上电,板子的串口会向电脑打印一些相关的信息,然后可以通过按下板子上的 SWO 键可以控制 LED0 的亮灭。 上电时打印信息如下图: 大家要注意的是例程串口的波特率是设置位 115200 的,管脚是 PORTC26 和 PORTC27 ,如下图: 在例程的 init.c 的文件里还有很多外设的初始化,大家可以通过在 conf_board.h 文件宏定义一个 #if defined (XXXXXXX) 括号里的参数就可以了,就如例程里初识化串口,如下图: 还有一个使用频率很高的功能,就是查找 XXX 定义的来源,当你想查某个变量或者这个函数是出自于哪里,可以使用这个功能,具体操作方法是把鼠标停在你想查看的函数中,然后右击鼠标,选择如 板子的串口接线如下图:  
  • 热度 25
    2015-1-16 10:05
    1232 次阅读|
    0 个评论
        当今能源紧缺的背景下,低功耗就显得尤为重要。今天用到了 SAM4L Xplained Pro starter kit 套件的 Segment LCD1 Xplained Pro 首先普及一下什么是段码液晶吧:          段码液晶,或段式液晶屏,是液晶产品中的一种,但在液晶行业内,一般称为图案型液晶屏,笔段式液晶屏,单色液晶屏等等。        段码液晶叫法起源于早期液晶显示屏开始应用之时,主要是替代 LED 数码管(由 7 个笔段组成,用于显示数字 0 ~ 9 ),如计算器、钟表等,显示内容均为数字,也较简单。   用途 仪器、仪表:煤气表、水表、公交系统、加油机计数 显示屏 办公设备:传真机、打卡机、考勤机、门禁系统 通讯设备:各种 IC 卡电话、网络电话、 IP 电话 银行系统: POS 机 税务系统:税控机 医疗设备:生理监护仪及各类保健器械 工控设备:自动化控制 各种人机界面 , 手持设备等   可以看出段码液晶的用途还挺多的,而 Segment LCD1 Xplained Pro 功耗比较低,只有 40ma 如下图接上官方编译器是出现的信息:   Segment LCD1 Xplained Pro 能显示数字 0~9 ,还有几个符号,如官方提供的符号如下图: 接口对应的定义 官方 Segment LCD1 Xplained Pro 模块详细信息: 我现在用的官方例程跑跑个演示: 使用的编译环境是官方的 Atmel Studio 。 程序首先是系统时钟初始化,调用 sysclk_init(); 函数 然后是板级初始化,调用 bord_init(); 函数 接着是配置串口,调用前面的 configure_console(); 函数。 程序执行完这些后,单片机的串口就会向电脑上打印一些信息,如下图: 然后串口就会一直等待用户输入信息: 当我们用串口发送 c 字符时,就会执行清屏操作; 当我们用串口发送 h 字符时,就会执行显示操作; 当我们用串口发送 1 字符时,就会执行显示 1 到 6 的数字; 当我们用串口发送 2 字符时,就会执行显示 10:23 这个时间效果; 当我们用串口发送 3 字符时,就会执行显示文本滚动的效果; 大家要注意的是 PC 发送和接受都选择文本类型。 如下图: 输入 h 字符是   输入 c 字符: 输入 1 字符 输入 2 字符 输入 2 字符:   Segment LCD1 Xplained Pro 扩展模块显示还是很赞滴。  
  • 热度 20
    2013-3-22 09:45
    2037 次阅读|
    2 个评论
    5M4 pi型 穿心电容 一、 标称容量Capacitance : 1000pF X 2   电感容量Ferrite Inductance :typical 1.7μH ±20%   电容公差Capacitance Tolerance :+20%,-20%   滤波电路Circuit :Pi   二、工作电流Rated Current :10A   三、工作电压Working Voltage :200VDC   四、耐电压Dielectric Withstanding Voltage:600VDC   五、绝缘电阻Insulation Resistance:10000M Ohms   六、耗散因数Dissipation Factor: 3.0%   七、安装方式 Installation:螺纹式 Screw   八、螺纹直径公制Thread Size : 5M4 * 0.7mm   九、型号Part Number:1000pF RTF-76-006-5M4X 0.7 PI   十、插入损耗Insertion Loss: CKT Min Minimum Insertion Loss(dB) Cap         1MHz 10MHz 100MHz 300MHz 1GHz 10GHz Pi 1000pF 8       12          50           60           70     70        RTF-76-006  
相关资源
  • 所需E币: 0
    时间: 2023-7-29 17:26
    大小: 350.94KB
    上传者: Argent
    《十天学会LM4F232,玩转CORTEXM4》ADC内部温度
  • 所需E币: 0
    时间: 2023-7-29 17:26
    大小: 551.77KB
    上传者: Argent
    《十天学会LM4F232,玩转CORTEXM4》定时器
  • 所需E币: 1
    时间: 2023-7-1 20:15
    大小: 61.3MB
    上传者: Argent
    【正点原子】STM32MP1M4裸机CubeIDE开发指南V1.5.2
  • 所需E币: 1
    时间: 2023-7-1 20:17
    大小: 49.27MB
    上传者: Argent
    【正点原子】STM32MP1M4裸机HAL库开发指南V1.2.2
  • 所需E币: 0
    时间: 2022-3-26 02:13
    大小: 136KB
    上传者: 东亚安防
    产品特点‘本产品选用美国PIC单片机设计,抗干扰性极强,配合优化的控制软件,使本产品从不死机。完全取代云台原控制板,实现电机控制及云台自动功能。将限位开关由原来的控制电机,改为控制继电器线圈,大大降低了限位开关的电压和电流,从而延长限位开关的使用寿命。极好的协议适应性:对国内大多数常用协议,均能自动识别;特殊协议,如曼码等,可通过DIP开关设置。超小内置板尺寸(66mm*78mm),更能满足大多数6”云台。具备云台、镜头输出超时保护功能:解码器在执行云台、镜头命令后,限定时间内(云台60秒,镜头10秒)未收到相应的停止命令,云台、镜头输出自动关断。微动功能(适用SYYT协议):在长焦状态下,使用常规命令,云台及镜头很难准确定位,而本解码板可接收控制设备发出的微动命令,执行微动操作,实现云台、镜头的精确定位。
  • 所需E币: 0
    时间: 2020-9-18 11:02
    大小: 6.05MB
    上传者: czd886
    三天入门M4——Kinetis(V2.2)
  • 所需E币: 2
    时间: 2020-2-24 12:17
    大小: 139.26MB
    上传者: 星空下的屋顶
    ARMCortexM3andM4权威指南.pdf