英飞凌 AURIX-TC3XX:QSPI通信实验

news2024/11/28 22:00:11

在这里插入图片描述

目录

  • AURIX-TC3XX-QSPI通信实验
    • 1.QSP简介
      • 1.1、AURIX TC3XX QSPI个数
      • 1.2、QSPI功能特点
        • 1.2.1、QSPI外设的新特性
        • 1.2.2、一些独特的特性
        • 1.2.3、支持传统的SPI特性
        • 1.2.4、四种可供用户选择的传输模式
    • 2、具体实验操作
      • 2.1、新建工程
      • 2.2、实验一
    • 3、域控制器中常见的SPI通信方式
      • 3.1、MCU-SOC之间的主从SPI通信交互

AURIX-TC3XX-QSPI通信实验

1.QSP简介

1.1、AURIX TC3XX QSPI个数

AURIX 型号QSPI 个数
TC3775个 QSPI 最高速度达50 Mbit/s
TC3875个 QSPI 最高速度达50 Mbit/s
TC3976个 QSPI 最高速度达50 Mbit/s

1.2、QSPI功能特点

1.2.1、QSPI外设的新特性

①.支持队列模式;

能处理控制信息和传输数据;

可以通过DMA机制来进行数据的有限搬运;

在与外设进行缓冲搬移时采用四级的小FIFIO队列。

②.自动硬件控制的信号正时

外设选择信号的激活;

外设可选择leadingtrailingidle延迟时间。

③.支持高速的SPI通信

速率最高可达50Mbit/s

对于每个bit来说支持可编程的时间量子;

FIFO满时会产出Overrun保护。

1.2.2、一些独特的特性

①.对于长的数据流,数据长度可以配置成以byte传输(代替bits创新)。

2②.每个SPI通道最多支持16个外设信号;

③.支持硬件的奇偶校验;

④.支持LOOP BACK模式;

1.2.3、支持传统的SPI特性

①.可编程的数据长度为2~32bit(或bytes)。

②.传输方向:高位优先或者低位优先。

③.时钟的极性:ldel状态下有些器件是高电平,有些是低电平,通过clock极性来选择是高电平还是低电平。

④.时钟的相位:SPI时钟是否需要根据外设进行延迟。

⑤.在FIFO时间和相位跳变时产生中断。

1.2.4、四种可供用户选择的传输模式

①.端数据模式

在端数据模式下,传输帧的长度为2~32bits。在一个32位的BACON寄存器中配置数据的数据信息,此时BACONBYTE设置为0,数据长度以bits为单位;BACON.LST设置为1,表示传输的数据是传输帧的最后数据。

②.长数据模式

在长数据模式下,传输帧的长度为2~32bits。在一个32位的BACON寄存器中配置数据的数据信息,此时BACON。BYTE设置为1,数据长度以bytes为单位;BACON.LAST设置为1,表示传输的数据是传输帧的最后数据。如果传输数据的尺寸小于32位,需要用0进行填充补齐。

③.连续数据模式

在连续数据模式下,传输帧的长度为任意的数据长度。改模式既可与短数据模式结合使用,也可与长数据模式结合使用。在对BACON寄存器进行配置时,对于传输帧的起始数据BACON.LAST设置为0,使得外设在接收完该部分数据后仍然保持为接收状态;对于一帧的结束数据,BACON.LAST需要设置为1,表示该部分数据为一帧的最后数据,当接收完该部分数据后外设将被设置为不接受状态。

④.单配置-多帧模式

在单配置-多帧模式下,仅需要一次配置就可以给外设发送多帧数据,不需要在发送每帧数据的时候都配置一次,但该模式下发送数据帧的大小必须小于16bits。

该模式也可以用来传输在一个32位的BACON寄存器中配置数据的数据信息,此时BACON.BYTE设置为1,数据长度以bytes为单位;BACON.LAST设置为1,表示传输的数据是传输帧的最后数据。如果传输数据的尺寸小于32位,需要用0进行填充补齐。

2、具体实验操作

实验一:通过ASCLIN模块进行的SPI主通信,配置为SPI主节点的ASCLIN模块发送一个两个字节的消息。

实验二:通过SPI 采集IMU数据。

2.1、新建工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

新建工程后,编译工程

在这里插入图片描述

编译通过

在这里插入图片描述

新建SPI.c和SPI.h
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2、实验一

注:SPI配置中的ASCLIN模块只能支持四线或三线(无从选择输出信号),最多16位数据宽度。

ASCLIN模块的配置:

用于SPI通信的ASCLIN模块的配置是在设置阶段通过初始化IfxAsclin_Spi_Config结构的一个实例来完成的:

baudrate–SPI通信波特率

interrupt–中断配置:传输和接收中断优先级(tx优先级、rx优先级);

​ 服务类型——定义了哪个服务提供商负责处理中断,该中断可以是任何可用的cpu,或DMA

pins–设置用于通信的GPIO端口引脚的结构。

函数IfxAsclin_Spi_initModuleConfig()用默认值填充配置结构,而IfxAsclin_Spi_initModule()用用户配置初始化模块。

以上所有的函数都可以在iLLD报头IfxAsclin_Spi.h中找到。

SPI消息交换功能:

数据输出(MTSR/MOSI)通过内部环回连接到数据输入(MRST/MISO)

这两个字节的消息通过函数exchange_ASCLIN_SPI_message()发送,该函数在ASCLIN模块初始化后被调用一次。

这两个字节的消息使用IfxAsclin_Spi.h头文件中的函数IfxAsclin_Spi_exchange()g_spiTxBuffer发送到g_spiRxBuffer

具体实现

Cpu0_Main.c

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

IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;

void core0_main(void)
{
    IfxCpu_enableInterrupts();
    
    /* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!
     * Enable the watchdogs and service them periodically if it is required
     */
    IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
    IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());
    
    /* Wait for CPU sync event */
    IfxCpu_emitEvent(&g_cpuSyncEvent);
    IfxCpu_waitEvent(&g_cpuSyncEvent, 1);
    
    /* 对SPI进行初始化 */
    init_ASCLIN_SPI_master();
    /* 开启数据交换 */
    exchange_ASCLIN_SPI_message();

    while(1)
    {
    }
}

ASCLIN_SPI.c

/*
 * ASCLIN_SPI.c
 *
 *  Created on: 2023年4月7日
 *      Author: kevin
 */
#include "IfxAsclin_Spi.h"

#define SPI_BUFFER_SIZE             2                                           /* Size of the SPI buffer in bytes  */

#define BAUDRATE                    115200                                      /* Define baud rate in bit/s        */
#define PRESCALER                   1                                           /* Define prescaler                 */

#define IFX_INTPRIO_ASCLIN1_TX      1                                           /* Define TX interrupt priority     */
#define IFX_INTPRIO_ASCLIN1_RX      2                                           /* Define RX interrupt priority     */

#define CLOCK_PIN                   IfxAsclin1_SCLK_P20_10_OUT                  /* Define Clock port pin            */
#define MTSR_PIN                    IfxAsclin1_TX_P15_4_OUT                     /* Define MTSR port pin             */
#define MRST_PIN                    IfxAsclin1_RXB_P15_5_IN                     /* Define MRST port pin             */

IfxAsclin_Spi g_spiHandle;
uint8 g_spiTxBuffer[] = {'E', 'T'};
uint8 g_spiRxBuffer[SPI_BUFFER_SIZE];

/* Add SPI Interrupt Service Routines */
IFX_INTERRUPT(asclin1TxISR, 0, IFX_INTPRIO_ASCLIN1_TX);
/* Transmit interrupt function */
void asclin1TxISR(void)
{
    IfxAsclin_Spi_isrTransmit(&g_spiHandle);
}


void init_ASCLIN_SPI_master(void)
{
    /* Initialize one instance of IfxAsclin_Spi_Config with default values */
    IfxAsclin_Spi_Config spiMasterConfig;
    IfxAsclin_Spi_initModuleConfig(&spiMasterConfig, &MODULE_ASCLIN1);

    /* Set the desired baud rate */
    spiMasterConfig.baudrate.prescaler = PRESCALER;
    spiMasterConfig.baudrate.baudrate = BAUDRATE;

    /* ISR priorities and service provider */
    spiMasterConfig.interrupt.txPriority = IFX_INTPRIO_ASCLIN1_TX;
    spiMasterConfig.interrupt.rxPriority = IFX_INTPRIO_ASCLIN1_RX;
    spiMasterConfig.interrupt.typeOfService = IfxSrc_Tos_cpu0;

    /* Pin configuration */
    const IfxAsclin_Spi_Pins pins =
    {
        &CLOCK_PIN,   IfxPort_OutputMode_pushPull, /* Clock output port pin (CLK)   */
        &MRST_PIN,    IfxPort_InputMode_pullUp,    /* MRST port pin         (MISO)  */
        &MTSR_PIN,    IfxPort_OutputMode_pushPull, /* MTSR port pin         (MOSI)  */
        IfxPort_PadDriver_cmosAutomotiveSpeed1
    };
    spiMasterConfig.pins = &pins;

    /* Initialize module with the above parameters */
    IfxAsclin_Spi_initModule(&g_spiHandle, &spiMasterConfig);
}


/* This function exchanges a two bytes message */
void exchange_ASCLIN_SPI_message(void)
{
    /* Exchange the two bytes message */
    IfxAsclin_Spi_exchange(&g_spiHandle, g_spiTxBuffer, g_spiRxBuffer, SPI_BUFFER_SIZE);
}


ASCLIN_SPI.h

/*
 * ASCLIN_SPI.h
 *
 *  Created on: 2023年4月7日
 *      Author: kevin
 */

#ifndef ASCLIN_SPI_H_
#define ASCLIN_SPI_H_

void init_ASCLIN_SPI_master(void);

void exchange_ASCLIN_SPI_message(void);

#endif /* ASCLIN_SPI_H_ */

使用示波器测试P15.4引脚,会得到如下波形图

在这里插入图片描述

对波形进行分析可得,字符为:'E'和 'T'

在这里插入图片描述

15.415.5连接后,可以得到缓冲区g_spiTxBuffer和缓冲区g_spiRxBuffer的内容一致。

3、域控制器中常见的SPI通信方式

3.1、MCU-SOC之间的主从SPI通信交互

具体使用案例分析

在这里插入图片描述

在这里插入图片描述

硬件连接电路

在这里插入图片描述

主设备为MCU,从设备为SOCGPIO1MCU输出引脚,与片选信号CS连接–从设备输入引脚;GPIO2为从设备输出引脚。GPIO1的作用是:告诉从设备,主设备接收数据已经完成;GPIO2的作用是,向主设备发起信号传输请求,发送一个中断信号。

MCUSOC SPI通信的流控方法:

  • ①、主设备(MCU)和从设备(SOC)之间通过通信信道进行数据传输;

  • ②、当从设备(MCU)向主设备(SOC)发送数据时,将GPIO2引脚设置为第一状态(第一状态指的是GPIO2从高电平变为低电平再变为高电平的过程);向主设备(MCU)发送中断信号;

  • ③、主设备(MCU)接收到中断信号后发起传输,接收来自从设备(SOC)的数据。如果主设备(MCU)没有发起传输,从设备会(SOC)一直阻塞。

  • ④、当从设备(MCU)检测到第一GPIO引脚从高电平变为低电平时,判断数据帧传输完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ble常见概念

0. 蓝牙一些常见概念 参考:https://www.bilibili.com/video/BV1ad4y1d7AM 基于ESP32来了解蓝牙协议的一些东西 蓝牙广播 包组成结构 低功耗蓝牙一共有40个信道,频段范围从2402Mhz-2480Mhz,每2Mhz一个信道,37 38 39 是广播信道…

基于linux的程序库文件打包和调用的实现(一)——静态库文件打包和调用

随着技术的发展,基于linux项目的软件代码越发复杂,原来一个人可以完成的软件项目,现在可能需要多个人合作、多个部门合作、多个企业合作,每个人、每个部门、每个企业可能负责部分软件模块的开发。各个软件模块在调试过程由于涉及企…

DeFi 发展沃土,Uniswap 成功“登陆” Moonbeam

作者:OneBlock 去年 3 月底,Uniswap 社区发布一项全新治理提案,旨在通过社区授权于 Polkadot 生态智能合约平台 Moonbeam 上部署 Uniswap V3,将 Uniswap 扩展至 Polkadot 生态。在这项提案中,Uniswap 计划除了提供流动…

极兔抢滩IPO,李杰不止缺一个丰网

(图片来源于网络,侵删) 来源 | 螳螂观察 文 | 叶小安 物流业打响了上市“抢滩战”。 5月,顺丰控股传出2023年在香港二次上市消息;紧接着极兔也传出将于下半年赴港上市消息;另一边,阿里主席张…

最新自助建站系统源码 一键建站系统源码 含700+精美网站模板和搭建教程

分享一款最新自助建站系统源码,一键建站系统源码,傻瓜式一键建站含700精美网站模板,网站全是自适应响应式,含完整代码程序包和详细搭建教程。 系统模板页面图: 系统功能特色一览: 1、一次性打包&#xff0…

chatgpt接口返回参数分析

接口请求使用二进制请求,数据流式返回,即分块(分批次)返回。 问题:一周有几天 请求头 参数详解 参数名称 说明 role 消息发送者的角色,这里为 "assistant"。 id 消息的唯一标识符。 pare…

图的基本概念和存储

基本概念 基本概念 图的定义:图(Graph)一般由两个集合共同构成,一个是非空但是有限的顶点集合V(Vertex),另一个是描述顶点之间连接关系的边集合E(Edge),边集合可以为…

4.信息安全之数据恢复

1.数据容灾数据备份 RPO(recovery point object)数据恢复点目标 数据丢掉多少可接受 RTO(recovery time object)数据恢复时间目标 恢复数据需要多少时间 2.系统灾难原因 1.硬件 2.人为 3.软件 4.病毒 5.自然灾害 3.容灾级别 数据级别(数据出错)<应用(某个功能不能使用)<业…

运维小白必学篇之基础篇第二集:文件系统结构和目录管理

文件系统结构和目录管理实验 实验者&#xff1a;胡 阳 目录 一、将虚拟机主机名改为自己的名字 二、完成以下操作&#xff1a; 一、将虚拟机主机名改为自己的名字 例如&#xff1a;hostname liangyuntong 关闭该终端后&#xff0c;重新打开即可 二、完成以下操作&#…

【AIGC】CPM-BEE 开源大模型介绍、部署以及创建接口服务

终于! 中文基座模型CPM-Bee开源了 # CPM-Bee 百亿参数的开源中英文双语基座大模型 ✨ 模型介绍 CPM-Bee是一个完全开源、允许商用的百亿参数中英文基座模型&#xff0c;也是CPM-Live训练的第二个里程碑。它采用Transformer自回归架构&#xff08;auto-regressive&#xff0…

直播预告丨SaaS+CG?UE影视级场景渲染与科学制片全流程揭秘!

余热不减&#xff01;在第二届瑞云3D渲染动画创作大赛赛果公布 后&#xff0c;小瑞紧锣密鼓在安排获奖选手的系列专场直播。在上期的“ 泛CG 聚未来 ” 第四届实用技术线上分享会中,咱们邀请到大赛专业组冠亚军“3ds Max老法师”彼尔德和“Maya大神”Shuiguo 分享了自己的创作历…

cplex基础入门(一)

这边文章会以纯新手小白的视角&#xff0c;教会大家如何快速的搭建自己的cplex模型&#xff0c;做到求解模型不求人。 目录 一、引言 1、掌握数据类型及数据结构 2、常规Cplex编程方法 3、Cplex编程步骤 4、cplex 程序框架 5、创建模型 二、规划建模的入门求解案例 1、…

代码随想录训练营Day57| 647. 回文子串 516.最长回文子序列 动态规划总结篇

目录 学习目标 学习内容 647. 回文子串 516.最长回文子序列 学习目标 647. 回文子串 516.最长回文子序列 动态规划总结篇 学习内容 647. 回文子串 647. 回文子串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/palindromic-substrings/ class S…

3.部署 Stable Diffusion(SD)

部署Stable Diffusion webui方式: 本地部署:在自己的电脑上安装(官方脚本部署、懒人包部署(文末自取)) 云端部署:在远程服务上运行(免费有时长限制、可付费租用GPU) 两种部署方式哪种都可以,看需选择。如果有性能比较不错的的显卡,那么可以考虑本地部署。如果是没…

java养老院老年人档案管理系统springboot+vue

本居家养老系统管理员和工作人员两个角色。管理员功能有个人中心&#xff0c;老人账号管理&#xff0c;工作人员管理&#xff0c;老人档案管理&#xff0c;订单申请管理&#xff0c;检查检验项目管理&#xff0c;维修服务管理&#xff0c;订单信息管理&#xff0c;转诊信息管理…

一文简述低代码到底是什么?

在进入正文之前&#xff0c;有必要给大家拨正一个误区&#xff1a; “开发≠写代码” 由于现在低代码&零代码产品在宣传过程中着重强调“公民开发”这一概念&#xff0c;我们随便点开一篇相关文章章&#xff0c;必定会有一句&#xff1a;“人人都是开发者&#xff0c;无需…

计算机中丢失MSVCP140.dll无法启动此程序怎么办

MSVCP140.dll是Microsoft Visual C Redistributable文件中的一个动态链接库文件&#xff0c;它是Microsoft Visual Studio 2015和2017中的一部分。它包含一组选项卡&#xff0c;其中包含C/C开发所需的库。该文件通常位于计算机的Windows/System32目录中&#xff0c;它提供了用于…

Vue2——入门(适合后端程序员看)

Vue组件 Vue 的组件文件以 .vue 结尾&#xff0c;每个组件由三部分组成 <template></template><script></script><style></style> template 模板部分&#xff0c;由它生成 html 代码 script 代码部分&#xff0c;控制模板的数据来源和行…

30天从入门到精通TensorFlow1.x 第二天,变量 tf.Variable()

文章目录 一&#xff0c;接前一天&#xff08;1&#xff09;.内容前先弄清楚 sess.run() 函数a. 该函数干嘛的b. 该函数有哪些参数c. 该函数的使用 &#xff08;2&#xff09;.由库函数创建张量&#xff08;3&#xff09;.由库函数创建张量 二、变量tf.Variable()&#xff08;1…

git在一台电脑上配置不同的仓库(多个gitee仓库、或者不同的github仓库)

前言 在开发过程中&#xff0c;我们工作的时候难免会使用到两个不同的仓库&#xff0c;但是正常来说一电脑默认一个参考&#xff0c;直接会用全局命令 git config --global user.name "yourName"但是这样只能配置一个仓库了&#xff0c;本文介绍在一台电脑上配置多…