nrf51822 --- spi 通信

1.目的

nrf51822 spi通信

2.分析

在实际应用中经常要用到spi通信,比如度flash

3.平台:

协议栈版本:SDK10.0.0

编译软件:keil 5.12

硬件平台:微雪开发板nrf51822

例子:SDK 10.0.0\examples\ble_peripheral\ble_app_hrs\pca10028\s110\arm4

4.步骤

1.打开\SDK10.0\components\drivers_nrf\twi_master\deprecated目录

2.把nrf_drv_spi.c文件加入到工程里面。并设置路径

3.在main.c里面添加头文件

#include "nrf_drv_config.h" //20160419
#include "nrf_drv_spi.h"

在主函数里面初始化代码

          uint8_t Tx_Buf[6]={0x90,0x00,0x00,0x00,0xff,0xff},Rx_Buf[6];
	/*********************************************/
	 static const nrf_drv_spi_t m_spi_master_0 = NRF_DRV_SPI_INSTANCE(0);
	 nrf_drv_spi_config_t config = NRF_DRV_SPI_DEFAULT_CONFIG(0);
	 err_code = nrf_drv_spi_init(&m_spi_master_0, &config, NULL);    // NULL event handler = blocking mode
        if (err_code != NRF_SUCCESS)
        {
           return -1;
        }
	 #define SPI_CS_PIN  5
	 nrf_gpio_cfg_output(SPI_CS_PIN);
	 nrf_gpio_pin_clear(SPI_CS_PIN);
	 nrf_drv_spi_transfer(&m_spi_master_0,Tx_Buf,sizeof(Tx_Buf),Rx_Buf,sizeof(Rx_Buf));
	nrf_gpio_pin_set(SPI_CS_PIN);
nrf_drv_spi_config_t config = NRF_DRV_SPI_DEFAULT_CONFIG(0);  //定义如下面
/**
 * @brief SPI master instance default configuration.
 */
#define NRF_DRV_SPI_DEFAULT_CONFIG(id)                       {                                                                .sck_pin      = CONCAT_3(SPI, id, _CONFIG_SCK_PIN),      \  //配置SCK
    .mosi_pin     = CONCAT_3(SPI, id, _CONFIG_MOSI_PIN),     \  //配置MOSI
    .miso_pin     = CONCAT_3(SPI, id, _CONFIG_MISO_PIN),     \ //配置MISO
    .ss_pin       = NRF_DRV_SPI_PIN_NOT_USED,                \ //芯片使能脚 没有使用
    .irq_priority = CONCAT_3(SPI, id, _CONFIG_IRQ_PRIORITY), \ //SPI中断优先级
    .orc          = 0xFF,                                    \  //
    .frequency    = NRF_DRV_SPI_FREQ_1M,                     \ //spi时钟频率
    .mode         = NRF_DRV_SPI_MODE_0,                      \ //spi的模式 (相位 极性选择)
    .bit_order    = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST,         \ //传送哪位在前
}

在nrf_drv_config.h里面选择SCLK MOSI MISO 时钟选择

/* SPI */
#define SPI0_ENABLED 1  //必须开启这个选择SPI

#if (SPI0_ENABLED == 1)
#define SPI0_USE_EASY_DMA 0
//管脚选择
#define SPI0_CONFIG_SCK_PIN         3
#define SPI0_CONFIG_MOSI_PIN        4
#define SPI0_CONFIG_MISO_PIN        6
#define SPI0_CONFIG_IRQ_PRIORITY    APP_IRQ_PRIORITY_LOW

这里驱动的是W25X40 spi的flash,

0x90是芯片ID的寄存器(具体查看w25x40的datasheet)

仿真结果如下:

结果一样 所以 硬件spi调试成功。。

时间: 2024-10-07 03:07:07

nrf51822 --- spi 通信的相关文章

SPI通信

SPI是由Motorola公司提出的一种同步串行外围接口:它在速度要求不高,低功耗,需要保存少量参数的智能化传感系统中得到了广泛应用: SPI是一个全双工的同步串行接口,在数据传输过程中,总线上只能是一个主机和一个从机进行通信: 通信四种模式: 1.MISO(Master In Slave Out) 主机输入,从机输出: 2.MOSI(Master  Out  Slave In) 主机输出,从机输入: 3.SCK(Serial  Clock) 串行时钟信号 4.SS(Slave  Select)

SPI通信实验---verilog(FPGA作为从机,使用可读可写)

本实验讲究实用性,故设计思想为:主机先向从机发送地址,若是向从机写入数据,则向从机发送数据,若是读取从机数据,则向从机发送时钟,然后在时钟下降沿读取数据即可.cs信号上升沿作为SPI通信的结束信号.rom程序只是做测试使用. 每次发送16个时钟信号,前八个是地址和命令,后八个是数据.其中:前8个时钟接受的数据的最高位决定着这次通信是读取数据还是写入数据,最高位为1,则是读取数据,为0则是写入数据. 程序: /********************************Copyright***

ANT无线通信技术(5) ANT与MCU的SPI通信时序分析及相关程序设计

ANT与MCU可以使用异步UART或同步SPI两种方式连接.异步通信与同步通信的各自特点这里不赘述,总之我们选择使用同步方式进行连接. 一.SPI简介 SPI(Serial Peripheral Interface),串行外设接口.是摩托罗拉公司开发的一种同步全双工通信协议.依靠收发两端的移位寄存器,以及主机master提供的时钟信号,双方可以实现较高速率的同步全双工传输. 标准的SPI是3/4根线,分别用于一主一从/多主从的情况.4根线分别是: MOSI 主机发,从机收 master out

SPI 通信

信号组成 链接线 SPI通信过程 主从模式设置 相位和级性 传输格式 设置步骤 发送和接收过程 SPI 通信,布布扣,bubuko.com

[转]SPI通信原理简介

[转自]http://www.cnblogs.com/deng-tao/p/6004280.html 1.前言 SPI是串行外设接口(Serial Peripheral Interface)的缩写.是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线. 2. SPI特点 高速.同步.非差分.总线式.支持全双工通信 主从式通信 通信协议简单 可靠性有缺陷.没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据,可靠性上有一定的缺陷.

STM32 SPI 通信

SPI  是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口.是 Motorola首先在其 MC68HCXX 系列处理器上定义的. SPI 接口主要应用在  EEPROM, FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信

ARM与FPGA通过spi通信设计1.spi基础知识

SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息.SPI总线可直接与各个厂家生产的多种标准外围器件相连,包括FLASHRAM.网络控制器.LCD显示驱动器.A/D转换器和MCU等. SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps. 1.接

树莓派与arduino通过spi通信

逻辑电平转换 树莓派的逻辑电平为3.3v,Arduino为5v,需要进行逻辑转换,在某宝买了个逻辑转换器: HV接5V电源 LV接3.3V电源 GND接电源负极,两个电源公地 RXI输入5v TTL,将在RXO输出3.3v TTL TXI输入输出3.3V TTL  ,TXO输入输出5V TTL,  TXI与TXO双向互转 连线方式 树莓派的程序 1 /* 2 * SPI testing utility (using spidev driver) 3 * 4 * Copyright (c) 200

STM32与FPGA进行SPI通信

一.器件 32单片机:STM32F407ZG FPGA     :EP4CE6E22C8N 二.通信方式 STM32作为主机(软件); FPGA作为从机; SPI通信方式为0; 三.STM32源代码 1 #include "delay.h" 2 #include "stm32f4xx.h" 3 4 #ifndef __SPI_H 5 #define __SPI_H 6 7 #define SPI1_SCK PBout(2) 8 #define SPI1_MOSI P