树莓派驱动之spi回环测试

开启spi

sudo raspi-config

选择Interfacing options,选择spi打开
在这里插入图片描述

lsmod

可以看到spi_bcm2835
在这里插入图片描述

短接MISO和MOSI

编写回环代码spitest.c

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>#include <linux/types.h>
#include <linux/spi/spidev.h>/* dac_test /dev/spidevB.D <val> */int main(int argc, char **argv)
{int fd;unsigned int val;struct spi_ioc_transfer        xfer[1];unsigned char tx_buf[2];unsigned char rx_buf[2];int        status;unsigned long speed = 50000; // SPI速度unsigned long spimode = SPI_MODE_0;if(argc != 4) {printf("Usage: %s /dev/spidevB.D <val>\n", argv[0]);return 0;}fd = open(argv[1], O_RDWR);if (fd < 0) {printf("can not open %s\n", argv[1]);return 1;}// 设置SPI模式if (ioctl(fd, SPI_IOC_WR_MODE, &spimode) < 0) {perror("设置SPI模式失败");return 1;}// 设置SPI速度if (ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed) < 0) {perror("设置SPI速度失败");return 1;}tx_buf[0] = (unsigned long)strtoul(argv[2],NULL,0);tx_buf[1] = strtoul(argv[3],NULL,0);memset(xfer, 0, sizeof xfer);xfer[0].len = 2;xfer[0].tx_buf = (unsigned long) tx_buf;xfer[0].rx_buf = (unsigned long) rx_buf;status = ioctl(fd, SPI_IOC_MESSAGE(1), xfer);//告诉内核我们要发送1个SPI消息。这部分中的1表示我们要发送的消息数量。if (status < 0) {printf("SPI_IOC_MESSAGE\n");return -1;}/* print result */printf("recived0 %X\n",rx_buf[0]);printf("recived1 %X\n",rx_buf[1]);return 0;
}

版本2

#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/spi/spidev.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <getopt.h>#define SPI_DEVICE "/dev/spidev0.0" // SPI设备路径int main(int argc, char *argv[]) {int spi_fd;unsigned char txData[2] = {0x00, 0x00}; // 要发送的两个字节数据unsigned char rxData[2] = {0x00, 0x00}; // 接收的两个字节数据struct spi_ioc_transfer spi;unsigned long speed = 50000; // SPI速度unsigned long spimode = SPI_MODE_0;int opt;while ((opt = getopt(argc, argv, "a:b:")) != -1) {switch (opt) {case 'a':txData[0] = (unsigned long)strtoul(optarg, NULL, 0);break;case 'b':txData[1] = (unsigned long)strtoul(optarg, NULL, 0);break;default:fprintf(stderr, "Usage: %s -a <byte1> -b <byte2>\n", argv[0]);exit(EXIT_FAILURE);}}// 打开SPI设备if ((spi_fd = open(SPI_DEVICE, O_RDWR)) < 0) {perror("打开SPI设备失败");return 1;}// 设置SPI模式if (ioctl(spi_fd, SPI_IOC_WR_MODE, &spimode) < 0) {perror("设置SPI模式失败");return 1;}// 设置SPI速度if (ioctl(spi_fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed) < 0) {perror("设置SPI速度失败");return 1;}memset(&spi, 0, sizeof(spi));spi.tx_buf = (unsigned long)txData;spi.rx_buf = (unsigned long)rxData;spi.len = 2; // 设置传输长度为2字节spi.speed_hz = speed;spi.bits_per_word = 8;// 发送并接收数据if (ioctl(spi_fd, SPI_IOC_MESSAGE(1), &spi) < 0) {perror("SPI发送接收失败");} else {printf("Received: 0x%X 0x%X\n", rxData[0], rxData[1]);}close(spi_fd);return 0;
}

在这里插入图片描述

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

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

相关文章

【Python机器学习】NLP信息提取——命名实体与关系

我们希望计算机能够从文本中提取信息和事实&#xff0c;从而略微理解用户所说的内容。例如&#xff0c;当用户说“提醒我星期一浏览***.org网站”&#xff0c;我们希望这句话触发当天后下一个周一的日程或者提醒的操作。 要触发上述操作&#xff0c;需要知道“我”代表一种特定…

【devops】devops-gitlab之部署与日常使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

新任项目经理,如何快速接手项目

新任项目经理踏上管理岗位&#xff0c;面临着前所未有的挑战与机遇。如何快速适应角色&#xff0c;有效管理团队&#xff0c;确保项目顺利推进&#xff0c;是每一位新任项目经理必须面对的。 一、深入了解项目与团队 1、项目定位与规划 新任项目经理应对项目进行全面的调研与…

初识zookeeper

Zookeeper介绍 Zookeeper是Apache Hadoop项目下的一个子项目&#xff0c;是一个树形目录服务。 Zookeeper是一个分布式的、开源的分布式应用程序的协调服务。 Zookeeper提供的主要功能包括&#xff1a; 配置管理分布式锁集群管理 Zookeeper数据模型 Zookeeper客户端常用命…

windows使用tcpdump.exe工具进行抓包教程

windows主机安装一些抓包工具可能有些不方便&#xff0c;这里有一个tcpdump.exe工具直接免安装&#xff0c;可以直接使用进行抓包。&#xff08;工具下载见 附件&#xff09; tcpdump.exe使用教程 如下&#xff1a; 1&#xff1a;tcpdump -D 可查看网络适配器(注意前面的编号)…

分治算法专题(一)——快速排序之【三路划分】

目录 1、分治算法简介 2、算法应用【leetcode】 2.1 题一&#xff1a;颜色分类 2.1.1 算法原理 2.2.1 算法代码 2.2 题二&#xff1a;排序数组——数组分三块原理 2.2.1 算法原理 2.2.2 算法代码 2.3 题三&#xff1a;数组中的第K个最大元素 2.3.1 算法原理 2.3.2 算…

各大平台统遭入侵??区块链市场遭攻击损失近3亿!

今年&#xff0c;全球发生多起骇人听闻的勒索入侵软件攻击事件&#xff0c;黑客组织利用各种手段和技术&#xff0c;不断试图突破网络安全防线&#xff0c;窃取敏感信息、破坏系统运行&#xff0c;甚至进行勒索和敲诈&#xff0c;使得网络安全问题日益凸显其重要性和紧迫性。 S…

Mysql分组取最新一条记录

文章目录 Mysql分组取最新一条记录1. 数据准备1. 方法1&#xff1a;使用子查询获取每个组的最大时间戳&#xff0c;然后再次查询获取具体记录&#xff08;如果时间戳是唯一的&#xff09;2. 方法2&#xff1a;使用窗口函数&#xff08;MySQL 8.0&#xff09;3. 方法3&#xff1…

TikTok跨境电商营销新策略:品牌联盟与影响力经济的结合

随着TikTok成为全球化的社交和电商平台&#xff0c;也给跨境卖家提供了新的商机。境电商通过与其他知名品牌、网红或KOC建立品牌联盟&#xff0c;能够有效实现资源共享、优势互补&#xff0c;并推动市场扩张&#xff0c;带来更大的商业价值和品牌影响力。本文Nox聚星将和大家探…

鸿蒙开发协调布局CollapsibleLayout

鸿蒙开发协调布局CollapsibleLayout 首先鸿蒙我暂时没找到官方提供的协调布局&#xff0c;所以得自己自定义。 一、思路 可滚动头部、粘性头部、可滚动内容布局 可折叠区域高度可滚动头部高度-粘性头部高度 二、效果图 鸿蒙开发协调布局CollapsibleLayout 三、关键代码 //…

优思学院|如何从零开始自己学习六西格玛?

优思学院为学习六西格玛管理的学员&#xff0c;精心推荐了几本由浅入深、系统全面的书籍&#xff0c;帮助大家从入门到精通&#xff0c;逐步掌握六西格玛这一强大的管理工具。无论你是刚接触六西格玛的初学者&#xff0c;还是想在专业领域提升的高级学员&#xff0c;这几本书都…

【ARM】Trustzone和安全架构

Trustzone的基本概念&背景和历史 什么是Trustzone&#xff1f; 什么是TEE&#xff1f; Trustzone是一个技术&#xff0c;是一个技术的设计&#xff0c;一个安全架构&#xff0c;既不是软件也不是硬件。 TEE (Trusted Execution Environment) 可信执行环境。就是依托Trust…

速响低代码平台:升级营销管理系统,开启高效无忧新体验!

当前日新月异的商业环境&#xff0c;企业面临着前所未有的挑战与机遇。随着市场竞争的日益加剧和企业业务的不断拓展&#xff0c;传统的营销方式和管理手段逐渐显露出其局限性&#xff0c;难以适应快速变化的市场需求。 数据收集难&#xff1a;传统的营销管理缺乏对客户数据的收…

战神诸神黄昏9月19日登录PC端! 手机怎么玩战神诸神黄昏

9月19日&#xff0c;《战神&#xff1a;诸神黄昏》正式登录PC端&#xff0c;这是一部动作冒险游戏。要是你想随时随地在手机或平板上也能玩《战神&#xff1a;诸神黄昏》&#xff0c;可以使用网易GameViewer远程帮你实现。 网易GameViewer远程作为一款专为游戏玩家打造的远程软…

轻松让U盘数据恢复的教程:一步步指导,快速找回丢失文件

在日常使用U盘的过程中&#xff0c;我们可能会不小心删除或格式化了一些重要文件&#xff0c;导致数据丢失。面对这种情况&#xff0c;很多人可能会感到焦虑和无助。但其实&#xff0c;只要掌握了正确的方法&#xff0c;U盘数据的恢复并不复杂。本文将为大家提供一份详细的教程…

LIN总线CAPL函数——校验和段(Checksum)测试(linGetChecksum)

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

57.【C语言】字符函数和字符串函数(strerror函数)

11.strerror函数 *简单使用 strerror string error cpuscplus的介绍 点我跳转 翻译: 函数 strerror char * strerror ( int errnum ); 得到指向错误信息字符串(简称错误码)的指针 解释errnum的值,产生一条描述错误情况的信息的字符串,就像被库函数设置为errno一样 这个返回的…

【新手上路】衡石分析平台使用手册-系统管理员手册

用户管理​ 用户管理页面可以创建管理用户、对用户进行分组管理、组织架构管理及用户属性的维护和管理。下面详细介绍用户管理相关功能。 用户管理​ 用户管理子页面展示了当前系统中所有用户的信息&#xff0c;可以添加新用户&#xff0c;查看、编辑已有用户&#xff0c;可…

解锁社交业务增长与合规“秘笈”,泛娱乐行业沙龙杭州站亮点一览!

在全球数字化浪潮的推动下&#xff0c;泛娱乐行业正迎来广阔的发展空间&#xff0c;与此同时&#xff0c;社交产品监管日益规范&#xff0c;海外市场机遇与挑战并存&#xff0c;游戏行业增速放缓等情况也不容忽视。如何在合规前提下&#xff0c;探求新的增长点成为从业者共同关…

CAN_FD和CAN2.0的不同点——深入浅出理解CAN协议(二)

本系列是在同公司硬件设计和验证同事&#xff0c;1、在完成了CANFD硬件接口IP开发 2、熟悉ISO-11898系列、ISO16845、CAN2.0协议、CANFD协议等以及大量学习资料 3、深入研究其他家CANFD IP&#xff08;NXP、BOSCH&#xff09;4、独立开发了对应底层驱动 5、通过CANoe和周立功CA…