基于全志D1-H的Tina Linux SPI主从通信验证实录

news2024/10/7 14:28:26

本文转载自:https://bbs.aw-ol.com/topic/3031
作者 @ whycan矿工-小叶

背景

  • 主控: D1H
  • 板卡: 两块哪吒开发板(以下简称为主机, 从机)
  • 操作系统: Tina Linux 2.0

问题

验证D1H芯片SPI主从机通信.

硬件接线

主机SPI从机SPI
19SPI1_MOSISPI1_MOSI19
21SPI1_MISOSPI1_MISO21
23SPI1_SCKSPI1_SCK23
24SPI1_CESPI1_CE24

SPI概述

SPI接口是一种高速的, 全双工, 同步的通信总线.
适配D1H芯片的Tina Linux的BSP-SDK(以下简称SDK)中已包含相关驱动文件: spi-sunxi.c.
它提供的了仅内核态下主从机的简易通信验证实验, 这或许是考虑到SPI通信速率比较高的特性.
验证操作

SPI主机配置

menuconfig

在SDK执行完环境变量加载后, 执行:

/mnt/tina-d1-h$ make kernel_menuconfig

●开启Device Drivers->SPI support
●进入SPI support, 按图示开启:

在这里插入图片描述

设备树

修改: ./device/config/chips/d1-h/configs/nezha/board.dts

在这里插入图片描述

需要根据手册和原理图确认好针脚功能:
在这里插入图片描述

SPI从机配置

menuconfig

(同SPI主机配置一致)

设备树

仅spi_slave_mode设为0, 其余项同SPI主机配置一致. spi_slave_mode = <0>;

SPI主机收发信息

按上述配置, 重新编译SDK, 打包, 烧录, 启动设备会出现:

root@TinaLinux# ls -l /dev/spidev1.0
crw-------    1 root     root      153,   0 Jan  1 08:00 /dev/spidev1.0

然后将可执行的SPI测试程序(./lichee/linux-5.4/tools/spi/spidev_test)挪到设备上(adb push等)并赋予可执行权限:

# 主机以10MHz发送(即MOSI)发送16进制数据: 0x01 0x02 0x03 0x04
./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "\x01\x02\x03\x04" 
# 主机以10MHz发送(即MOSI)发送ASCII字符串数据: "allwinner"
./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p  "allwinner"
spi mode: 0x0
bits per word: 8
max speed: 10000000 Hz (10000 KHz)
TX | 61 6C 6C 77 69 6E 6E 65 72 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  |allwinner|

注意SPI是同步通信接口, 所以在发送的同时也会接收同样长度字节的数据.
下文将用到SPI主从通信的一种常见做法: 主机先发指令头, 然后再发指令体以获取从机应答.

SPI从机收发信息

spi-sunxi.c中对SPI从机模(SLAVE_MODE)采取了简单的收发验证处理, 具体是创建一个内核线程执行int sunxi_spi_slave_task(void *data), 该函数又被设备中断所控制(当收到SPI数据时).

  • SPI从机接收到数据的主要流程:
    sunxi_spi_slave_task() -> sunxi_spi_slave_handle_head(), 然后:
    若指令头是写操作(0x01), 则执行:sunxi_spi_slave_cpu_rx_config(), 该函数仅是输出写入内容.
    若指令投是读操作(0x03), 则执行:sunxi_spi_slave_cpu_tx_config(), 该函数仅是将收到的指令体的值+0x80, 然后发送(MISO)给主机.

  • 对于从机, spi-sunxi.c能验证SPI通信, 但没有可供用户层直接使用的方法.

用户层可验证的SPI从机收发方案

功能设计

从机安排一块32byte的内存缓存空间(简称"缓存空间")供主机通过指令进行读操作和写操作, 且从机能在用户层对该内存空间访问.

主要改动

  • spi.c:
    • 增加static struct class_attribute ye_spi_buf_attrs[], 以创建/sys/class/spi_slave目录下的spi_buf文件, 并提供实现了读/写缓存空间的方法.
  • spi-sunxi.c:
    • 使用ye_spi_slave_set_txdata()方法替换sunxi_spi_slave_set_txdata(), 以实现读操作.
    • 修改sunxi_spi_slave_cpu_rx_config()方法, 以实现写操作.

改动详情请查看: d1h_spi_driver.diff

使用方法

写操作: 操作:0x01(写) 地址:0x00 0x00 0x00 指令体长度:0x09
./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "\x01\x00\x00\x00\x09" && \
./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p  "allwinner"

读操作: 操作:0x03(读) 地址:0x00 0x00 0x00 指令体长度:0x09
./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p "\x03\x00\x00\x00\x09" && \
./spidev_test -v -D /dev/spidev1.0 -s 10000000 -p  "\x00\x00\x00\x00\x00\x00\x00\x00\x00"

从机读取缓存空间:
cat /sys/class/spi_slave/spi_buf

从机写入缓存空间:
echo "Hello world" > /sys/class/spi_slave/spi_buf

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

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

相关文章

Git切换用户;Git提交之后是别人的用户怎么办?

Git切换用户 前言解决方法1.删除计算机凭证2.Idea控制台切换 前言 前几天在入职之后&#xff0c;公司的电脑上仍然储存了之前用户的信息&#xff0c;比如git。 我在创建分支、提交代码的时候会遇到这样的问题&#xff1a; 登录的是我自己的账号&#xff0c;但是在git动态里缺…

借助TeeChart图表控件,创建本地静态、实时浏览器图表

Steema是全球领先的图表类控件公司&#xff0c;总部设在西班牙的巴塞罗那附近&#xff0c;Steema公司的VCL图表报表控件在全球拥有极高知名度。TeeChart可以在微软的Visual Studio、Office和.NET以及Java和PHP开发平台中使用&#xff0c;也可以作为本地Javascript-HTML5使用。 …

Python新手怎么兼职,用Python在家兼职赚钱的4个方法

随着人工智能技术的发展&#xff0c;各行各业都在发生着变化&#xff0c;每天AI&#xff08;人工智能&#xff09;新技术都在冲击着各行各业&#xff0c;比如WPS的智能设计、阿里的鲁班等等&#xff0c;总有一种干死干活不如早点掌握新技能的感觉&#xff0c;避免心中的小慌张。…

DAY 65 mysql的高可用之MHA集群

MHA概述 什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点故障的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换…

基于原子化思想的 Vue3 组件库 UnoCSS UI

UnoCSS UI 项目地址前言Monorepo 项目架构UnoCSS UI 的模块设计PNPM Monorepo 常用操作: --filter, -wMonorepo 中的依赖管理项目整体结构 基于原子化 CSS 的组件封装方式原子化 CSS 基础原子化 VS 内联样式原子化 VS class 原子化对组件封装的影响unocss-ui/components 项目结…

HashTable 在蚂蚁转化归因中的极致运用

作者&#xff1a;开七 蚂蚁集团数据技术专家 本文围绕 hash cluster 表运用及 Shuffle 过程原理进行讨论&#xff0c;欢迎各位开发者加入大数据计算 MaxCompute 社区&#xff1a;https://developer.aliyun.com/group/maxcompute 概述 蚂蚁的转化归因在初期运行两个多小时的情况…

Facebook拆分的深度思考:社交媒体真的是必需品吗?

在当今数字化时代&#xff0c;社交媒体已经成为我们日常生活中不可或缺的一部分。而Facebook作为其中的巨头之一&#xff0c;不可否认地对人们的社交行为和信息传播产生了巨大的影响。 然而&#xff0c;随着越来越多的争议和讨论浮出水面&#xff0c;我们有必要进行深入思考&a…

文档处理新探究成果——前沿技术CCIG文档图像智能分析论坛分享

目录 前言 一、文档分析与识别最新研究 二、视觉-语言预训练模型及迁移学习 三、篡改文本图像的生成与检测技术 四、智能文档处理技术在工业界的应用与挑战 总结 前言 图文智能处理前沿技术一直是我所关注的技术&#xff0c;尤其在现在集成多态大模型的基础之上&#xff0…

关于PCBA元器件布局的重要性

SMT贴片加工逐步往高密度、细间距的设计发展&#xff0c;元器件的最小间距设计&#xff0c;需考虑SMT厂家的经验和工艺完善程度。元器件最小间距的设计&#xff0c;除了保证SMT焊盘间安全距离外&#xff0c;还应考虑元器件的可维护性。 器件布局时保证安全间距 1、安全距离跟…

设计模式-简单例子理解适配器模式、装饰器模式

文章目录 一、适配器模式1. 要点2. Demo 二、装饰器模式1. 要点2. Demo 三、区别 本文参考&#xff1a; 基本原理&#xff1a;装饰器模式 | 菜鸟教程 (runoob.com) 基本原理&#xff1a;适配器模式 | 菜鸟教程 (runoob.com) 优缺点和区别&#xff0c;装饰模式&#xff1a;适配器…

微服务流量控制组件Sentinel

1 简介 Sentinel是阿里开源的项目&#xff0c;是一款面向分布式服务架构的轻量级流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、熔断降级、系统自适应保护等多个维度来保障服务的稳定性。 核心思想是&#xff1a;根据对应资源配置的规则来为资源执行相…

西米支付:“中止”支付牌照,汇卡支付机构“失联”

近日&#xff0c;又一家支付公司因“失联”被列入了经营异常名录。 工商信息显示&#xff0c;目前被“中止”中的持牌支付机构广东汇卡商务服务有限公司&#xff08;简称“汇卡支付”&#xff09;因“通过登记的住所或者经营场所无法联系” 被广州市市场监督管理局列入经营异常…

网络进阶学习:单臂路由(灵魂五问)

单臂路由&#xff08;灵魂五问&#xff09; 一问&#xff1a;什么是单臂路由&#xff1f;二问&#xff1a;单臂路由这一概念怎么出现的&#xff1f;三问&#xff1a;单臂路由解决什么问题&#xff1f;能不能用其他方式取代单臂路由?四问&#xff1a;单臂路由最合适的应用场景&…

电脑E盘被不小心格式化了?别急,介绍三种数据恢复方法

电脑E盘格式化后如何恢复数据&#xff1f;意外的电脑E盘格式化或许是每个人都遇到过的问题。然而&#xff0c;当您发现您的重要数据已经丢失时&#xff0c;您可能会感到沮丧甚至绝望。但请不要担心。在本文中&#xff0c;我们将介绍一些有助于您找回数据的方法&#xff0c;希望…

2023年5月DAMA-CDGA/CDGP数据治理认证咋样

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

uvc驱动ioctl分析下

uvc驱动ioctl分析下 文章目录 uvc驱动ioctl分析下uvc_ioctl_enum_input枚举输入uvc_query_ctrl__uvc_query_ctrluvc_ioctl_g_input 获取输入uvc_ioctl_s_input 设置输入uvc_query_v4l2_ctrluvc_ioctl_queryctrl查询控制器uvc_ioctl_query_ext_ctrl查询扩展控制器 uvc_ioctl_g_c…

系统分析师经典易错题,解题思路二

企业应用集成(Enterprise Application Integration EAI)技术企业应用集成技术可以消除信息孤岛,它将多个企业信息系统连接起来,实现无缝集成,使他们就像一个整体一样。EAI是伴随着企业信息系统的发展而产生和演变的,企业的价值取向是推动EAI技术发展的原动力,而EAI的实现…

煤矿电子封条系统 yolov7网络模型

煤矿电子封条系统通过yolov7网络模型算法&#xff0c;煤矿电子封条系统可以实现对煤矿井下人员的出入管理&#xff0c;提高对煤矿井下人员的监管效果。YOLOv7 的策略是使用组卷积来扩展计算块的通道和基数。研究者将对计算层的所有计算块应用相同的组参数和通道乘数。然后&…

从热爱到深耕,在开发路上的他们勇敢逐梦

2022年的程序员节&#xff0c; #大龄程序员去哪儿了#成为了社交媒体上最火的话题之一&#xff0c;程序员的职场成长问题在社会上引起了广泛关注。 有2位在技术领域摸爬滚打很多年的开发者&#xff0c;35岁后的他们&#xff0c;有70后&#xff0c;有80后&#xff0c;依然在编程…

【Java编程系列】Springcloud-gateway自带限流方案实践篇

1、前言 作为一个后端开发&#xff0c;对于后端服务的安全性方面&#xff0c;一定要有足够的考虑。近期的开发工作中&#xff0c;有一个实现分享外部链接的需求点&#xff0c;个人认为这一块会有安全隐患。比如&#xff0c;因为这个分享的外链会被用户无限制点开查看&#xff0…