标签: spi

USB转SPI转换器

我有一个使用SPI进行通信的芯片,并希望将其直接连接到我的计算机上的USB端口.有没有人有使用USB转SPI转换器的经验?有什么建议?网上快速搜索显示

http://www.robotshop.com/devantec-usb-i2c-spi-serial-interface.html

http://www.sparkfun.com/products/9235

usb spi

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

raspberry pi没有/etc/modprobe.d/raspi-blacklist.conf

我买了一个PiFace,我想按照这个指南,但我没有raspi-blacklist.conf.

到目前为止我的步骤是:

  1. 我按照指南安装了我的rpi .
  2. 我已经执行了 sudo rpi-update
  3. 我试图找到 raspi-blacklist.conf

有人对我有一些见解吗?

spi raspberry-pi raspbian

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

在SPI通信中使用CPOL/CPHA设置

有没有人能给我一些实际的例子,其中SPI通信中的4种CPOL/CPHA配置模式是有用的吗?我理解他们是如何工作但却不知道何时使用它们.由于非标准的实现,我很快就读了一些关于兼容性的参考,这是怎么回事?

谢谢

embedded microcontroller spi serial-communication

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

从带有wiringPI2的Arduino slave读取Raspberry PI SPI?

我已经在NOOBS Raspbian PI发行版上安装了wiringpi2wiringpi2 python包装器.Adafruit 4通道逻辑电平转换器将PI保持在5v以下,并且在PI端向Arduino发送数据就像这样简单:

import wiringpi2
wiringpi2.wiringPiSPISetup(1,5000)
wiringpi2.wiringPiSPIDataRW(1,'HELLO WORLD\n')
Run Code Online (Sandbox Code Playgroud)

和相应的Arduino代码[3].

编辑:道歉 - 从这一点开始,我不能发布任何我仔细添加的链接来显示我的工作,来源和示例代码.你必须谷歌它并感谢双链接规则.

所以,我知道布线工作.但这不是我真正想要的方式 - 我想读一个从Arduino到PI的引脚.

Arduino SPI参考指出:

该库允许您与SPI设备通信,Arduino作为主设备.

PI必须是主设备.我以为自己注定要失败,直到我读到Nick Gammon关于SPI的优秀网页,它展示了2个Arduinii互相交谈.

此外,SPI transfer()命令会建议您从Arduino写入.

我现在处于Google的前4个结果页面的所有链接显示为"跟随"的阶段 - 所以这不是因为缺少谷歌搜索!

理论上,如果我在PI端使用READ方法,这不应该工作吗?(注意:这只是众多尝试中的一种,而不是唯一的尝试!)

在Arduino上:

#include <SPI.h>
void setup (void)
{
  SPI.begin();
  pinMode(MISO, OUTPUT);

  // turn on SPI in slave mode
  SPCR |= _BV(SPE);
}

void loop  (void) {
byte data[] = {0x00, 0x00, 0x00, 0x00};  // this is 24 bits (8bits/byte * 4 bytes)
// Transfer 24 bits …
Run Code Online (Sandbox Code Playgroud)

arduino spi raspberry-pi raspbian

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

在ARM处理器上执行存储在外部SPI闪存中的程序

我有一个ARM处理器,能够与外部闪存芯片连接.写入芯片的是为ARM架构编译的程序,可以执行.我需要知道的是将外部闪存中的数据传输到ARM处理器上以便执行.

我可以提前运行某种复制例程,将数据复制到可执行存储空间吗?我想我可以,但ARM处理器正在运行一个操作系统,我没有足够的空间在闪存中使用.我还希望能够一次安排两个甚至三个程序的执行,并且一次将多个程序复制到内部闪存是不可行的.操作系统可以用于在可访问的内存空间内启动程序,因此任何需要事先完成的操作都可以.

c arm spi execution flash-memory

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

STM32F205未设置SPI RXNE标志

我在主模式下使用STM32F205的SPI1.并且在事务期间永远不会设置RXNE标志.这是SPI初始化的一部分:

SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_SSI | SPI_CR1_SSM | SPI_CR1_SPE;
SPI1->CR2 = 0;
Run Code Online (Sandbox Code Playgroud)

然后我试图执行传输/接收单个字节:

while(!(SPI1->SR & SPI_FLAG_TXE)) {}  // wait for compeltion of the previous Tx
SPI1->DR = 0xAB;                      // transmit some byte

while(!(SPI1->SR & SPI_FLAG_RXNE)) {}  // wait for byte to be received
uint8_t result = SPI1->DR;
Run Code Online (Sandbox Code Playgroud)

这段代码停留在等待RXNE标志.我试着等待繁忙的旗帜BSY = 0而不是RXNE = 1SPI开始工作.似乎RXNE从未设置过.

spi stm32

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

STM32F1 - 在裸机上使用主SPI

我一直试图移植一些我的AVR代码来驱动一个简单的SPI LCD到ARM作为一个学习练习(我对ARM一般都很新).为此,我只需要在主模式下使用SPI.

我查看了器件的数据表(STM32F103C8),发现我需要的SPI1引脚,SCK和MOSI分别映射为PA5和PA7的替代功能,以及其他外设(第29页).我的理解是,为了在这些引脚上使用SPI功能,我需要确保禁止映射到同一引脚的任何其他内容.但是,在查看外设时钟控制寄存器的默认值时,看起来其他功能已被禁用.

我查看了参考手册中的SPI部分,包括第25.3.3- 在主模式下配置SPI.首先,我在APB2ENR中启用SPI1主时钟,然后按照本节中的步骤将SPI1配置为我的需要.我还更改了PA5/7的设置,将其模式设置为"Alternate Function Output push-pull"(9.1.4).最后,我通过设置CR1_SPE来启用SPI1.

从我的阅读中,我曾想过,如上所述配置SPI后,通过将值加载到SPI1数据寄存器中,数据将被移出.但是,写入数据后,SPI状态寄存器中的TXE标志永远不会置位,表示我写入的数据只是坐在那里.

在这一点上,我假设还有一些我无法正确配置的东西.例如,我不能100%确定如何处理PA5/7引脚.我试图从数据表中了解我能做什么,但我没有得到任何结论.在它工作之前还有什么需要做的吗?

arm spi stm32

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

有效地交换半字

我想通过其I2S外设从STM32(Cortex M4)设备发送数据,使用24位模式的DMA,MSB优先.然而,I2S数据寄存器只有16位,根据数据表,您必须首先发送上半字,然后是下半字.这在使用DMA时会出现问题,它将始终首先发送下半字.

在c或ARM-assembler中切换两个半字的有效方法是什么?

c assembly arm spi stm32

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

实现 SPI 以扩展 Keycloak API - 找不到资源

我正在尝试在我的 Keycloak 服务器上创建一个自定义资源来扩展它的其余 API。所以我正在实施一个SPI。从你好世界开始。

目前我的目标是通过http://localhost:8080/auth/admin/realms/myRealm/hello上的 GET 获取“hello”+ 名称

我使用 Postman 请求服务器。我能够在 myRealm 上获得用户令牌。我选择了一个我View-usersrealm-managmentMapper 中为其分配了角色的用户。

所以内置的 Keycloak Admin API 可以工作。例如:http://localhost:8080/auth/admin/realms/myRealm/users/count 返回预期的用户数。

但问题是我在请求此端点时收到“错误”:“RESTEASY003210:找不到完整路径的资源:http://localhost:8080/auth/admin/realms/myRealm/hello/ ”。

这是我的设置(我阅读了几篇指南):

模块项目的 pom.xml 包含对 keycloak-core keycloak-server-spi keycloak-server-spi-private org.jboss.spec.javax.ws.rs

RealmResourceProvider 实现:

public class HelloWorldProvider implements RealmResourceProvider {

    private KeycloakSession session;

    public HelloWorldProvider(KeycloakSession session) {
        this.session = session;
    }

    @Override
    public Object getResource() {
        return this;
    }

    @GET
    @Path("/hello")
    @Produces("text/plain; charset=utf-8")
    public String get() {
        String name = session.getContext().getRealm().getDisplayName();
        if (name == …
Run Code Online (Sandbox Code Playgroud)

java api spi keycloak

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

如何擦除和覆盖 Spi EEPROM 中的数据

我使用WinBond W25Q64JV SPI Flash芯片来存储数据,微控制器是STM32F101RCT6。当我尝试将数据存储在华邦芯片中时,它工作正常,我可以在华邦芯片中读取和写入数据,但如果我想覆盖同一地址中的新数据,它不会被覆盖,并且会提供旧数据新数据未写入同一内​​存中。如果我使用擦除选项,则会擦除所有地址位置中的所有数据,我无法擦除特定地址数据。删除所有地址数据后,我可以写入新数据,但我正在丢失所有其他位置的数据,因此请指导我覆盖同一地址位置中的新数据/特定地址的擦除选项,我的代码如下

     HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_SET);
     HAL_Delay(1000);
     HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_RESET);
     Spi_data[0]=0x06;  //Write Enable
     HAL_SPI_Transmit(&hspi2,Spi_data,1,1000);
     HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_SET);
     HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_RESET); 
     Spi_data[0]=0x02; //Page Program
     Spi_data[1]=0x00;
     Spi_data[2]=0x10;
     Spi_data[3]=0x14;
     Spi_data[4]=0x43;
     HAL_SPI_Transmit(&hspi2,Spi_data,5,10000);
     HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_SET);

     HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_RESET);
     Spi_data[0]=0x03;//Read Data
     Spi_data[1]=0x00;
     Spi_data[2]=0x10;
     Spi_data[3]=0x14;
     HAL_SPI_Transmit(&hspi2,Spi_data,4,100);
     HAL_SPI_Receive(&hspi2,GSdata,4,100);
     HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_SET);
Run Code Online (Sandbox Code Playgroud)

当我尝试覆盖 0x1014 位置中的新数据时,如果我使用以下擦除选项,它不会被覆盖,它会擦除​​所有内存地址数据

   HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_RESET);
   Spi_data[0]=0x20;//Erase
   Spi_data[1]=0x00;
   Spi_data[2]=0x10;
   Spi_data[3]=0x14;
   HAL_SPI_Transmit(&hspi2,Spi_data,4,1000);
   HAL_GPIO_WritePin(CHIP_SELECT_GPIO_Port, CHIP_SELECT_Pin, GPIO_PIN_SET);
Run Code Online (Sandbox Code Playgroud)

请指导我覆盖同一地址中的新数据/特定地址的擦除选项

microcontroller spi stm32 flash-memory eeprom

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