标签: spi

SPI头文件

我需要SPI头文件,所以我可以为两个PIC24FJ64GA002写一个SPI主机和从机.我有一个,但我不小心删除了它.请有人给我发送下载标题的链接.尽快,因为它是紧急的.

c embedded spi pic interfacing

1
推荐指数
1
解决办法
1307
查看次数

SD卡使用spi连接

嗨朋友,我想使用spi.i接口SD卡不知道这个主题,例如如何初始化,如何工作.请完全关于spi SD卡接口的帮助谢谢

spi

1
推荐指数
1
解决办法
1万
查看次数

SPI在STM32F103ZE中将数据读取为零

我正在使用STM32F103ZE我没有正确获取SPI数据.师父正确传播.但是,在发送非零值的情况下,始终读为零.

主配置:(MSP430)

The master configuration is correct. (I tested it.)
Master Mode, MSB First, 8-bit SPI, 
Inactive state is high, SS grounded, 1 MHz clock, no dividers

Slave Config(STM32F103ZE)

    Using SPI2.
    SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Rx
    SPI_InitStructure.SPI_Mode = SPI_Mode_Slave
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB
    SPI_InitStructure.SPI_CRCPolynomial = 7

任何人都有答案,

谢谢哈里

c embedded spi stm32

1
推荐指数
1
解决办法
8723
查看次数

如何从C中的串行(SPI)连接读取数据?

我正在尝试编写一个将安装在Linux MCU(Raspberry Pi)上的程序,该程序将读取从另一个MCU(我将自己构建的本地产品)的串行数据.

我已经研究过如何做到这一点,并认为我有"大局",但仍然缺少一些东西.首先,我需要启用内核模块并让自己访问设备:

sudo modprobe spi_bcm2708
sudo chown `id -u`.`id -g` /dev/spidev0.*
Run Code Online (Sandbox Code Playgroud)

从那里我可以使用这个着名的C文件来测试SPI连接.

所以现在连接就在那里,但我仍然需要从中读取串行数据.根据这个问题的答案,我只需要:

...打开相关端口进行读取,并用于read()获取数据.

然而,该答案中的代码片段似乎是通过设备驱动程序而不是通过SPI打开端口.

我的理解是,我可以使用SPI从所连接的MCU设备读取数据,而且我会不会需要写我自己的设备驱动程序为该设备.这是真的?如果是这样,我将如何从SPI连接中读取,以及该代码与上面链接的问题的答案中的代码有何不同?

如果我的理解不正确,并且我确实阅读了"通过"设备驱动程序,为什么我首先需要驱动程序?这不是SPI希望规避的吗?提前致谢.

c serial-port spi linux-device-driver

1
推荐指数
1
解决办法
2万
查看次数

是否可以使用 GPIO 引脚进行 SPI 操作?

我想使用 GPIO 引脚执行 SPI 协议操作,想配置为单从操作,我必须以这种方式进行配置,我使用 STM32F100RB 微控制器和 Coocox IDE 在 windowsxp 中执行此操作。

如果任何机构有关于使用 GPIO 引脚的 SPI 协议操作配置的示例源代码,请发送给我。它对我的项目非常有帮助,提前致谢。

问候,帕万尼奥。

embedded spi gpio stm32f4discovery coocox

1
推荐指数
1
解决办法
4032
查看次数

Bit Bang with SPI (fwirte, write performance)

我有一个有点爆炸的代码,它允许我通过 SPI 线发送大约 4 兆的数据。它的嵌入式代码用于使用 Linux 内核的自定义硬件。

问题是这需要很长时间才能完成(4 小时),这很可能是因为内核正在做更多的事情。基本上我的代码是这样的(aprox):

unsigned char data=0xFF;

BB_SPI_Init();
SPI_start();//activates chipselect(enable)

for(i=0;i<8;i++){
    if(data & 0x80){
        gpio_set_value(SPI_MOSI,1);
    }else{
        gpio_set_value(SPI_MOSI,0);
    }
    //send pulse clock
    gpio_set_value(SPI_CLK,0);
    gpio_set_value(SPI_CLK,1);
    data<<=1;
}
SPI_stop();//deactivates chipselect(disable)
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的问题,但我注意到如果我使用 write 将数据发送到 linux gpio 处理程序/sys/class/gpio/gpioXX/value(其中 XX 是任何 gpio 编号),则需要 4 小时。但是,如果我fwrite()用于发送到同一台设备,则需要 3 个小时。但是,如果您write()仅用于启用(SPI_stop()和 SPI_ start())并fwrite()用于发送到 MISO、CLK,它只需要 1 小时 30 分钟。

那么,以此为基础,有人可以向我解释这是怎么发生的吗?我的想象说这是处理线程的方式,并且在每个软件周期中它解析 2 个线程(fwrite()write()),如果只是使用的函数之一,但现在我仍在调查,有人可以让我知道任何类型的信息? 有没有更好的方法来处理这个问题?

仅供参考 无法使用内核驱动程序 spi,因为硬件已连接到 gpios,使用 bit bang …

linux spi linux-kernel embedded-linux bitstream

1
推荐指数
1
解决办法
1986
查看次数

SPI协议流程

嘿,我在自己的项目中使用 ADS1292,我自己对 SPI 协议感到困惑。

我在互联网上找到了一些代码,我发现它同时发送和接收。

例如,我想发送 0xFF 到从设备。

然后它首先发送数据并等待接收。

并且在接收数据时,发送一个虚拟字节然后接收。

有人请解释一下他们为什么这样做吗?

uint8_t sEE_ReadByte(void)
{
  return (sEE_SendByte(sEE_DUMMY_BYTE));
}

uint8_t sEE_SendByte(uint8_t byte)
{
  /*!< Loop while DR register in not empty */
  while (SPI_I2S_GetFlagStatus(sEE_SPI, SPI_I2S_FLAG_TXE) == RESET);

  /*!< Send byte through the SPI peripheral */
  SPI_SendData(sEE_SPI, byte);

  /*!< Wait to receive a byte => I do not understand this point*/
  while (SPI_I2S_GetFlagStatus(sEE_SPI, SPI_I2S_FLAG_RXNE) == RESET);

  /*!< Return the byte read from the SPI bus */
  return (uint8_t)SPI_ReceiveData(sEE_SPI);
}
Run Code Online (Sandbox Code Playgroud)

spi stm32 dummy-data

1
推荐指数
1
解决办法
2296
查看次数

STM32F0 SPI 接收中断未触发

我有一个简单的项目,使用 CubeMX 创建用于外围设备初始化。

SPI 处于从机模式,并且似乎已正确初始化,但是当我对 8 位数据进行计时时,不会调用中断。

这是代码

/* SPI1 init function */
static void MX_SPI1_Init(void)
{

  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_SLAVE;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 7;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;

  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }

}

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(hspi->Instance==SPI1)
  {
  /* USER CODE BEGIN SPI1_MspInit 0 */

  /* …
Run Code Online (Sandbox Code Playgroud)

c microcontroller interrupt spi stm32

1
推荐指数
1
解决办法
4057
查看次数

SPI 和 QPI(嵌入式)有什么区别?

在我的项目中,我使用Winbond W25Q64 64-MB 串行闪存,当我阅读该串行闪存的数据表时,有两种类型:

SPI(W25Q64 闪存 ID:- 0xEF4017)和 QPI(W25Q64FV 闪存 ID:- 0xEF6017)。

我很了解SPI,但是我第一次听说QPI。所以我有一些问题-

1.SPI和QPI有什么区别?

2.我可以使用QPI通信类型的Flash(使用SPI)吗?

3.QPI的主要特点是什么?QPI(通信协议还是其他协议)是什么?

microcontroller spi microchip nxp-microcontroller

1
推荐指数
1
解决办法
8956
查看次数

STM32 SPI与HAL通信

我刚刚开始对 STM32 进行编程,并使用 CubeMX 生成了一个代码,用于与陀螺仪 (L3GD20) 进行 SPI 通信。我对 HAL_SPI 命令有疑问。

我首先尝试读取WHO_AM_I返回良好响应(0xD4)的寄存器,然后我尝试对寄存器执行相同的操作CTRL_REG1,返回(0x07)仍然很好。

但是,如果我尝试一个接一个地获取它们,则会HAL_SPI_Receive不断发送第一个代码的数据HAL_SPI_Transmit...尝试为其提供其他缓冲区,但仍然不起作用。

这是我感兴趣的代码部分:

    uint8_t txData[8],rxData[8];    //Buffers for the first read.
    uint8_t rBuffer[8];             //Buffer for the second read.
/*...............................................................
 *...............................................................
 *...............................................................
*/...............................................................
  txData[0] = ADDR_WHO_AM_I | 0x80; 
  HAL_SPI_Transmit(&hspi2, txData, 1, HAL_MAX_DELAY);
  HAL_SPI_Receive(&hspi2, rxData, 1, HAL_MAX_DELAY);   //Returns the right value
  HAL_Delay(1000);

  txData[0] = ADDR_CTRL_REG1 | 0x80;
  HAL_Delay(500);
  
  HAL_SPI_Transmit(&hspi2, txData, 1, HAL_MAX_DELAY);
  HAL_SPI_Receive(&hspi2, rBuffer, 1, HAL_MAX_DELAY);  //Returns the same value...
  HAL_Delay(1000);
Run Code Online (Sandbox Code Playgroud)

PS:我还想了解更多有关HAL_SPI_TransmitReceive如果可能的话,我应该如何使用它来执行相同的任务?(从不同的寄存器读取 …

embedded hal spi stm32 stm32f4discovery

1
推荐指数
1
解决办法
2万
查看次数

Arduino - 一次管理两个SPI设备

我试图使用相同的MISO,MOSI和CLOCK引脚同时控制两个SPI器件,但不同的SS引脚.

一个是来自SparkFunWifly 屏蔽,它使用SPI-to-UART芯片,另一个是MAX31855.

他们独立工作,但不是一起工作..

我正在使用的SPI-to-UART代码如下所示.我所做的唯一更改是在头文件中; 我设定select()deselect()公开.

#include "SpiUart.h"

// See section 8.10 of the datasheet for definitions
// of bits in the Enhanced Features Register (EFR)
#define EFR_ENABLE_CTS 1 << 7
#define EFR_ENABLE_RTS 1 << 6
#define EFR_ENABLE_ENHANCED_FUNCTIONS 1 << 4

// See section 8.4 of the datasheet for definitions
// of bits in the Line Control Register (LCR)
#define LCR_ENABLE_DIVISOR_LATCH 1 << 7

// The original crystal …
Run Code Online (Sandbox Code Playgroud)

microcontroller arduino spi

0
推荐指数
1
解决办法
8858
查看次数

在Raspberry Pi上包含bcm2853 lib

我想在我的Raspberry上使用C#开始SPI通信。bcm2835库支持所需的命令,例如:

  • bcm2835_spi_begin()
  • bcm2835_spi_end()
  • 等等

在C中,您必须执行,#include < bcm2835.h >但在C#using bcm2835;中不起作用。

RaspberryPiDotNet已安装,并且bcm2835库也已安装。

可以通过GPIOMem使用bcm2835库的命令来控制GPIO引脚。

C#如何使用bcm2835的SPI命令?网上的所有内容都适用于C或C ++。

c# dll spi raspberry-pi

0
推荐指数
1
解决办法
4837
查看次数

将包含字符的列表转换为字符串(Python)

我试图通过Raspberry Pi上的SPI端口读取刺痛.这是我测试端口的代码:

raw = 0
string = ""

SPI = spidev.SpiDev()
SPI.open(0,0)

while True:
    raw = SPI.xfer2([0])
    string += str(chr(raw))
    print string
    print raw
    time.sleep(0.2)
Run Code Online (Sandbox Code Playgroud)

结果是"Hell insert gibberish ",所以它在第四个字符后失败了.我尝试发送"Hello World!" 我发送的数据被格式化为列表中的字符,例如"Hello"看起来像[72,101,108,108,111].如何将其转换为字符串?

答案很有用,因为我不知道如何转换数据.然而真正的问题是我正在与之接口的设备.答案对于找到真正的问题非常有用,非常感谢!我仍然是python的新手,所以这些东西都有点麻烦.

python string list spi

0
推荐指数
1
解决办法
239
查看次数