HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-SPI

news2024/11/24 11:13:44

在这里插入图片描述

目录

  • 一、 SPI 概述
  • 二、SPI 模块相关API
  • 三、接口调用实例
  • 四、SPI HDF驱动开发
    • 4.1、开发步骤(待续...)
  • 坚持就有收获

一、 SPI 概述

SPI 是串行外设接口(Serial Peripheral Interface)是一种高速的全双工同步的通信总线。

SPI 是由 Motorola 公司开发,用于在主设备和从设备之间进行通信,常用于与闪存、实时时钟、传感器以及模数转换器等进行通信。

SPI 通信通常由主设备发起,通过以下步骤完成一次通信:

  • 通过 CS 选中要通信的从设备,在任意时刻一个主设备上最多只能有一个从设备被选中。
  • 通过 SCLK 给选中的从设备提供时钟信号。
  • 基于 SCLK 时钟信号,主设备数据通过 MOSI 发送给从设备,同时通过 MISO 接收从设备发送的数据,完成通信。

从设备 A 和从设备 B 共享主设备的 SCLK、MISO 和 MOSI 三根引脚,从设备 A 的片选 CS0 连接主设备的 CS0,从设备 B 的片选 CS1 连接主设备的 CS1。

SPI 设备的连接示意图如下:

请添加图片描述

SPI 以主从方式工作,通常有一个主设备和一个或者多个从设备。主设备和从设备之间一般用4 根线相连,它们分别是:

  • SCLK – 时钟信号,由主设备产生;
  • MOSI – 主设备数据输出,从设备数据输入;
  • MISO – 主设备数据输入,从设备数据输出;
  • CS – 片选,从设备使能信号,由主设备控制。

数据的采集时机是时钟信号的边沿(上升沿或下降沿),根据 SCLK 时钟信号的 CPOL(Clock Polarity,时钟极性)和 CPHA(Clock Phase,时钟相位)的不同组合,SPI 有以下四种工作模式:

  • CPOL=0,CPHA=0 时钟信号 idle 状态为低电平,第一个时钟边沿采样数据。
  • CPOL=0,CPHA=1 时钟信号 idle 状态为低电平,第二个时钟边沿采样数据。
  • CPOL=1,CPHA=0 时钟信号 idle 状态为高电平,第一个时钟边沿采样数据。
  • CPOL=1,CPHA=1 时钟信号 idle 状态为高电平,第二个时钟边沿采样数据。

请添加图片描述

如下图所示:

SPI 操作流程如下:

请添加图片描述

二、SPI 模块相关API

头文件路径:base/iothardware/peripheral/interfaces/inner_api/iot_spi.h

接口函数描述
hi_u32 hi_spi_init(hi_spi_idx spi_id, hi_spi_cfg_init_param init_param, const hi_spi_cfg_basic_info *param);初始化SPI
hi_u32 hi_spi_slave_write(hi_spi_idx spi_id, hi_pvoid write_data, hi_u32 byte_len, hi_u32 time_out_ms);SPI从写操作
hi_u32 hi_spi_host_write(hi_spi_idx spi_id, hi_pvoid write_data, hi_u32 byte_len);SPI主写操作
hi_u32 hi_spi_host_writeread(hi_spi_idx spi_id, hi_pvoid write_data, hi_pvoid read_data, hi_u32 byte_len);SPI主读写操作

三、接口调用实例

//代码功能:定义了 SPI 接口功能以及 SPI 相关参数,GPIO_00 号口作为 SPI1_CLK 模式。

IotSpiCfgBasicInfo BasicInfo;
BasicInfo.cpol = HI_SPI_CFG_CLOCK_CPOL_1; //通信极性
BasicInfo.cpha = HI_SPI_CFG_CLOCK_CPHA_1; //通信相位
BasicInfo.framMode = HI_SPI_CFG_FRAM_MODE_MOTOROLA; //MOTOROLA 协议
BasicInfo.dataWidth = HI _SPI_CFG_DATA_WIDTH_E_8BIT; //位宽为 8bit
BasicInfo.endian = HI_SPI_CFG_ENDIAN_LITTLE; //小端传输
BasicInfo.pad =31; //主发模式
BasicInfo.freq= 40000000; //通信频率
IotSpiCfgInitParam InitParam;
ret=IoTSpiInit(0,InitParam, &BasicInfo);

四、SPI HDF驱动开发

在HDF框架中,SPI的接口适配模式采用独立服务模式(如图1所示),在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,若设备过多可能增加内存占用。

独立服务模式下,核心层不会统一发布一个服务供上层使用,因此这种模式下驱动要为每个控制器发布一个服务,具体表现为:

  • 驱动适配者需要实现HdfDriverEntry的Bind钩子函数以绑定服务。
  • device_info.hcs文件中deviceNode的policy字段为1或2,不能为0。

图 1 SPI独立服务模式结构图

请添加图片描述

4.1、开发步骤(待续…)

SPI模块适配包含以下四个步骤:

  • 实例化驱动入口

    • 实例化HdfDriverEntry结构体成员。
    • 调用HDF_INIT将HdfDriverEntry实例化对象注册到HDF框架中。
  • 配置属性文件

    • 在device_info.hcs文件中添加deviceNode描述。
    • 【可选】添加spi_config.hcs器件属性文件。
  • 实例化SPI控制器对象

    • 初始化SpiCntlr成员。
    • 实例化SpiCntlr成员SpiCntlrMethod。
  • 说明:

    • 实例化SpiCntlr成员SpiCntlrMethod,其定义和成员说明见接口说明。
  • 驱动调试

    • 【可选】针对新增驱动程序,建议验证驱动基本功能,例如SPI控制状态,中断响应情况等。

坚持就有收获

在这里插入图片描述

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

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

相关文章

VUE3 中导入Visio 图形

微软的Visio是一个功能强大的图形设计工具,它能够绘制流程图,P&ID,UML 类图等工程设计中常用的图形。它要比其它图形设计软件要简单许多。以后我的博文中将更多地使用VISO 来绘制图形。之前我一直使用的是corelDraw。 Visio 已经在工程设…

新增长100人研讨会:快消零售专场探讨招商加盟数字化转型实战

2024年2月2日下午,一场由纷享销客与杨国福集团联合主办的招商加盟数字化转型研讨会在上海成功举办。本次研讨会汇聚了众多快消零售业界的领军人物,共同探讨行业未来的新增长点。 会议伊始,杨国福集团数字化中心负责人王林林发表了主题演讲&a…

php伪协议之phar

一.phar协议 用于将多个 PHP 文件、类、库、资源(如图像、样式表)等打包成一个单独的文件。这个归档文件可以像其他 PHP 文件一样被包含(include)或执行。PHAR 归档提供了一种方便的方式来分发和安装 PHP 应用程序和库&#xff0c…

【unity实战】使用unity制作一个类似Rust的3D生存建造建筑系统(附项目源码)

配置连接点 材质 连接器控制 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Connector : MonoBehaviour {[Header("连接器位置")]public ConnectorPosition connectorPosition;[Header("连接器所属建筑类型&qu…

以太坊 Dencun 升级与潜在机会

撰文:Biteye 核心贡献者 Fishery Isla 文章来源Techub News专栏作者,搜Tehub News下载查看更多Web3资讯。 以太坊网络升级 Dencun 测试网版本在 2024 年 1 月 17 日上线了 Goerli 测试网,1 月 30 日成功上线了 Sepolia 测试网,D…

RocketMQ—RocketMQ消息重复消费问题

RocketMQ—RocketMQ消息重复消费问题 重复消费问题的描述 什么情况下会发生重复消费的问题: 生产者多次投递消息:如果生产者发送消息时,连接有延迟,MQ还没收到消息,生产者又发送了一次消息; 消费者方扩容…

两步为软件设置开机自启动(Windows)

两步为软件设置开机自启动(Windows) 有些软件本身没有开机自启动的设置,以下是两种解决的方式,在这里主要介绍第二种(更简单更推荐) 第一种方法: 使用任务计划程序 第二种方法: …

gRPC 备查

简介 HTTP/2 HTTP/2 的三个概念 架构 使用流程 gRPC 的接口类型 1.单一RPC 2.服务器流式RPC 3.客户端式流式RPC 4.双向流式RPC

vue3-动画技巧

Vue 提供了 <Transition> 和 <TransitionGroup> 组件来处理元素进入、离开和列表顺序变化的过渡效果。但除此之外&#xff0c;还有许多其他制作网页动画的方式在 Vue 应用中也适用。这里我们会探讨一些额外的技巧。 基于 CSS class 的动画 对于那些不是正在进入或…

kali虚拟机桥接模式快速设置

第一步&#xff1a;配置 IP、掩码、网关 vim /etc/network/interfaces第二步&#xff1a;配置 DNS&#xff1a; vi /etc/resolv.conf第三步&#xff1a;重启网卡 service networking restart如果还不行建议重启一下虚拟机

c# #if 与 Conditional属性宏的区别

测试代码 using System; using System.Diagnostics;namespace ConsoleApp1 {public class TestClass{[Conditional("Debug1")]public static void Func1(){Console.WriteLine("Conditional 宏");}public static void Func2(){ #if Debug2Console.WriteLin…

Rabbitmq入门与应用(六)-rabbitmq的消息确认机制

rabbitmq的消息确认机制 确认消息是否发送给交换机 配置 server:port: 11111 spring:rabbitmq:port: 5672host: 192.168.201.81username: adminpassword: 123publisher-confirm-type: correlated编码RabbitTemplate.ConfirmCallback ConfirmCallback 是一个回调接口&#xf…

Leetcode3011. 判断一个数组是否可以变为有序

Every day a Leetcode 题目来源&#xff1a;3011. 判断一个数组是否可以变为有序 解法1&#xff1a;分组循环 排序 适用场景&#xff1a;按照题目要求&#xff0c;数组会被分割成若干组&#xff0c;每一组的判断/处理逻辑是相同的。 核心思想&#xff1a; 外层循环负责遍…

2024年TIOBE编程语言排行榜

1. 2024年TIOBE编程语言排行榜&#xff0c;我为C打Call&#xff0c;你呢&#xff1f; https://www.tiobe.com/tiobe-index/

大模型量化技术原理-LLM.int8()、GPTQ

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;从而导致模型变得越来越大&#xff0c;因此&#xff0c;我们需要一些大模型压缩技术来降低模型部署的成本&#xff0c;并提升模型的推理性能。 模型压缩主要分…

【Java中23种设计模式-单例模式2--懒汉式2线程安全】

加油&#xff0c;新时代打工人&#xff01; 简单粗暴&#xff0c;学习Java设计模式。 23种设计模式定义介绍 Java中23种设计模式-单例模式 Java中23种设计模式-单例模式2–懒汉式线程不安全 package mode;/*** author wenhao* date 2024/02/19 09:38* description 单例模式…

三防平板丨三防工业平板电脑丨三防平板电脑有哪些优势?

三防平板电脑通常使用特殊材料和制造工艺来达到防水、防尘、防摔的目的&#xff0c;这样可以在极端条件下使用&#xff0c;并保证设备的稳定性和可靠性。因此&#xff0c;三防平板电脑适用于各种恶劣环境&#xff0c;如户外野营、物流、工业制造等应用场景。那么相比于普通消费…

Python Selenium 爬虫淘宝案例

爬虫专栏&#xff1a;http://t.csdnimg.cn/WfCSx 前言 在前一章中&#xff0c;我们已经成功尝试分析 Ajax 来抓取相关数据&#xff0c;但是并不是所有页面都可以通过分析 Ajax 来完成抓取。比如&#xff0c;淘宝&#xff0c;它的整个页面数据确实也是通过 Ajax 获取的&#x…

Radware Alteon负载均衡-基于域名的七层负载均衡

Radware Alteon作为一款高性能的负载均衡器&#xff0c;其基于域名的七层负载均衡功能为众多企业提供了灵活、高效的解决方案。 该案例实现如下需求&#xff1a;客户端访问服务器&#xff0c;当访问域名为www.iisstart.com时&#xff0c;默认访问Server1&#xff0c;当配置七层…

数据结构-最短路径(Dijkstra算法与Floyd算法)

介绍 对于网图来说&#xff0c;最短路径是指两顶点之间经过的边上权值之和最少的路径&#xff0c;其路径上第一个点记为源点&#xff0c;最后一个为终点。 计算最短路径有两个经典算法&#xff0c;即迪杰斯特拉&#xff08;Dijkstra&#xff09;算法与弗洛伊德&#xff08;Fl…