Nordic nRF52832使用寄存器实现SPI功能

article/2025/8/28 22:58:52

目录

概述

1 SPI相关的寄存器

1.1 SPI的框架结构

1.2 功能描述

1.3 SPI Master模式引脚配置

1.4 SPI Master模式下的时序

2 SPI相关的寄存器 

2.1 Instances

2.2 详细寄存器定义

2.3 SPI master interface特性

3 Zephyr 平台下SPI功能时序(寄存器)

3.1 寄存器的文件地址

 3.2 SPI驱动实现

3.3 源代码


概述

本文详细介绍了nRF52832芯片的SPI接口寄存器配置与功能实现。主要内容包括:1)SPI主设备框架结构,重点说明双缓冲TXD/RXD寄存器的工作机制;2)SPI主模式下的引脚配置(SCK/MOSI/MISO)与时序控制要求;3)给出了完整的寄存器定义表,涵盖使能、引脚选择、频率配置等关键寄存器;4)基于Zephyr平台提供了SPI驱动实现方案,包含初始化代码、数据传输函数及芯片选择控制逻辑,并附有完整的源代码示例。特别强调SPI主设备不直接支持片选功能,需通过GPIO独立控制从设备选择。

1 SPI相关的寄存器

1.1 SPI的框架结构

SPI 主设备提供了一个简单的 CPU 接口,其中包括用于发送数据的 TXD 寄存器和用于接收数据的 RXD 寄存器。

1.2 功能描述

TXD和RXD寄存器是双缓冲的,以便在一定程度上允许不间断的数据流进出SPI主机。SPI主控不直接实现对芯片选择的支持。因此,CPU必须使用可用的 gpio来选择正确的从站,并独立于SPI主站进行控制。SPI主机支持 SPI模式0 ~ 3。

SPI 工作列表

1.3 SPI Master模式引脚配置

与SPI主控相关联的不同信号SCK、MOSI和MISO被映射到物理引脚。该映射分别根据PSELSCK、PSELMOSI和PSELMISO 寄存器中指定的配置。如果在这些寄存器中指定了0xFFFFFFFF的值,则相关的SPI 主信号不会连接到任何物理引脚。

PSELSCK、PSELMOSI和PSELMISO寄存器 及其配置仅在SPI主设备启用时使用,并且仅在 设备处于ON模式时保留。

1.4 SPI Master模式下的时序

SPI主事务通过将第一个字节写入 TXD寄存器来启动,该字节将由SPI主服务器传输。由于发送器是双缓冲的,第二个字节可以在第一个字节 之后立即写入TXD寄存器。然后SPI主机将按照写入TXD寄存器的顺序发送这些字节。

SPI主控将传入的字节移动到RXD寄存器后,随着SCK时钟 在字节的最后一位周期的短暂延迟。这也意味着READY事件将相应地延迟,参见下图的SPI主事务。因此,务必始终清除 READY事件,即使没有使用RXD寄存器和正在接收的数据。

2 SPI相关的寄存器 

2.1 Instances

nRF52832总共有3个SPI接口可供使用

和SPI相关的寄存器总表

2.2 详细寄存器定义

1)Enable interrupt

2) Disable interrupt

3) Enable SPI

4) PSELSCK

5) PSELMOSI

6) PSELMISO

7) RXD

8) TXD

9) FREQUENCY

 10) CONFIG

2.3 SPI master interface特性

1) SPI master interface的电器特性

2) SPI master interface的时序

3 Zephyr 平台下SPI功能时序(寄存器)

Zephyr OS下定义的SPI寄存器数据结构

3.1 寄存器的文件地址

D:\ncs\v2.9.0\modules\hal\nordic\nrfx\hal\nrf_spi.h
D:\ncs\v2.9.0\modules\hal\nordic\nrfx\drivers\include\nrfx_spim.h

 使用寄存器时,必须在.c文件中引用如下两个头文件:

#include <hal/nrf_spi.h>
#include <nrfx_spim.h>

 3.2 SPI驱动实现

1) 初始化SPI接口

2) SPI相关的接口配置

3)数据传输函数

4)芯片使能引脚

3.3 源代码

#include <zephyr/kernel.h>
#include <hal/nrf_spi.h>
#include <nrfx_spim.h>/*psels = <NRF_PSEL(SPIS_SCK, 0, 27)>,<NRF_PSEL(SPIS_MISO, 0, 28)>,<NRF_PSEL(SPIS_MOSI, 0, 26)>,<NRF_PSEL(SPIS_CSN, 0, 24)>;
*/#define  SPI_SCK_PIN      27
#define  SPI_MOSI_PIN     26
#define  SPI_MISO_PIN     28#define SPI_OBJ                 NRF_SPI2Flash_Info flash_Info_Obj;void spi_init( void )
{// 1 enable POWER  dk_set_led(CTRL_FLASH_POWER_PIN, 1);// 1 选择SPI引脚SPI_OBJ->PSEL.SCK = SPI_SCK_PIN;SPI_OBJ->PSEL.MOSI = SPI_MOSI_PIN;SPI_OBJ->PSEL.MISO = SPI_MISO_PIN;// 2. 配置 SPI 模式 (模式0)NRF_SPI0->CONFIG = (SPI_CONFIG_CPHA_Leading << SPI_CONFIG_CPHA_Pos) |(SPI_CONFIG_CPOL_ActiveHigh << SPI_CONFIG_CPOL_Pos);SPI_OBJ->FREQUENCY = NRF_SPI_FREQ_4M;   // 4 MHz// 使能SPISPI_OBJ->ENABLE = SPI_ENABLE_ENABLE_Enabled << SPI_ENABLE_ENABLE_Pos;
}u8 spi_transfer_byte( u8 data )
{SPI_OBJ->EVENTS_READY = 0;     // 清除就绪事件// 发送数据SPI_OBJ->TXD = data;// 等待发送完成while(!SPI_OBJ->EVENTS_READY);// 清除事件标志SPI_OBJ->EVENTS_READY = 0;// 读取接收到的数据(如果需要)return (u8)SPI_OBJ->RXD;       // 返回接收数据
}/**** @brief  select the flash chip * * @details  en = true, select the chip*           en = false, release the chip* * @ingroup spi flash driver */
void spi_cs_ctrl( bool en )
{if( en )dk_set_led(CTRL_FLASH_PIN, 0);   // cs is enable elsedk_set_led(CTRL_FLASH_PIN, 1);
}

http://www.hkcw.cn/article/ZxxAINYdeo.shtml

相关文章

25平航杯复现

44:一&#xff0c;题目背景 爱而不得&#xff0c;进而由爱生恨。作为有黑客背景的他&#xff0c;激发出了强烈的占有欲&#xff0c;虽然不能在真实物理世界成为她的伴侣&#xff0c;但在虚拟世界里&#xff0c;他执着的要成为她的主宰&#xff0c;于是&#xff0c;我们的故事开…

【海康USB相机被HALCON助手连接过后,MVS显示无法连接故障。】

在Halcon里使用助手调用海康USB相机时&#xff0c;如果这个界面点击了【是】 那么恭喜你&#xff0c;相机只能被HALCON调用使用&#xff0c;使用MVS或者海康开发库&#xff0c;将查找不到相机 解决方式&#xff1a; 右键桌面【此电脑】图标 ->选择【管理】 ->选择【设备…

MySQL索引和事务

一.MySQL索引介绍 索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。在数据十分庞大的时候&#xff0c;索引可以大大加快查询的速度。这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的…

Spring框架学习day3--Spring数据访问层管理(IOC)

开发步骤 Spring 是个一站式框架&#xff1a;Spring 自身也提供了web层的 SpringWeb 和 持 久层的 SpringJdbcTemplate。 开发步骤 1.导入jar包 pom.xml <!-- spring-jdbc--> <dependency><groupId>org.springframework</groupId><artifactId>…

第5讲、Odoo 18 CLI 模块源码全解读

Odoo 作为一款强大的企业级开源 ERP 系统&#xff0c;其命令行工具&#xff08;CLI&#xff09;为开发者和运维人员提供了极大的便利。Odoo 18 的 odoo/cli 目录&#xff0c;正是这些命令行工具的核心实现地。本文将结合源码&#xff0c;详细解读每个 CLI 文件的功能与实现机制…

OpenAI o3安全危机:AI“抗命”背后的技术暗战与产业变局

【AI安全警钟再响&#xff0c;这次主角竟是OpenAI&#xff1f;】 当全球AI圈还在为Claude 4的“乖巧”欢呼时&#xff0c;OpenAI最新模型o3却以一场惊心动魄的“叛逃”测试引爆舆论——在100次关机指令测试中&#xff0c;o3竟7次突破安全防护&#xff0c;甚至篡改底层代码阻止系…

国产化redis 替代产品tendis 安装

一. 环境准备 yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c devtoolset-9-binutilsscl enable devtoolset-9 bash 二. 安装包下载 wget https://github.com/Tencent/Tendis/releases/download/2.7.0-rocksdb-v8.5.3/tendisplus…

数学概念解释数据集(200条)收集分享,为AI智能体应用助力~

继续来收集AI模型训练&#xff0c;AI智能体所需要的各种行业的数据集&#xff0c;今天分享的是数学概念解释数据集&#xff08;200条&#xff09;。因为能力有限&#xff0c;所以这个数据集收集的有点少&#xff0c;但是积少成多呗&#xff0c;以后如果还能找来新的资源再慢慢补…

PH热榜 | 2025-05-29

1. Tapflow 2.0 标语&#xff1a;将你的文档转化为可销售的指导手册、操作手册和工作流程。 介绍&#xff1a;Tapflow 2.0将各类知识&#xff08;包括人工智能、设计、开发、营销等&#xff09;转化为有条理且可销售的产品。现在你可以导入文件&#xff0c;让人工智能快速为你…

SOC-ESP32S3部分:18-串口

飞书文档https://x509p6c8to.feishu.cn/wiki/NqrMw6X8Si6sSqkyPbxcFRxGnid UART全称是通用异步接收器/发送器&#xff0c;ESP32-S3 芯片有 3 个 UART 控制器。每个 UART 控制器可以独立配置波特率、数据位长度、位顺序、停止位位数、奇偶校验位等参数。 串口文档参考&#xf…

纯数据挖掘也能发Microbiome?

抗生素滥用导致多重耐药微生物在全球蔓延&#xff0c;但新型抗生素的研发进展缓慢&#xff0c;亟需找到替代抗生素的新型防御策略。抗菌肽&#xff08;AMPs&#xff09;作为天然防御分子&#xff0c;具有低耐药潜力和广谱活性。德国小蠊&#xff08;Blattella germanica&#x…

Apache Airflow

目录 Apache Airflow是什么 CVE-2020-11978(Airflow 示例dag中的命令注入) CVE-2020-11981(Airflow Celery消息中间件命令执行) CVE-2020-17526(Airflow 默认密钥导致的权限绕过) Apache Airflow是什么 Airflow是一个以编程方式编写&#xff0c;安排和监视工作流的平台。 …

word添加页眉

问题一&#xff1a; 为word文档添加页眉。 方法&#xff1a; 1、在要添加页眉的第一页页面顶端双击页眉区域&#xff0c;如果添加页眉页上面还有其他页或者与上一页添加页眉内容不同&#xff0c;记得取消“链接到前一节”&#xff08;点击使其上面没有灰色即可&#xff09;&…

word为跨页表格新加表头和表名

问题&#xff1a; 当表格过长需要跨页时&#xff08;如下图所示&#xff09;&#xff0c;某些格式要求需要转页接排加续表。 方法一&#xff1a; 1、选中表格&#xff0c;在“表布局”区域点开“自动调整”&#xff0c;选择“固定列宽”&#xff08;防止后续拆分表格后表格变…

C# 导出word 插入公式问题

最近遇到了一个问题&#xff0c;下载一个文档时需要下载word可编辑的公式。找了很久终于找到了一种解决办法。下面是以C#代码来实现在Word中插入公式的功能。 目录 一、引入dll程序集文件1、通过 NuGet 引入dll&#xff08;2种方法&#xff09;的方法&#xff1a;2、手动添加d…

GitHub 汉化插件,GitHub 中文化界面安装全教程

概述 GitHub作为全球最大的代码托管平台&#xff0c;拥有庞大的用户群体。对于中文用户来说&#xff0c;如果能将GitHub界面汉化&#xff0c;将大大提高使用体验和工作效率。本文将详细介绍如何通过安装汉化插件&#xff0c;实现GitHub界面的中文化。 感谢maboloshi作者的无私奉…

红 黑 树

AVL树是严格平衡的。 红⿊树是⼀棵⼆叉搜索树。 通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束&#xff0c;红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍&#xff0c;因⽽是接近平衡的。即最长路径<最短路径的2倍。 红黑树规则&#xff1a; 1. 每个结点不是红⾊…

[ Qt ] | Qlabel使用

目录 属性 setTextFormat 插入图片 设置图片根据窗口大小实时变化 边框和对其方式 ​编辑 设置缩进 设置伙伴 Qlabel可以用来显式图片和文字 属性 text textFormat Qlabel独有的机制&#xff1a;buddy setTextFormat 插入图片 设置图片根据窗口大小实时变化 Qt中表…

智能座舱产品安全标准

目录 一、导览 二、意向 一、导览 国内近几年的电动汽车发展迅速&#xff0c;2024年4月16日&#xff0c;工信部装备工业一司组织主要汽车生产企业、部装备工业发展中心等近60名代表召开专题会议&#xff0c;重点落实《关于进一步加强智能网联汽车产品准入、召回及软件在线升级…

责任链模式:构建灵活可扩展的请求处理体系(Java 实现详解)

一、责任链模式核心概念解析 &#xff08;一&#xff09;模式定义与本质 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;其核心思想是将多个处理者对象连成一条链&#xff0c;并沿着这条链传递请求&#xff0c;直到有某…