tag 标签: 工控板

相关博文
  • 2024-12-3 10:24
    37 次阅读|
    0 个评论
    作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了! 没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢? 1.1USB扩网口 通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、YT9215等。但是,如果你需要扩展的网口完全独立MAC,且成本可控,那通过USB扩展也将是个不错的选择。 图1多网口板卡 常见的USB扩网口芯片有LAN9730、AX88179、RTL8211等,可根据情况选择USB2.0或USB3.0扩展出百兆、千兆网口。 1.2USB扩WIFI 这是比较常见的使用方法了。常见的WIFI模块预留的通信接口有USB、SDIO、UART/SPI,对于有些SDIO资源局促的芯片,通过USB扩展WIFIT功能显得顺理成章,且USB能满足更高的通信速率。RTL8821、RTL8188等相关型号。 图2常见的WIFI模块 1.3USB扩SATA 大多数中低端处理器不支持SATA或PCIE总线,如果需要大容量的外部存储,就需要考虑扩展实现。是的,通过外部插入TF卡能满足大部分使用要求,但如果你对通信速率稍有要求、对存储容量有较大要求,请关注下使用USB扩展SATA方案,如SPIF225A、JM20329、PL-2571。需要注意的是,受制于芯片先择和电路设计,该方案的传输速率仍旧有限。 1.4USB扩串口 这种需求在工业领域也比较常见,像数据采集器、通信管理机等产品上多有10个以上的RS232/RS484的需求。除了常见的SPI扩展UART的思路,通过USB对其扩展也是一个不错的路线。CH9344、CH348、FE1.1S等都比较常用,可根据需求数量合理选择。 1.5USB扩SPI/IIC 这个扩展方式对于MPU来说可能并不常用,对于大多少场景来说,SPI/IIC的资源数是够用的。如果有此需求,推荐参考CH347,高速USB转接芯片,可实现USB转SPI、USB转I2C、USB转JTAG等功能。 1.6USB扩USB 显然,USB这么好用,定有数量不足的情形。扩展USB就是常见的USBHUB方案了,如4/6/8口的HUB芯片。此外,HUB芯片也很容易实现级联扩展。使用HUB方案进行多口扩展时,务必留意速率瓶颈。此处可参考USB2514、FE1.1、USB5744等。 像4G模组、USB摄像头、触摸屏信号等也都是通过USB通信实现交互。由此可见,USB接口真是我们工控领域的扩展能手。不过,在成本预算充足的情况下,还是建议您选择外设资源丰富的处理器。毕竟,原生的资源才最能保证稳定和性能。 我们专注于嵌入式ARM软硬件的设计与生产,欢迎广大开发工程师随时沟通交流!
  • 热度 4
    2024-4-18 14:08
    370 次阅读|
    0 个评论
    HD-RK3568-OPS主板基于HD-RK3568-CORE 工业级核心板设计,搭载1.8GHz主频的高性能ARM处理器,适用于工业现场应用需求。主板支持标准OPS接口、支持前后HDMI双路输出,具有即插即用、操作简单的特点,亦适用于数字标牌、自助终端、教育一体机等应用场景。 ​ 主要功能包括: OPS标准接口 支持单独1路HDMI接口 集成2路100M/1000M自适应以太网接口 集成Wi-Fi 集成2路USB Host 支持1路TF卡接口 支持音频(耳机、MiC) 支持2路RS485和1路RS232接口 支持4G/5G Mini-PCIE接口 支持红外功能 支持实时时钟与后备电池 支持蜂鸣器与板载LED 1路TTL调试串口 直流+12V电源供电 Open Pluggable Specification(OPS)是一种计算模块插件格式,该格式于2010年由NEC,英特尔和微软首次公布,主要用于为计算机增加计算能力。OPS格式的计算模块可在基于Intel和ARM的CPU上运行,运行的操作系统包括Windows、Android及Linux系统中。 主板中J21为标准OPS接口,其管脚定义如下: 引脚 名称 说明 引脚 名称 说明 1 DDP_3N eDP数据信号 41 +12V~+19V Power 2 DDP_3P eDP数据信号 42 +12V~+19V Power 3 GND Ground 43 +12V~+19V Power 4 DDP_2N eDP数据信号 44 +12V~+19V Power 5 DDP_2P eDP数据信号 45 RSVD RSVD 6 GND Ground 46 RSVD RSVD 7 DDP_1N eDP数据信号 47 GND Ground 8 DDP_1P eDP数据信号 48 GND Ground 9 GND Ground 49 DEVICE RST 扩展设备复位信号 10 DDP_0N eDP数据信号 50 SYS_FAN 风扇控制 11 DDP_0P eDP数据信号 51 UART_RXD 串口接收 12 GND Ground 52 UART_TXD 串口发送 13 DDP_AUXN eDP辅助信号 53 GND Ground 14 DDP_AUXP eDP辅助信号 54 StdA_SSRX- USB3.0接收- 15 DDP_HPD eDP热插拔 55 StdA_SSRX+ USB3.0接收+ 16 GND Ground 56 GND Ground 17 TMDS_CLK- HDMI时钟信号 57 StdA_SSTX- USB3.0发送- 18 TMDS_CLK+ HDMI时钟信号 58 StdA_SSTX+ USB3.0发送+ 19 GND Ground 59 GND Ground 20 TMDS0- HDMI数据信号 60 USB_PN2 USB2.0 21 TMDS0+ HDMI数据信号 61 USB_PP2 USB2.0 22 GND Ground 62 GND Ground 23 TMDS1- HDMI数据信号 63 USB_PN1 USB2.0 24 TMDS1+ HDMI数据信号 64 USB_PP1 USB2.0 25 GND Ground 65 GND Ground 26 TMDS2- HDMI数据信号 66 USB_PN0 USB2.0 27 TMDS2+ HDMI数据信号 67 USB_PP0 USB2.0 28 GND Ground 68 GND Ground 29 DVI_DDC_DATA DDC数据信号 69 LINEOUT_L 音频左声道 30 DVI_DDC_CLK DDC时钟信号 70 LINEOUT_R 音频右声道 31 DVI_HPD HDMI热插拔 71 CEC CEC 32 GND Ground 72 PB_DET 可插拔检测 33 +12V~+19V Power 73 PS_ON# 可插拔信号开启 34 +12V~+19V Power 74 PWR_STATUS PowerGood 35 +12V~+19V Power 75 GND Ground 36 +12V~+19V Power 76 GND Ground 37 +12V~+19V Power 77 GND Ground 38 +12V~+19V Power 78 GND Ground 39 +12V~+19V Power 79 GND Ground 40 +12V~+19V Power 80 GND Ground
  • 热度 6
    2023-3-1 11:51
    917 次阅读|
    0 个评论
    本章节内容是为评估板串口安装USB转串口驱动程序。驱动适用于CH340、CH341等USB转串口芯片。 USB转串口驱动安装 适用安装环境:Windows 7 64bit、Windows 10 64bit。 本文测试板卡为创龙科技SOM-TL64x核心板,它是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F设计的多核工业级核心板, 通过工业级B2B连接器引出5x TSN Ethernet、9x UART 、2x CAN-FD、GPMC、PCIe/USB 3.1等接口。 核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 用户使用核心板进行二次开发时,仅需专注上层运用 ,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。 请通过Micro USB线将评估板的调试串口(USB TO UART0)与PC机USB接口相连,并打开PC设备管理器,找到USB Serial,右键选择“更新驱动程序(P)”,如下图所示。 图 1 选择“浏览我的电脑以查找驱动程序(R)”,如下图所示。 图 2 选择产品资料“4-软件资料\Tools\Windows\CH341SER.zip”解压后的文件夹路径,点击“下一步(N)”,如下图所示。 图 3 提示安装成功后,可在PC设备管理器中查看到USB转串口驱动,如下图所示。 图 4 图 5 如依然无法正常安装,可使用驱动精灵、鲁大师等第三方软件联网安装USB转串口驱动。如果驱动正常但连接依然失败,请检查USB连接线是否正常。 系统调试工具SecureCRT安装 本章节内容是为评估板安装系统调试工具软件SecureCRT。SecureCRT调试工具的主要用途是通过串口或网口对评估板系统信息进行查看、对评估板系统进行调试等。 适用安装环境:Windows 7 64bit、Windows 10 64bit。 安装软件 解压产品资料的“ 4-软件资料\Tools\Windows \VanDyke.SecureCRT.zip”压缩包 。 64位计算机请双击安装解压目录中的"VanDyke.SecureCRT\x64\scrt725-x64_tt7z.com.exe"安装程序。 32位计算机请双击安装解压目录中的"VanDyke.SecureCRT\x86\scrt725-x86_tt7z.com.exe"安装程序。 弹出如下解压进度条。 图 6 解压完成后,弹出如下安装界面。 图 7 点击Next,弹出如下对话框。 图 8 点击第一个"I accept the terms in the license agreement"选项,同意安装协议,然后点击Next,弹出如下对话框。 图 9 点击第一个"Common profile(affects all users)"选项,然后点击Next,弹出如下对话框。 图 10 点击Custom选项,然后点击Next,弹出如下安装路径。 图 11 点击"Change…"选项,选择SecureCRT的安装路径(推荐使用英文安装路径),然后点击Next,弹出如下对话框。 图 12 勾选"Create a program group for SecureCRT"、"Add a desktop shortcut for SecureCRT"选项,然后点击Next,弹出如下界面。 图 13 点击Install,弹出如下进度条。 图 14 安装过程持续约1min,安装完成后弹出界面。 图 15 点击Finish即可完成安装。完成后,需输入License序列号方可正常使用,请自行购买License。 串口连接设置 如下步骤适用于串口调试方式。 Quick Connect…",进入连接配置界面。或直接点击"Quick Connect"快捷按钮,如下图所示。 图 16 图 1 7 在弹出对话框中,配置串口连接方式。Protocol选择Serial,Port选择相应COM口,波特率为115200,其他参数默认不变,最后点击Connect连接,如下图所示。 备注: COM口编号需要在Windows设备管理器“端口(COM和LPT)”处查看。 图 18 网口连接设置 如下步骤适用于网口调试方式。 打开"Quick Connect",参考上述“串口连接设置”相关步骤。 在弹出对话框中,配置网口连接方式。Protocol选择SSH2(SSH协议),Hostname后面方框填写评估板的IP地址,其他参数默认不变,最后点击Connect连接,如下图所示。 图 19 字符编码设置 为了保证系统调试工具支持中文显示,避免出现中文乱码,请进行如下字符编码设置。 Appearance",Character encoding选择UTF-8,点击OK保存即可。 图 20 图 21 系统启动信息(Log)保存 在调试过程中,经常需对系统启动信息(Log)进行保存。 Log Session",进入Log保存配置界面,选择Log保存路径后点击“保存”,如下图所示。 图 22 图 23 当系统启动完成后,Log将自动保存在对应的log文件中,内容类似下图所示。 图 24 图 25 CAN调试工具GCAN Tools安装 本章节内容是为评估板安装CAN接口调试工具GCAN Tools。CAN接口调试工具的主要用途是查看CAN接口相关打印信息。 适用安装环境:Windows 7 64bit、Windows 10 64bit。 USB转CAN驱动安装 请将USB-CAN分析仪(型号:广成科技USBCAN-II FD)接入PC机USB接口,打开PC设备管理器,右键点击CAN驱动程序,弹出菜单中选择“属性(R)”选项。 图 26 打开“更新驱动程序”对话框,选择“浏览我的电脑以查找驱动程序(R)”选项。 图 27 点击“浏览(R)…”选项,选择USB转CAN驱动程序所在路径。USB转CAN驱动程序存放于产品资料 的“ 4-软件资料\Tools\Windows\GCAN Tools调试分析软件\Driver\” 目录下 。确认完毕后点击“下一步(N)”进行安装。 图 28 成功安装USB-CAN驱动程序后,弹出对话框如下图所示。 图 29 重新打开PC设备管理器,即可查看到成功安装的USB转CAN驱动程序,如下图所示。 图 30 CAN调试工具GCAN Tools安装 双击产品资料“4-软件资料\Tools\Windows\GCAN Tools调试分析软件\GCANTools-Setup20221026cn.exe”文件,安装CAN接口调试工具GCAN Tools。 图 31 弹出安装向导,如下图所示。点击“下一步(N)”继续安装程序。 图 32 在弹出对话框中选择软件安装路径,如下图所示。默认安装在C盘目录下,点击“下一步(N)”。 图 33 弹出如下界面创建快捷方式,点击“下一步(N)”。 图 34 进入如下安装界面,点击“安装(I)”。 图 35 弹出如下界面,点击“下一步(N)”开始安装,如下图所示。 图 36 弹出如下界面,点击“完成”,如下图所示。然后退出安装向导,安装完成。 图 37 图 38
  • 热度 6
    2023-3-1 11:48
    990 次阅读|
    0 个评论
    前 言 本文主要介绍AM64x的Cortex-A53、Cortex-M4F和Cortex-R5F核心程序自启动使用说明。默认使用AM6442进行测试演示,AM6412测试步骤与之类似。 本说明文档适用开发环境如下: Windows开发环境:Windows 7 64bit、Windows 10 64bit 虚拟机:VMware15.5.5 Linux开发环境:Ubuntu 18.04.4 64bit Linux Processor SDK:ti-processor-sdk-linux-rt-am64xx-evm-08.01.00.39 U-Boot:U-Boot-2021.01 CCS版本:CCS11.2.0 MCU+ SDK:mcu_plus_sdk_am64x_08_03_00_18 SysConfig:sysconfig-1.12.1_2446 GCC AARCH64 Compiler:gcc-arm-9.2-2019.12-mingw-w64-i686-aarch64-none-elf 本文测试板卡为创龙科技SOM-TL64x核心板,它是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F设计的多核工业级核心板, 通过工业级B2B连接器引出5x TSN Ethernet、9x UART 、2x CAN-FD、GPMC、PCIe/USB 3.1等接口。 核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 用户使用核心板进行二次开发时,仅需专注上层运用 ,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。 基于SBL引导裸机、FreeRTOS程序启动 程序启动流程说明 评估板上电后,固化在CPU内部的RBL将会先运行,RBL根据评估板BOOT SET从启动介质(如eMMC,Micro SD、SPI FLASH)读取SBL,然后通过SBL引导应用程序启动。 程序启动流程如下图所示。 图 1 目前官方提供的MCU+ SDK(版本为mcu_plus_sdk_am64x_08_03_00_18),SBL将会先读取应用程序至MSRAM,然后再进行解析。由于MSRAM空间有限,分配给SBL使用的内存空间仅512KByte,并且SBL运行需使用部分MSRAM空间。因此,为确保SBL引导应用程序正常启动,应用程序大小不能超过380KByte。 图 2 基于Micro SD卡启动 启动卡制作 请准备一张FAT32格式的Micro SD卡,通过读卡器将Micro SD卡连接至PC机。 双击产品资料“ 4-软件资料\Tools\Windows \”目录下PartManFree-Setup.exe 分区管理软件,按默认安装即可。安装完成后,打开分区管理软件,将会自动识别到Micro SD卡分区,请右键选中该分区,点击"Set Active"设置为活跃分区,如下图所示。 图 3 进入MCU+ SDK组件安装目录"C:\ti\mcu_plus_sdk_am64x_08_03_00_18\tools\boot\sbl_prebuilt\am64x-evm\",将sbl_sd.release.tiimage拷贝至Micro SD卡,并重命名为tiboot3.bin,如下图所示。 备注: sbl_sd.release.tiimage为官方提供的SBL镜像。 图 4 图 5 单核启动 本小节以Cortex-A53核心的led_flash裸机工程为例进行演示,Cortex-M4F和Cortex-R5F核心操作步骤与之类似。 请参考《FreeRTOS、Baremetal案例开发手册》文档,正确编译产品资料“4-软件资料\Demo\Baremetal-demos\led_flash\project\”目录下的led_flash_a53ss_nortos工程,然后将编译生成的led_flash_a53ss_nortos.appimage镜像文件拷贝至Micro SD卡,并重命名为app。 图 6 图 7 请将Micro SD卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为101000(1~6),此档位为Micro SD启动模式。然后使用Micro USB线连接评估板的USB TO UART0调试串口至PC机, 请将评估板上电启动,串口调试终端将会打印如下类似启动信息。同时,可观察到评估底板LED1、LED2闪烁,说明程序自启动成功。 图 8 多核启动 本小节以Cortex-A53、Cortex-M4F和Cortex-R5F核心的led_flash裸机工程为例进行演示。 请在磁盘根目录新建一个非中文文件夹test,将产品资料“4-软件资料\Demo\Baremetal-demos\led_flash\bin\”目录下的led_flash_a53ss_nortos.out、led_flash_m4fss_nortos.out、led_flash_r5fss_nortos.out全部拷贝至该目录下。 图 9 右键Windows按钮,点击"Windows PowerShell(I)",打开Windows PowerShell终端。 图 10 在Windows PowerShell终端执行如下命令进入test目录。 Window# cd E:\test\ 图 11 rprc文件生成 在Windows PowerShell终端执行如下命令,基于 xxx .out文件使用CCS和MCU+ SDK生成 xxx .rprc文件, xxx .rprc文件已包含可加载段的bin文件。CCS与MCU+ SDK路径请以实际情况为准。 Window# C:\ti\ccs1120\ccs/tools/node/node C:/ti/mcu_plus_sdk_am64x_08_03_00_18/tools/boot/out2rprc/elf2rprc.js led_flash_a53ss_nortos.out Window# C:\ti\ccs1120\ccs/tools/node/node C:/ti/mcu_plus_sdk_am64x_08_03_00_18/tools/boot/out2rprc/elf2rprc.js led_flash_m4fss_nortos.out Window# C:\ti\ccs1120\ccs/tools/node/node C:/ti/mcu_plus_sdk_am64x_08_03_00_18/tools/boot/out2rprc/elf2rprc.js led_flash_r5fss_nortos.out 图 12 执行完成后,将会在当前目录下生成了led_flash_a53ss_nortos.rprc、led_flash_m4fss_nortos.rprc、led_flash_r5fss_nortos.rprc文件。 图 13 appimage文件生成 基于 xxx .rprc文件生成镜像 xxx .appimage,需指定启动核心的ID,对应关系如下表所示。 备注: AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。 表 1 核心 ID Cortex-A53 a53ss0_0 0 Cortex-R5F r5fss0_0 4 r5fss0_1 5 r5fss1_0 6 r5fss1_1 7 Cortex-M4F m4fss0_0 14 在Windows PowerShell终端执行如下命令,将Cortex-A53、Cortex-M4F和Cortex-R5F核心的led_flash可执行程序合并为led_flash.appimage,并指定运行核心分别为a53ss0_0、m4fss0_0、r5fss0_0。 Window# C:\ti\ccs1120\ccs/tools/node/node C:/ti/mcu_plus_sdk_am64x_08_03_00_18/tools/boot/multicoreImageGen/multicoreImageGen.js --devID 55 --out led_flash.appimage led_flash_a53ss_nortos.rprc@0 led_flash_m4fss_nortos.rprc@14 led_flash_r5fss_nortos.rprc@4 图 14 执行完成后,将会在当前目录下生成led_flash.appimage镜像文件。 图 15 请将生成的led_flash.appimage镜像文件拷贝至Micro SD卡,并重命名为app。 图 16 请将Micro SD卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为101000(1~6),此档位为Micro SD启动模式。然后使用Micro USB线连接评估板的USB TO UART0调试串口至PC机。 评估板上电启动,串口调试终端将会打印如下类似启动信息。同时,可观察到评估底板LED1、LED2、LED3闪烁,说明程序自启动成功。 图 17 基于Linux引导裸机、FreeRTOS程序启动 基于Linux启动 本小节以产品资料“4-软件资料\Demo\RTOS-demos\”目录下的ipc_rpmsg_echo_linux案例为例进行演示。该案例主要实现Cortex-A53与Cortex-R5F核间通信,以及Cortex-A53与Cortex-M4F核间通信。 请将案例bin目录下的am64-main-r5f0_0-fw、am64-main-r5f0_1-fw、am64-main-r5f1_0-fw、am64-main-r5f1_1-fw、am64-mcu-m4f0_0-fw镜像文件拷贝至评估板文件系统根目录下。 图 18 进入评估板文件系统,执行如下命令,删除原来的软链接。 Target# rm /lib/firmware/am64-main-r5f0_0-fw Target# rm /lib/firmware/am64-main-r5f0_1-fw Target# rm /lib/firmware/am64-main-r5f1_0-fw Target# rm /lib/firmware/am64-main-r5f1_1-fw Target# rm /lib/firmware/am64-mcu-m4f0_0-fw 图 19 执行如下命令,创建新的软链接。 Target# ln -sf /home/root/am64-main-r5f0_0-fw /lib/firmware/am64-main-r5f0_0-fw Target# ln -sf /home/root/am64-main-r5f0_1-fw /lib/firmware/am64-main-r5f0_1-fw Target# ln -sf /home/root/am64-main-r5f1_0-fw /lib/firmware/am64-main-r5f1_0-fw Target# ln -sf /home/root/am64-main-r5f1_1-fw /lib/firmware/am64-main-r5f1_1-fw Target# ln -sf /home/root/am64-mcu-m4f0_0-fw /lib/firmware/am64-mcu-m4f0_0-fw 图 20 请将评估板重启,在系统启动过程中,Cortex-R5F、Cortex-M4F核心将会引导启动。在评估板文件系统执行如下命令,查询Cortex-R5F、Cortex-M4F核心与remoteproc关系。 Target# head /sys/class/remoteproc/remoteproc*/name 图 21 表 2 CPU核心 remoteproc m4fss0_0 remoteproc0 r5fss0_0 remoteproc1 r5fss0_1 remoteproc2 r5fss1_0 remoteproc3 r5fss1_0 remoteproc4 备注: 核心与remoteproc对应关系,请以实际情况为准。 执行如下命令,可查看Cortex-M4F、Cortex-R5F核心程序运行日志。 Target# cat /sys/kernel/debug/remoteproc/remoteproc0/trace0 Target# cat /sys/kernel/debug/remoteproc/remoteproc1/trace0 Target# cat /sys/kernel/debug/remoteproc/remoteproc2/trace0 Target# cat /sys/kernel/debug/remoteproc/remoteproc3/trace0 Target# cat /sys/kernel/debug/remoteproc/remoteproc4/trace0 图 22 工程配置说明 本小节主要演示如何在Cortex-R5F、Cortex-M4F核心的Baremetal(裸机)工程与FreeRTOS工程中添加Linux引导配置。 内存空间说明 如Cortex-R5F、Cortex-M4F核心的工程需支持基于Linux启动,则需进行内存空间分配,在Linux设备树中已指定内存空间,预留给Cortex-R5F、Cortex-M4F核心使用。内存空间分配如下图所示。 图 23 Cortex-M4F工程配置 本小节以Cortex-M4F核心的led_flash裸机工程为例进行演示。 IPC配置 在syscfg配置文件,添加IPC配置,具体配置如下图所示。 图 24 编译器链接脚本修改 双击打开编译器链接脚本linker.cmd,修改脚本内容。 图 25 在SECTIONS命令中新增一个.resource_table段,具体代码如下所示。 GROUP { /* This is the resource table used by linux to know where the IPC "VRINGs" are located */ .resource_table: {} palign(4096) DDR_0 图 26 在MEMORY命令中,设置.resource_table段的加载地址为0xA4100000,作为Cortex-M4F预留内存空间,具体代码如下所示。 /* Resource table must be placed at the start of DDR_0 when M4 core is early booting with Linux */ DDR_0 : ORIGIN = 0xA4100000 , LENGTH = 0x1000 图 27 Cortex-R5F工程配置 本小节以Cortex-R5F核心的led_flash裸机工程为例进行演示。 AM6412包含1个Cortex-R5F核心:r5fss0_0;AM6442包含4个Cortex-R5F核心分别为:r5fss0_0、r5fss0_1、r5fss1_0、r5fss1_1。不同的Cortex-R5F核心,编译器链接脚本指定的.resource_table段加载地址有所不同,具体如下表所示。 表 3 CPU核心 加载地址 r5fss0_0 0xA0100000 r5fss0_1 0xA1100000 r5fss1_0 0xA2100000 r5fss1_1 0xA3100000 led_flash_r5fss_nortos工程配置的Cortex-R5F核心为r5fss0_0,下面演示如何修改led_flash_r5fss_nortos工程配置,实现基于Linux引导启动r5fss0_0。 IPC配置 在syscfg配置文件,添加IPC配置,具体配置如下图所示。 图 28 UART配置 UART0为Cortex-A53核心(Linux系统)的调试串口。在led_flash_r5fss_nortos工程中已配置UART0作为调试串口,请在syscfg配置文件取消勾选"Enable UART Log"配置选项,或修改为Linux设备树中未使能的串口。 图 29 编译器链接脚本修改 双击打开编译器链接脚本linker.cmd,修改脚本内容。 图 30 修改内容如下: 启动代码链接至R5F_TCMA; 新增一个.resource_table段; 代码段、数据段、bss段、堆栈全部链接至DDR,在Linux上为r5fss0_0预留内存地址空间; SECTIONS { GROUP { .text.hwi: palign(8) .text.cache: palign(8) .text.mpu: palign(8) .text.boot: palign(8) .text:abort: palign(8) /* this helps in loading symbols when using XIP mode */ R5F_TCMA GROUP { .text: {} palign(8) /* This is where code resides */ .rodata: {} palign(8) /* This is where const's go */ DDR_1 GROUP { /* This is the resource table used by linux to know where the IPC "VRINGs" are located */ .resource_table: {} palign(4096) DDR_0 GROUP { .data: {} palign(8) /* This is where initialized globals and static go */ DDR_1 GROUP { .bss: {} palign(8) /* This is where uninitialized globals go */ RUN_START(__BSS_START) RUN_END(__BSS_END) .sysmem: {} palign(8) /* This is where the malloc heap goes */ .stack: {} palign(8) /* This is where the main() stack goes */ DDR_1 GROUP { .irqstack: {. = . + __IRQ_STACK_SIZE;} align(8) RUN_START(__IRQ_STACK_START) RUN_END(__IRQ_STACK_END) .fiqstack: {. = . + __FIQ_STACK_SIZE;} align(8) RUN_START(__FIQ_STACK_START) RUN_END(__FIQ_STACK_END) .svcstack: {. = . + __SVC_STACK_SIZE;} align(8) RUN_START(__SVC_STACK_START) RUN_END(__SVC_STACK_END) .abortstack: {. = . + __ABORT_STACK_SIZE;} align(8) RUN_START(__ABORT_STACK_START) RUN_END(__ABORT_STACK_END) .undefinedstack: {. = . + __UNDEFINED_STACK_SIZE;} align(8) RUN_START(__UNDEFINED_STACK_START) RUN_END(__UNDEFINED_STACK_END) DDR_1 /* Sections needed for C++ projects */ GROUP { .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ .init_array: {} palign(8) /* Contains function pointers called before main */ .fini_array: {} palign(8) /* Contains function pointers called after main */ DDR_1 /* Sections needed for C++ projects */ GROUP { .ARM.exidx: {} palign(8) /* Needed for C++ exception handling */ .init_array: {} palign(8) /* Contains function pointers called before main */ .fini_array: {} palign(8) /* Contains function pointers called after main */ DDR_1 } 图 31 图 32 设置.resource_table段的加载地址为0xA0100000,作为r5fss0_0核心预留内存空间; 设置共享内存链接至Linux为共享内存预留的内存地址空间。 /* Resource table must be placed at the start of DDR_0 when R5 cores are early booting with Linux */ DDR_0 : ORIGIN = 0xA0100000, LENGTH = 0x1000 DDR_1 : ORIGIN = 0xA0101000 , LENGTH = 0xEFF000 USER_SHM_MEM : ORIGIN = 0xA5000000 , LENGTH = 0x80 LOG_SHM_MEM : ORIGIN = 0xA5000000 + 0x80, LENGTH = 0x00004000 - 0x80 RTOS_NORTOS_IPC_SHM_MEM : ORIGIN = 0xA5004000 , LENGTH = 0x0000C000 图 33
  • 热度 6
    2023-3-1 11:46
    576 次阅读|
    0 个评论
    本文测试板卡为 创龙科技 SOM-TL138F 是一款基于 TI OMAP-L138(定点/浮点 DSP C674x + ARM9)+ 紫光同创 Logos/Xilinx Spartan-6 低功耗 FPGA 处理器设计的工业级核心板。核心板内部OMAP-L138 与 Logos/Spartan-6 通过 uPP、EMIFA、I2C 通信总线连接,并通过工业级 B2B连接器引出网口、EMIFA、SATA、USB、LCD 等接口。 核心板经过专业的 PCB Layout 和高低温测试验证,稳定可靠,可满足各种工业应用环境。用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研 ex02_messageq 示例名字:MessageQ 功能说明 :基于队列的消息传递,负责GPP与DSP端的可变长度的短消息交互。 图 49 参考英文资料: 图 50 运行命令: Target# cd demo-rootfs/ex02_messageq/debug/ Target# ls Target# ./run.sh 成功运行提示如下图: 图 51 特点: 实现了处理期间变长消息的传递; 消息的传递都是通过操作消息队列来实现的; 每个消息队列可以有多个写者,但只能有一个读者;每个任务(task)可以对多个消息队列进行读写; 一个宿主在准备接收消息时,必须先创建消息队列,而在发送消息前,需要打开预定的接收消息队列; 常用在以下场景中: 在消息传递中有多个写者,但仅有一个读者; 所需要传递的消息超过32bit,且长度可变;读写者的缓冲区大小相同; 处理期间需要频繁传递消息,在这种情况下,消息被依次放入队列,能保证不会丢消息; 消息队列为空时,调用MessageQ_get()获取消息时会被阻塞,直到消息队列被写入消息; 支持处理器间移动消息队列,在这种情况下,调用MessageQ_open()来定位队列位置,而消息传递部分代码不需要改动; 提供的API接口: 消息队列初始化: MessageQ_Params_init() 消息队列创建/销毁: MessageQ_create()/MessageQ_delete(),create创建消息队列,并分配相应存储空间 消息队列打开/关闭: MessageQ_open()/MessageQ_close(),open时会返回远程处理器上的QueID的地址 为消息队列分配堆内存: MessageQ_alloc()/MessageQ_free() 为消息队列注册/注销堆内存: MessageQ_registerHeap()/MessageQ_unregisterHeap() 向消息队列中放入/获取消息: MessageQ_put()/MessageQ_get() 获取消息队列ID: MessageQ_getQueueId() 获取消息队列中消息数: MessageQ_count() 在消息队列中嵌入消息: MessageQ_setReplyQueue() 为消息队列解阻塞: MessageQ_unblock() 为调试消息队列加入Trace: MessageQ_setMsgTrace() ex03_notify 示例名字: Notify 功能说明 :将硬件中断抽象成多组逻辑事件,是一种简单快捷的发送低于32bit信息的通信方式。 参考英文资料: 图 52 运行命令: Target# cd demo-rootfs/ex03_notify/debug/ Target# ls Target# ./run.sh 成功运行提示如下图: 图 53 特点: 同一个中断号可以注册多个事件,同一个事件可以有多个回调函数或者多个宿主(可以是处理器、线程或者任务),事件被触发后所有宿主都会被唤醒; 一个事件可以接收多个宿主发送来的通知(notification),事件所携带的参数最大支持32bit; 事件是有优先级的,EventId越小优先级越高,事件0的优先级最高,随着EventId增大优先级依次递减;当多个事件被触发,优先级最高的会最先响应; Notify模块使用硬件中断,因此不能被频繁调度。 提供的API接口: 初始化并配置Notify组件: Notify_attach(); 注册/注销事件: Notify_registerEvent()/Notify_unregisterEvent()/ 发送带参数的事件给某处理器: Notify_sendEvent() 通过回调函数接收事件: Notify_FnNotifyCbck() 使能/禁用事件: Notify_disableEvent()/Notify_enableEvent() 其他逻辑接口: Notify_eventAvailable()/Notify_intLineRegistered()/ Notify组件常用于传递附带消息少于32bit的场景,如信令传递、buffer指针传递等。在信令传递时使用高优先级的事件,如事件0。而在传递buffer指针是可以使用低优先级的事件,如事件30等。 在Notify_sentEvent() API中带有参数waitClear,该参数为可选参数,如果waitClear为TRUE,这就意味着多宿主事件无法及时响应,必须等待前一宿主事件结束后才能响应下一宿主;如果waitClear为FALSE,最好不要为事件附带参数,否则多宿主事件可能会由于消息被覆盖而出现丢消息的现象。 该API最好不要在中断服务程序(ISR)调用(特别是waitClear=TRUE时),否则会导致中断调度出现异常(表现之一:高优先级的中断响应会延迟)。此外该API不能再使用GateMP模块锁保护的程序段中调用,否则可能会导致操作系统死锁。 由于其他模块使用了Notify机制,因此在SysLink中预留了部分事件号,这部分事件号用户需要慎重选用(如果没有使用其他组件,可以考虑占用这部分事件号),在注册事件前可以使用Notify_eventAvailable()来检查该事件是否可用,即该中断号上的该事件号是否被注册。 表 2 Module Event IDs FrameQBufMgr 0 FrameQ 1 MessageQ(TransportShm) 2 RingIO 3 NameServerRemoteNotify 4 ex04_sharedregion 示例名字: SharedRegion 功能说明 :SharedRegion模块负责管理共享内存区。在一个有共享内存的多核架构中,普遍会遇到共享内存映射虚拟地址转换问题。 参考英文资料: 图 54 运行命令: Target# cd demo-rootfs/ex04_sharedregion/debug/ Target# ls Target# ./run.sh 成功运行提示如下图: 图 55 提供的API接口: SharedRegion_clearEntry() SharedRegion_entryInit() SharedRegion_getCacheLineSize() SharedRegion_getEntry()、SharedRegion_setEntry() SharedRegion_getHeap() SharedRegion_getId() SharedRegion_getIdByName() SharedRegion_getNumRegions() SharedRegion_getPtr() SharedRegion_getSRPtr() SharedRegion_isCacheEnabled() SharedRegion_translateEnabled() 一般来说配置一个SharedRegion需要关心以下几个参数: base :The base address,共享内存区的基地址,这个所谓的基地址实际上是映射后的虚拟地址,并非物理地址; len :The length,共享内存区的大小,对于同一片共享内存,其所有者的查找表中该项值应该是相同的; name :The name of the region,该共享内存区的名字; isValid :Whether the region is valid,对于该处理器而言,是否具有权限去访问该共享内存区; ownerProcId :The id of the processor which owns the region,管理该内存区的处理器ID,该处理器具有创建HeapMemMP的权限,而其他处理器只有使用的权限; cacheEnable :Whether the region is cacheable,是否为该共享内存区创建cache; cacheLineSize :The cache line size,cache的大小; createHeap :Whether a heap is created for the region,是否使用Heap(堆)管理该内存区域; ex05_heapbufmp 示例名字: HeapBufMP 功能说明 :为用户提供了固定大小的缓冲池管理接口。 参考英文资料: 图 56 运行命令: Target# cd demo-rootfs/ex05_heapbufmp/debug/ Target# ls Target# ./run.sh 成功运行提示如下图: 图 57 提供的API接口: HeapBufMP创建/删除: HeapBufMP_create()/HeapBufMP_delete() HeapBufMP打开/关闭: HeapBufMP_open()/HeapBufMP_close() HeapBufMP参数初始化: HeapBufMP_Params_init() HeapBufMP分配/释放内存: HeapBufMP_alloc()/HeapBufMP_free() HeapBufMP获取所有状态: HeapBufMP_getExtendedStats()/HeapBufMP_getStats() ex06_listmp 示例名字: ListMP 功能说明 :实现了多宿主双向循环链表,即该双向循环链表为多个处理器共同拥有,可以由多个处理器共同维护,共同使用。 参考英文资料: 图 58 运行命令: Target# cd demo-rootfs/ex06_listmp/debug/ Target# ls Target# ./run.sh 成功运行提示如下图: 图 59 特点: ListMP的实现区别于一般的双向循环链表,因此它不仅具有双向循环链表的特性外,还增添了其他的特性,比如以下几点: 实现了简单的多宿主协议,支持多个读写者(multi-reader、multi-writee)q; 使用Gate作为内部保护机制,防止多个宿主处理器同时访问该链表; ListMP的实现并未加入通知机制,如果需要的话,可以在外部封装时引入Notify机制来实现;使用ListMP机制来管理的buffers都需要从共享内存区分配,包括从堆内存分配的buffers以及动态分配的内存。 常用在以下场景中: 需要被多个宿主访问并且需要频繁传递消息或者数据; 可用于无规则的消息传递,基于链表实现,因此读者可以遍历所有对象,并选出需要的对象进行处理;如果硬件支持快速队列,则无法完成队列遍历操作; 可以自定义消息优先级,同样是基于链表实现,读者可以随意的选择在链表头部还是链表的尾部来插入消息或者实现链表对象的位置调整,进而实现消息的优先级选择;如果硬件支持快速队列,则无法完成队列遍历操作; 无内置通知机制,可以灵活的外部通知机制来实现。譬如根据实际情况,选用Notify来实现,亦或是使用选用MessageQ则可以使用最少的中断资源实现性能优良的通知机制,缺点是需要额外的代码实现通知机制; 提供的API接口: 参数初始化:ListMP_Params_init() 创建/销毁:ListMP_create()/ListMP_delete() 打开/关闭:ListMP_open()/ListMP_close() 相关链表操作: 判断链表空:ListMP_empty() 获取保护锁:ListMP_getGate() 获取链表头/表尾:ListMP_getHead()/ListMP_getTail() 链表插入操作:ListMP_insert() 获取链表上游元素/下游元素:ListMP_next()/ListMP_prev() 插入元素至链表头/尾:ListMP_putHead()/ListMP_putTail() 删除元素:ListMP_remove() ex07_gatemp 示例名字: GateMP 功能说明 :GateMP是针对于多处理器共享资源的一种保护机制,就如其名字一样,把共享资源比作房子,那么GateMP就是这个房子的门。GateMP组件实现了开关门的机制,用于保护共享资源一次只被一个处理器读写。根据Soc硬件资源配置的不同,GateMP的实现有所不同。对于硬件支持Hardware Spinlock的可以基于H/W spinlock来实现GateHwSpinlock;而对于没有该硬件资源的系统中,则使用软件方法(Peterson算法)来实现GatePeterson。 GateMP组件框架如下: 图 60 参考英文资料: 图 61 运行命令: Target# cd demo-rootfs/ex07_gatemp/debug/ Target# ls Target# ./run.sh 成功运行提示如下图: 图 62 提供的API接口: 初始化:GateMP_Params_init() 创建/删除:GateMP_create()/GateMP_delete() 打开/关闭:GateMP_open()/GateMP_close() 进入/离开保护:GateMP_enter()/GateMP_leave() 获取当前的保护类型:GateMP_getLocalProtect()/GateMP_getRemoteProtect() ex08_ringio 示例名字: RingIO 功能说明 :该组件提供基于数据流的循环缓冲区。该组件允许在共享存储空间创建循环缓冲区,不同的处理都能够读取或者写入循环缓冲区。RingIO组件允许通过写指针来获取数据缓冲区的空存储空间,当该存储空间被释放之后,相应存储空间可以被再次写入。 RingIO组件允许读指针获取缓冲区中读取空间的有效数据。当被释放之后,相应存储空间的数据被标记为无效。每个RingIO实体拥有一个读指针和一个写指针。RingIO组件也有API函数可以使能数据属性的同步传输。如:EOS(End Of Stream)、事件戳、流偏移地址等,也可能伴随着循环缓冲区的偏移值。 图 63 参考英文资料: 图 64 运行命令: Target# cd demo-rootfs/ex08_ringio/debug/ Target# ls Target# ./run.sh 成功运行提示如下图: 图 65 特点: 仅支持一个读者和一个写者; 读写相对独立,可以在不同的进程或者处理器中同时进行读写操作; 提供的API接口: RingIO参数初始化: RingIO_Params_init() 创建/删除RingIO对象: RingIO_create()/RingIO_delete() 打开/关闭RingIO对象: RingIO_open()/RingIO_close(),RingIO_openByAddr() 获取共享内存请求: RingIO_sharedMemReq() 注册/注销RingIO通知: RingIO_registerNotifier()/RingIO_unregisterNotifier() 强制发送RingIO通知: RingIO_sendNotify() 获取RingIO通知类型: RingIO_setNotifyType() 设置/获取水印标志/通知类型: RIngIO_setWaterMark()/RIngIO_getWaterMark() 获取/释放RingIO数据: RingIO_acquire()/RingIO_release() 设置/获取RingIO属性: RingIO_setvAttribute()/RingIO_getvAttribute() 设置/获取RingIO固定大小的属性: RingIO_setAttribute()/RingIO_getAttribute() 刷新RingIO的buffer: RingIO_flush() 获取有效/空buffer大小: RingIO_getValidSize()/RingIO_getEmptySize() 获取有效/空属性大小: RingIO_getValidAttrSize()/RingIO_getEmptyAttrSize() 获取需求buffer的大小/位置: RingIO_getAcquiredSize()/ RingIO_getAcquiredOffset() ex09_readwrite 示例名字: ProcMgr read/write 功能说明 :ProcMgr read/write示例阐明了大缓冲区通过直接读写DSP内部RAM来进行传输的概念。它实现了在GPP端和使用ProcMgr_read()和ProcMgr_write() API的DSP端以及两个DSP端之间的大尺寸数据缓冲器之间的数据与信息的传递和转换。"ProcMgr read/write" 示例中数据与信息流向图如下: 图 66 运行命令: Target# cd demo-rootfs/ex09_readwrite/debug/ Target# ls Target# ./run.sh 成功运行提示如下图: 图 67 ex33_umsg 示例名字: umsg(Inter-processor Unidirectional Messaging) 功能说明 :编译usmg库文件和umsg相关驱动。 参考英文资料: 图 68 运行命令: Target# cd demo-rootfs/ex33_umsg/ Target# ls Target# ./load_umsg.sh 成功运行提示如下图: 图 69 备注: 由于ex34_radar 示例 用到了 ex33_umsg示例编译出来的驱动程序和库文件,因此 在使用ex34_radar示例之前,一定要运行 ex33_umsg示例。 ex34_radar 示例名字:radar 功能说明 :阐明如何利用umsg库在GPP和DSP之间传递信息。 图 70 参考英文资料: 图 71 Target# cd demo-rootfs/ex34_radar/debug/ Target# ls Target# ./run.sh 成功运行提示如下图: 图 72
相关资源