技术帖 | 飞凌嵌入式AM62x核心板SPI的详解与应用

SPI(Serial Peripheral Interface)通信总线以其高速、全双工、同步的特性而被广泛应用,它只需要四根线就能实现数据传输,有效地节约了芯片管脚的数量,同时为PCB布局带来了空间上的优化和便捷。正因为它简单易用的特点,现在越来越多的芯片选择集成SPI通信协议。

作为TI Sitara™产品线新一代MPU产品,TI AM62x处理器特别配备了多达4路的SPI接口以及1路OSPI接口(有时也称为QSPI),丰富的SPI接口配置使得该处理器能够同时与多个设备进行通信连接,大大提高了系统的扩展性和灵活性。

在飞凌嵌入式推出的搭载了AM62x处理器的OK6254-C开发板上,NOR Flash存储器正是通过连接到处理器的OSPI总线上进行工作的。这样的设计充分利用了SPI通信协议的高速传输和全双工特性,保证了开发板在数据处理和存储方面的效率。本文就通过OK6254-C开发板为大家介绍一下AM62x的SPI。

图片

一、SPI的工作流程和时序

我们首先需要了解一下SPI是如何工作的——通常SPI通过4个引脚与外部器件相连:

(1) MISO:主设备输入/从设备输出引脚

该引脚在从模式下发送数据,在主模式下接收数据;

(2) MOSI:主设备输出/从设备输入引脚

该引脚在主模式下发送数据,在从模式下接收数据;

(3) CLK:串口时钟

作为主设备的输出,从设备的输入;

(4) NSS:从设备选择

这是一个可选的引脚,用来选择从设备。

SPI的工作流程是这样的:

(1) 主机先将NSS信号拉低,这样保证开始接收数据;

(2) 当接收端检测到时钟的边沿信号时,将立即读取数据线上的信号,这样就得到了一位数据;

(3) 由于时钟是随数据一起发送的,因此指定数据的传输速度并不重要,尽管设备将具有可以运行的最高速度;

(4) 主机发送到从机时,主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机;

(5) 主机接收从机数据时,如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送。

SPI工作时序图如下:

图片

二、AM62x处理器中SPI总线的特点

在AM62x这款芯片中,TI将SPI的MISO与MOSI设计为d0和d1,具体哪一个作为输入,哪一个作为输出,是由设备树中的 ti,pindir-d0-out-d1-in= <1>来设置的。

默认属性值为0,即d0是输入,d1是输出;

当属性值为1时,d0为输出,d1为输入。

三、AM62x的SPI应用

1. menuconfig配置:

将该项选中,SPI驱动将编译进内核中。

makemenuconfi

DeviceDrivers ->

SPIsupport ->

Usermode SPI device driver support

(注:在飞凌嵌入式OK6254-C开发板中,SPI驱动编译已进去。)

2. 设备树配置:

(1) 选择需要使用的spi,这里我们用spi0,节点为&main_spi0;

(2) 将该节点所用的引脚复用为相应的功能。spi0_pins_default: spi0-pins-default {

    pinctrl-single,pins = <            AM62X_IOPAD(0x1B4, PIN_OUTPUT, 0) /* (A13) SPI0_CS0 */            AM62X_IOPAD(0x1B8, PIN_OUTPUT, 0) /* (C13) SPI0_CS1 */            AM62X_IOPAD(0x1C0, PIN_INPUT, 0) /* (B13) SPI0_D0 */            AM62X_IOPAD(0x1BC, PIN_OUTPUT, 0) /* (A14) SPI0_CLK */            AM62X_IOPAD(0x1C4, PIN_INPUT, 0) /* (B14) SPI0_D1 */        >;    };

(3) 描述节点的属性,具体配置项的功能见注释。

&main_spi0 {  status = "okay";  pinctrl-names = "default";  pinctrl-0 = <&spi0_pins_default>; /* 描述引脚复用节点 */  ti,spi-num-cs = <2>;      /* 描述片选的数量 */  ti,pindir-d0-out-d1-in = <1>; /* 描述输入输出分别是哪个 */    /* 描述子节点spidev0设备 */  spidev@0 {              spi-max-frequency = <24000000>; /* 描述spidev0设备的最大频率 */              reg = <0>;   /* 描述spidev0设备所用的片选,这里是第0个 */              spi-cs-high;  /* 描述spidev0设备高有效 */              compatible = "rohm,dh2228fv";  /* 描述spidev0设备所用驱动 */  };  /* 描述子节点spidev1设备 */  spidev@1 {              spi-max-frequency = <24000000>;              reg = <1>;              compatible = "rohm,dh2228fv";  };};

3. 编译烧录:

在源码路径下输入以下命令:

. build.shsudo ./build.sh kernel

没有报错即为编译成功。

将源码路径下的image中的OK6254-C.dtb文件放到开发板的/boot目录中,重启开发板即可。

4. SPI测试:

将spi0_D0和spi0_D1短接

重启开发板后,在/dev目录下看到多出两个spidev设备。

使用我们的测试程序

fltest_spidev_test -D /dev/spidev3.0 -s 42000

有如下打印信息即为成功:

spimode: 0

bitsper word: 8

maxspeed: 42000 Hz (42 KHz)

FFFF FF FF FF FF

4000 00 00 00 95

FFFF FF FF FF FF

FFFF FF FF FF FF

FFFF FF FF FF FF

DEAD BE EF BA AD

F00D

四、总结

TI AM62x处理器有着丰富的SPI资源,而SPI又可以作为许多设备的总线,这使得AM62x能够接入许多SPI接口的设备,因此在那些对SPI有着比较多需求的应用场景下,TI AM62x无疑是一个非常好的主控选择。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

csp模拟题(201604-2,俄罗斯方块模拟下坠)

题目 问题描述 俄罗斯方块是俄罗斯人阿列克谢帕基特诺夫发明的一款休闲游戏。   游戏在一个15行10列的方格图上进行&#xff0c;方格图上的每一个格子可能已经放置了方块&#xff0c;或者没有放置方块。每一轮&#xff0c;都会有一个新的由4个小方块组成的板块从方格图的上方…

NCV7356D1R2G接口集成芯片中文资料PDF数据手册参数引脚图规格书价格图片

产品概述&#xff1a; NCV7356 是一款用于单线数据链路的物理层器件&#xff0c;能够使用多种具碰撞分解的载波感测多重存取 (CSMA/CR) 协议运行&#xff0c;如博世控制器区域网络 (CAN) 2.0 版。此串行数据链路网络适用于不需要高速数据的应用&#xff0c;低速数据可在物理介…

基于RK3588+Codesys+Xenomai的ARM+LINUX实时硬件平台的软PLC解决方案

产品概述 公司推出基于瑞芯微RK3588架构的AI边缘计算主板&#xff0c;RK3588是新一代国产旗舰高性能64位八核处理器&#xff0c;采用8nm工艺&#xff0c;具有高算力、低功耗、超强多媒体、丰富数据接口等特点。搭载四核A76四核A55的八核CPU和ARM G610MP4 GPU&#xff0c;内置6…

css超出部分显示省略号

目录 前言 一、CSS单行实现 二、CSS多行实现&#xff08;CSS3出的&#xff0c;兼容性需要注意&#xff09; 三、微信小程序超过2行出现省略号实现 四、JavaScript脚本实现 前言 CSS文本溢出就显示省略号&#xff0c;就是在样式中指定了盒子的宽度与高度,有可能出现某些内…

STM32基础--中断应用

本文章里面假设中断就是异常&#xff0c;不做区分。 异常类型 F103 在内核水平上搭载了一个异常响应系统&#xff0c;支持为数众多的系统异常和外部中断。其中系统异常有 8 个&#xff08;如果把 Reset 和 HardFault 也算上的话就是 10 个&#xff09;&#xff0c;外部中断有…

百度paddleocr GPU版部署

显卡&#xff1a;NVIDIA GeForce RTX 4070&#xff0c;Nvidia驱动程序版本&#xff1a;537.13 Nvidia驱动程序能支持的最高cuda版本&#xff1a;12.2.138 Python&#xff1a;python3.10.11。试过python3.12&#xff0c;安装paddleocr失败&#xff0c;找不到相关模块。 飞桨版本…

Java优先级队列(堆)

&#x1f435;本篇文章将对优先级队列&#xff08;堆&#xff09;的相关知识进行讲解 一、优先级队列 队列是一种“先入先出”的数据结构&#xff0c;但有时操作的数据带有优先级&#xff0c;需要优先处理&#xff0c;这时普通的队列就不能满足需求。比如&#xff1a;在排队取…

《JAVA与模式》之抽象工厂模式

系列文章目录 文章目录 系列文章目录前言一、使用简单工厂模式的解决方案二、引进抽象工厂模式三、抽象工厂模式结构四、抽象工厂模式的优缺点前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看…

Github上哪些好用的安全工具1

专注于web漏洞挖掘、内网渗透、免杀和代码审计&#xff0c;感谢各位师傅的关注&#xff01;网安之路漫长&#xff0c;与君共勉&#xff01; URLFinder 一款快速提取网页信息的工具。该项目可以快速爬取网页上的 URL 地址、JS 文件里的 API 接口等信息&#xff0c;支持批量抓取…

推荐算法中经典排序算法GBDT+LR

文章目录 逻辑回归模型逻辑回归对于特征处理的优势逻辑回归处理特征的步骤 GBDT算法GBDTLR算法GBDT LR简单代码实现 逻辑回归模型 逻辑回归&#xff08;LR,Logistic Regression&#xff09;是一种传统机器学习分类模型&#xff0c;也是一种比较重要的非线性回归模型&#xff0…

LeetCode199题:二叉树的右视图(python3)

代码思路&#xff1a;深度优先搜索&#xff0c;每次总访问右子树&#xff0c;value_depth用dict存放&#xff0c;深度为索引&#xff0c;存放节点的值&#xff0c;stack从根节点[(root, 0)]开始&#xff0c;添加node和depth class Solution:def rightSideView(self, root: Opt…

深入理解 CSS——CSS进阶与实践(5w字高频面试题整理)

本文总结了CSS高频面试题&#xff0c;并搭配了演示动画进行CSS样式演示。介绍了关于如何理解盒模型&#xff0c;如何实现块级元素水平居中&#xff0c;如何实现两侧固定中间自适应的三栏布局、如何实现两栏布局&#xff0c;如何进行响应式设计&#xff0c;对BFC的理解&#xff…

04- 基于SpringAMQP封装RabbitMQ,消息队列的Work模型和发布订阅模型

SpringAMQP 概述 使用RabbitMQ原生API在代码中设置连接MQ的参数比较繁琐,我们更希望把连接参数写在yml文件中来简化开发 SpringAMQP是基于AMQP协议定义的一套API规范,将RabbitMQ封装成一套模板用来发送和接收消息 AMQP(Advanced Message Queuing Portocol)是用于在应用程序…

【危化品泄漏源定位】基于改进哈里斯鹰优化算法的危化品泄漏源定位算法 溯源定位算法【Matlab代码#63】

文章目录 【获取资源请见文章第7节&#xff1a;资源获取】1. 算法概述2. 原始哈里斯鹰算法&#xff08;HHO&#xff09;3. 改进哈里斯鹰算法&#xff08;IHHO&#xff09;3.1 动态自适应逃逸能量3.2 动态扰动策略 4. 构建源强和位置反算模型5. 部分代码展示6. 仿真结果展示7. 资…

牛-迈面试题----答案/类似题/知识点

来源在这里 来源在这里 1.Redis的优势 (1) 速度快&#xff0c;因为数据存在内存中&#xff0c;类似于HashMap&#xff0c;HashMap的优势就是查找和操作的时间复杂度都很低 (2)支持丰富数据类型&#xff0c;支持string&#xff0c;list&#xff0c;set&#xff0c;sorted set&…

Linux之线程互斥

目录 一、问题引入 二、线程互斥 1、相关概念 2、加锁保护 1、静态分配 2、动态分配 3、锁的原理 4、死锁 三、可重入与线程安全 1、概念 2、常见的线程不安全的情况 3、常见的线程安全的情况 4、常见不可重入的情况 5、常见可重入的情况 6、可重入与线程安全联系…

idea 导入项目

idea 导入项目并运行 导入设置设置 jdk查看maven 设置 导入 在项目首页 或者 file 选择 open, 然后选择项目根路径 设置 设置 jdk 查看maven 设置

Linux基础命令[18]-whoami

文章目录 1. whoami 命令说明2. whoami 命令语法3. whoami 命令示例4. 总结 1. whoami 命令说明 whoami&#xff1a;用于显示当前用户名&#xff0c;功能与 id -un 相同。基本信息如下&#xff1a; Usage: whoami [OPTION]... Print the user name associated with the curre…

数码管动态扫描显示

摸鱼记录 Day_16 (&#xff9f;O&#xff9f;) review 前边已经学习了&#xff1a; 串口接收&#xff1a;Vivado 串口接收优化-CSDN博客 1. 今日摸鱼任务 串口接收数据 并用数码管显示 (&#xff9f;O&#xff9f;) 小梅哥视频&#xff1a; 17A 数码管段码显示与动态扫…

ES6(一):let和const、模板字符串、函数默认值、剩余参数、扩展运算符、箭头函数

一、let和const声明变量 1.let没有变量提升&#xff0c;把let放下面打印不出来&#xff0c;放上面可以 <script>console.log(a);let a1;</script> 2.let是一个块级作用域,花括号里面声明的变量外面找不到 <script>console.log(b);if(true){let b1;}//und…