Shaoxing Ke1, Strong2, EP FAE Team
1. 摘要
7月13日德州仪器(TI)推出了全新的高性能微控制器(MCU+)产品系列,AM243X是其产品系列中的一款芯片。AM243X芯片拥有2个800MHZ ARM Cortex-R5F双核,1个400MHZ ARM Cortex-M4单核,2个PRU-ICSSG工业通信子模块并支持千兆网络。由此,该AM243X芯片可实现对多个千兆级工业以太网和时间敏感网络的场景应用,同时芯片上的功能安全特性可以帮助系统集成商在其工业设计中达到IEC 61508标准的安全完整性等级SIL 3(Safety Integrity Level, SIL)要求。总之,AM243X芯片最大优势在于强大的处理能力、实时控制和工业物联、以及支持多协议应用(如EtherNet/IP、EtherCAT、PROFINET和IO-Link主站等)。本文主要介绍PC 如何与AM243X-LP进行EtherCAT通讯,参考Demo是ethercat_slave_beckhoff_ssc_demo。
2. 硬件准备与环境配置
2.1开发板准备与连接
根据项目测试所使用AM243X control card 的不同,配置CCS运行环境需进行相应调整。比如 AM243X-LP 没有 DDR 内存,开发板进行 DDR 初始化仅适用于 AM243X-EVM。其中,AM243X-LP的板子及连接如图1所示。
图1 AM243X-LP的板子及连接示意图
图1中USB Type-C connector(J10)用于板子供电,板子上电故障灯LD9,正常灯LD6、LD7和LD8。AM243X-LP和AM243X-EVM都有闪存 SOC,因此都需要进行初始化。在这里可以查看板子BOOT MODE是否处于OSPI 模式,见图2所示。如果不是图2模式,需要首先对板子进行UART设置和闪存 SOC (Sitara System-on-chip)初始化。这部分内容下一小节会讲,参考链接AM243x MCU+ SDK: EVM Setup (ti.com)。其中AM243X-LP原理图,如图3所示。
图2 OSPI BOOT MODE
图3 AM243X-LP原理图
图3中BOOT MODE有UART、OSPI、SD和NOBOOT四种模式。其中,SD BOOT MODE仅AM243X-EVM需要进行设置。因此,AM243X-LP可选择不同的BOOT MODE对SOC进行初始化设置,本文以OSPI BOOT MODE方案为初始化操作方法。
图4 正常上电的AM243X-LP
2.2环境配置与所需软件
在进行环境配置时有两种方法。第一种方法,是借助Python 3.9.6工具并通过UART来对SOC进行初始化。第二种方法,是直接通过使用 CCS 脚本初始化 SOC,每次上电都需要操作一次。本文对两种方法进行如下介绍。
第一种方法借助Python 3.9.6工具并通过UART对SOC进行初始化。
所需要安装的软件,如下表所示。
安装的软件 |
描述 |
CCS 10.3.1 |
用于程序烧录、调试与通讯 |
SysConfig 1.8.1 |
makefiles操作需要,如若CCS则无需安装 |
TI CLANG compiler toolchain 1.3.0.LTS |
ARM 编译器 |
Python 3.x. |
设置UART 和BOOT MODE |
{SDK_INSTALL_PATH}/SDK |
SDK /example |
SSC_V5i12 |
生成从机与主机建立映射的源文件 |
TwinCAT3.0 |
上位机编程、调试与通讯 |
配置前首先需要检查板子上电和UART通讯、Python 3.9.6安装是否正常,并设置BOOT MODE。AM243X-LP正常上电,如图4所示。UART通讯进行检查如下:
首先,关闭AM243X-LP的电源并设置UART BOOT(BOOTMODE [ 1 : 8 ] (SW4) = 1110 0000),如图5所示。
图5 UART BOOT MODE
其次,在AM243X-LP上电前通过CCS->View->Terminal->Open a new UART terminal->Select the UART port->进行串口设置,板子上电后可看到UART打印信息,如下图所示。
接着,关闭UART并进行闪存 SOC初始化。其中,SOC初始化是借助Python 3.9.6工具进行.cfg文件的配置,并通过UART引导应用程序对板子QSPI FLASH进行初始化。
对于Windows系统操作如下:
- Step1:安装python 3.9.6, https://www.python.org/downloads/windows/
- Step2:命令提示符(WIN+R)输入以下命令(“python --version”),可查看Python 3.9.6是否安装成功。
- Step3:若找不到所安装Python 3.9.6版本,进行环境变量添加路径。
C:\Users\{your username}\AppData\Local\Programs\Python\Python39。此为Python 3.9.6安装的默认路径。
如果添加环境变量也无法显示“Python 3.9.6”成功安装。推荐使用Anaconda软件安装python, 链接:Anaconda | Individual Edition。这种方法可以不需要配置环境变量,进而帮助Python 3.9.6的安装。
- Step4: 检查是否安装了 python 软件包管理器 "pip" ,默认情况下pip 应该是与 python 一起安装的。如果 "pip"有安装,如有显示下图则直接跳过Step5。
- Step5:安装python 软件包管理器 "pip",命令提示符下键入“python -m pip install pyserial xmodem tqdm” ,如下图所示。其中,python 软件包管理器 "pip"的安装,是为了利用pip引导安装物理层的串口、xmodem协议和tqdm进度条软件包。因此,需要检查"pip"是否有安装。
- Step6: 闪存 SOC (Sitara System-on-chip)初始化。命令提示符下键入“python uart_uniflash.py -p COM<x> –cfg= sbl_prebuilt\am243x-lp\ default_sbl_null.cfg”,如下图所示。此处COM<x>需要通过设备管理器查看电脑上所连J20引脚所对应的串口号。
上图为闪存 SOC 初始化成功的界面,如果这一步初始化不成功后续CCS运行工程时无法通过UART打印信息,同时从站也无法告知主站所处的状态。这主要是由于J20引脚既有JTAG烧录,又有UART通信功能。如果SOC初始化失败并报错,可以查看Flash tool error messages and solutions
SOC 初始化成功后,接着将AM243X-LP断电并将BOOT MODE设置为OSPI MODE(BOOTMODE [ 1 : 8 ] (SW4) = 0100 0100),如图6所示。
图6 OSPI BOOT MODE
- Step7: AM243X-LP上电并打开UART通讯,Console界面打印信息显示图7,则说明AM243X-LP 已设置可以 CCS 加载并运行。
图7 Console界面打印信息
同时,也可以尝试其他Demo案例进行烧录以验证SOC 初始化是否成功,图8为Build a Hello World example的Console界面打印信息。注意:板子 SOC 初始化只需进行一次,之后可以放心使用。
图8 Hello World example在Console界面上的打印信息
第二种,直接通过使用 CCS 脚本初始化 SOC。但是在某些情况下,尤其在用户自定义的EVM 上运行并且闪存驱动的程序不可用于该 EVM 情况时,可采取第二种方法初始化 SOC。
首先需要设置环境变量,添加一个名为 MCU_PLUS_SDK_AM243X_PATH 的新变量并将其指向安装 SDK 的路径
将AM243X-LP设置为NOBOOT模式如下。
给板子上电并在CCS中创建目标配置文件,如下所示。
CCS工具栏中"View > Target Configuration"创建一个新的目标配置文件,仿真器是XDS110 USB Debug Probe,板子是AM243x_LAUNCHPAD。
具体参照链接Create Target Configuration
需要注意:每次关闭并重新打开 AM243X-LP 电源时,都需要执行以下步骤进行CCS 脚本初始化 SOC。
选择Launch the target configuration并进入Debug模式,在工具栏选择"CCS Toolbar > View > Scripting Console"。
并键入命令行“loadJSFile "C:/ti/mcu_plus_sdk_{soc}_{sdk version}/tools/ccs_load/am64x_am243x/load_dmsc.js"
”进行SOC初始化,会在 scripting console显示如下:
在 scripting console中,来自脚本自身的日志,如下图所示。
在 AM243X “CIO” console中,来自 R5F核的日志,如下图所示。
在 AM243X console中,来自 GEL 脚本的日志,如下图所示。
成功配置后,显示上述三个console的日志进而完成SOC的初始化。CCS界面整体显示界面,如下图所示。
3.项目的搭建过程
3.1项目说明
以ethercat_slave_beckhoff_ssc_demo 工程为例,详细介绍一下搭建测试的步骤。其中,AM243X-LP有4 个 LED 可用于EtherCAT 主控制器进行控制。 如果TwinCAT设置DC运行模式,则需要两个以上的EtherCAT从站进行Task分配,最小测试周期是50us。因此,本文仅实现上位机对LED灯的开关控制。
运行Demo之前可先按照mcu_plus_sdk_am243x_08_00_00_21\examples\kernel\dpl\hello_world\am243x-lp\r5fss0-0_freertos和Build a Hello World example来验证UART和SOC初始化是否成功,如图8所示。
3.2搭建项目的详细步骤
整个项目的实施主要分为三个部分:1.SSC Tool配置文件生成;2.CCS Debug模式;3.TwinCAT上位机设置。
1.SSC Tool配置文件生成
Step1:打开SSC tool,建立新的工程,import选择并打开相应的xml文件(一般由原厂提供的.xml文件)。
Step2:选择TI AM243x/AM64x Sample<Texas Instrument Incorporated>
Step3:在application的选项卡中,确保 DC_SUPPORTED为1,并在默认路径下保存,并在Project选项卡中选择Create new Slave Files。
上述设置成功后,进行文件的生成如下图所示。
Step4:将所生成的27个文件复制到${SDK_INSTALL_PATH}/source/industrial_protocols/ethercat_slave/beckhoff_stack/stack_source。
2.CCS Debug模式
CCS中导入Demo工程,Build后并进入Debug界面。首先确保可以正常连接上XDSV110,其次进行CPU重置,再次导入.out文件,Resume运行下会在Console界面显示打印信息,进而可以看到板子上LD12和LD14灯亮。这表示AM243X-LP已经处于初始化状态并可以与TwinCAT进行通讯。Console界面显示的打印信息,如下图所示。(如果没有显示,那说明板子第一次在CCS未进行UART配置和SOC初始化不成功。)
3.TwinCAT上位机设置
在TwinCAT新建项目之前需要将.xml文件复制到{TWINCAT_INSTALL_DIR}\TwinCAT\3.1\Config\Io\EtherCAT folder,否则设备扫描I/O时无法扫描EtherCAT从站的信息。
Step1:打开TwinCAT,检查PC是否存在Intel网卡驱动。如果电脑上不是Intel网卡,则需要从倍福官网上安装兼容性EtherCAT驱动。此外,CCS一直在Resume运行下,可观察AM243X-LP板子上LED12(INT)初始化灯是否亮,如亮说明从站已经处于初始化状态。
Step2:打开TwinCAT,打开一个新的工程。并在solution explorer目录下,找到I/O后进行展开,右键Devices,选择扫描。
点击“Yes”,会扫描到boxes并设置自由运行模式,进而会显示所扫描出来的产品信息。
Step3: 双击Box #,并在右侧可看到从站处于OP状态。
Step4: 通过DO Outputs来写入 “0”或者“1” 控制LED灯的亮灭,以及可以在TwinCAT界面上看到信号的波形,如下图所示。
3.3结果输出
控制前后图9和图10进行对比,RJ45旁的四个LED灯(LD12、LD13、LD14和LD15)可为上位机EtherCAT控制。
图9 TwinCAT控制前LED灯的状态显示
图10 TwinCAT控制后四个LED灯全亮的状态显示
4.其他说明
1.针对不是Intel网卡的电脑,或者没有RJ45接口的?
可以通过USB网口转换器,并安装好EtherCAT驱动程序。但是它仅能实现对Demo程序的操作,应用受限。建议还是使用Intel网卡,对应的文件及驱动程序在这里给出:Beckhoff Information System - English
2.SSC Tool生成没有相对应选择的器件型号?
建议由原厂提供.xml文件,或卸载SSC Tool重新安装进行文件生成。
3.UART设置和闪存 SOC在建立工程项目前每一次都需要初始化吗?
UART设置和闪存 SOC仅在BOOT MODE设置使用一次,后续就无需再次进行初始化操作。
4.Python安装时所遇到的“pip”问题及解决方法。
当运用第一种方法进行SOC初始化时,出现下图情形可直接转到闪存工具安装错误总结和解决方案。链接:http://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_00_00_21/exports/docs/api_guide_am243x/TOOLS_FLASH.html#TOOLS_FLASH_ERROR_MESSAGES。
解决方案:首先,使用 Ctrl-C 终止脚本的运行。 其次,检查 UART 启动模式开关设置是否设置为UART BOOT,检查 EVM/LP 的电源是否连接,关闭 EVM/LP的电源后重启EVM/LP。最后,重试第一种方法进行SOC的初始化。
此外,采取公司内网使用pip安装时会出现error:Could not find a version that satisfies the requirement <package>,同样可参考闪存工具安装错误总结和解决方案。链接:http://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_00_00_21/exports/docs/api_guide_am243x/TOOLS_FLASH.html#TOOLS_FLASH_ERROR_MESSAGES。
5.CCS Debug所遇到的问题及解决方法(情况1)。
产生的原因:由于把SSC Tool整个生成的文件夹拷贝到stack_sources目录下所导致的文件路径索引不对,下图可看到路径解析不存在。
解决方案:1.把所有带有黄色感叹号的文件删除,并逐个添加所生成的文件;2,把文件复制到stack_sources目录下,重新导入项目。
6.TwinCAT所遇到的问题及解决方法(情况2)。
产生的原因:下图中所遇到的情况是由于AM243X-LP没有进行SOC的初始化,以及从站未处于初始化状态。此时,TwinCAT无法与主站进行联系,进而无法扫描到从站的I/O。
解决方案:重新初始化板子,并设置OSPI BOOT。
5.参考资料
- Application Note ET9300 (EtherCAT Slave Stack Code)
- EtherCAT Slave Beckhoff SSC Demo
- EtherCAT Slave Setup with TwinCAT
- Flash SOC Initialization Binary
- AM243x Sitara Microcontrollers Data Sheet datasheet (Rev. A) (ti.com)