标签: spi

Arduino Nano:是否支持 SPI?

可以使用 Arduino Nano 上的 SPI 硬件吗?

Nano 页面上,它说:

SPI:10 (SS)、11 (MOSI)、12 (MISO)、13 (SCK)。这些引脚支持 SPI 通信,虽然由底层硬件提供,但目前不包含在 Arduino 语言中。

然而,有一个SPI 库

请问有人能解释一下这个矛盾吗?我想,要么

  • nano 页面已过期
  • Nano SPI 硬件不支持 SPI 库,但在其他板上受支持
  • SPI 库仅在软件中为 Nano 实现

是哪个?

谢谢

arduino spi

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

在嵌入式应用中撞击SPI/I2C有什么缺点

我已经明白,当涉及到GPIO上的SPI/I2C时,位敲击是一种可怕的做法.为什么这样?

embedded spi i2c

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

与 z80 的 SPI 硬件接口

我正在尝试使用 z80 制作一台复古计算机,理想情况下希望让它能够从 SD 卡启动。我 100% 决定使用 z80,并且不想使用具有内部 SPI 硬件接口的微控制器。我想了解计算机的硬件和软件方面,因此 arduino 和微控制器不在考虑之列,因为硬件方面在您购买之前就已完成。无论如何,我的主要问题是是否可以将移位寄存器、一些解码逻辑和软件结​​合起来通过 SPI 模式从 SD 卡读取数据?我在互联网上搜索了几个小时并阅读了几篇文章,但似乎找不到教程。我了解 SPI 协议,但是,缺乏有关硬件方面的信息,因为微控制器往往内置所有硬件。我计划将 SD 卡的 SOMI 连接到移位寄存器 SIMO 的串行输入引脚将SD卡的串行输出引脚连接到移位寄存器的串行输出引脚,然后将一些数据引脚连接到一些触发器,中间有一些解码逻辑,这样如果我输出到特定端口,它将切换触发器。触发器将充当 SD 卡的时钟和芯片使能线。我还将 z80 的一个引脚连接到移位寄存器的锁存器引脚(同样在中间有解码逻辑),这样如果我输出到特定端口,它将锁存移位寄存器的数据。我不关心速度/效率,只要我能准确地从 SD 卡读取数据即可。另外,我是否可以将移位寄存器时钟输入连接到与 SD 卡连接的同一时钟?任何有关如何实现这一点的建议将不胜感激,谢谢!

z80 spi sd-card retro-computing shift-register

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

如何在 BeagleBoneBlack 上启用和使用 SPI

我有一个 BeagleBoneBlack Wireless,我想使用 SPI(和 I2C)。我发现很难获得有关如何在 BBB 上设置和使用 SPI 的明确说明。首先,我不清楚 BBB 的默认配置是什么。我似乎有两个 SPI 设备:

$ ls /dev/spi*
/dev/spidev1.0  /dev/spidev1.1  /dev/spidev2.0  /dev/spidev2.1
Run Code Online (Sandbox Code Playgroud)

我似乎也有 I2C:

$ ls /dev/i2c*
/dev/i2c-0  /dev/i2c-1  /dev/i2c-2
Run Code Online (Sandbox Code Playgroud)

我不清楚这些总线是否实际上多路复用到引脚,或者它们是否真的不可用。如果它们连接到引脚,究竟哪条总线是哪条?

我尝试使用引脚多路复用信息(来自此处)进行检查,该信息告诉我对于 SPI1 芯片选择 0,我应该使用偏移量为 0x19C 的引脚,因此我查询了该引脚上的模式:

$ sudo cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pins | grep 44e1099c
pin 103 (44e1099c.0) 00000002 pinctrl-single
Run Code Online (Sandbox Code Playgroud)

它作为模式 2 返回,这对我来说不是很有用(它不是 SPI)。我试图按照有关为此设置覆盖的说明(从这里),但这需要对我的内核进行一些调整,即使那时似乎也无济于事。

请有人指点我一些说明,使这更清楚一点,并且理想情况下与我使用的内核版本(4.4.30)相匹配?

linux spi beagleboneblack

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

SPI + JDK 9 + module-info.java

我正在JDK 9上使用SPI进行实验。整个示例都可以在没有“ module-info.java”的JDK 9上使用。添加“ module-info.java”后,ServiceLocator找不到实现类。我很困惑,在模块化的JDK 9项目中找不到有效的SPI示例。

所以我的示例项目如下所示:

/spidemo
??? apiModule
?   ??? pom.xml
?   ??? src
?       ??? main
?           ??? java
?               ??? eu
?               ?   ??? com
?               ?       ??? example
?               ?           ??? text
?               ?               ??? spi
?               ?                   ??? TextAPI.java
?               ??? module-info.java
??? applicationB
?   ??? pom.xml
?   ??? src
?       ??? main
?           ??? java
?           ?   ??? eu
?           ?       ??? com
?           ?           ??? example
?           ?               ??? spi
?           ? …
Run Code Online (Sandbox Code Playgroud)

java spi service-locator java-9 module-info

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

USB 转 GPIO/SPI/I2C/UART 适用于常规 Windows 10 PC?类似于 Raspberry Pi 40 针接头

有谁知道有一家公司销售适用于普通非物联网 Windows 10 PC 的 USB 电缆,该电缆可以将 USB 转换为 40 针 Raspberry pi 接头上的所有以下总线?示例:USB->GPIO、I2C、SPI、UART 等。

我能找到的最接近的是:

Digilentinc.com 的数字发现逻辑分析仪

这可以将 PC USB 转换为 GPIO/I2C/SPI 等...除了我正在寻找更小、电线更少的东西...只有 40 针接头或更少...类似于树莓派 40 针接头,除了被驱动从连接到 PC 的 USB 改为...有人见过这种类型的待售产品,它可以通过所有列出的总线从 PC-USB 转换为 40 针接头吗?

另外,我希望能够使用“Windows.Devices”Api 而不是专有驱动程序 DLL API 通过Windows UWP对该 USB 转换设备进行编程...还没有真正找到...示例:

// C# Program GPIO connected to USB dongle of regular PC...
using Windows.Devices.GPIO;
...
private void InitGPIO()
{
    var gpio_ctrl = GpioController.GetDefault();
    // Check GPIO state
    if (gpio_ctrl == null)
    {
        this.pin = null; …
Run Code Online (Sandbox Code Playgroud)

c# windows spi i2c gpio

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

如何减少 STM32L4 HAL 库的 SPI 开销时间

我正在使用 STM32L476RG 板和 HAL SPI 功能:

HAL_SPI_Transmit(&hspi2, &ReadAddr, 1, HAL_MAX_DELAY);
HAL_SPI_Receive(&hspi2, pBuffer, 4, HAL_MAX_DELAY);
Run Code Online (Sandbox Code Playgroud)

我需要以最大速度从加速度计的缓冲区接收数据,但这些功能存在延迟问题。正如您在示波器屏幕截图中看到的那样,有几微秒没有任何反应。我不知道如何最小化传输间隙。

在此处输入图片说明

我尝试使用 HAL_SPI_Receive_DMA 函数,这个延迟更大。您知道如何使用 HAL 函数或有关如何在没有这些延迟的情况下编写 SPI 函数的任何指针来解决此问题吗?

hal accelerometer spi stm32

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

U-Boot 2020.04:探测 SPI 闪存失败 - 无效总线 0 (err=-19)

我刚刚为PINE64 ROCK64媒体板编译了U-Boot 2020.04。它编译得很好,没有错误。但当我尝试探测 SPI 闪存时遇到了问题。

U-Boot 命令行的输出:

=> sf probe
Invalid bus 0 (err=-19)
Failed to initialize SPI flash at 0:0 (error -19)
=>
Run Code Online (Sandbox Code Playgroud)

开发板上的设备树 SPI 部分:

&spi0 {
    status = "okay";

    spiflash@0 {
        compatible = "jedec,spi-nor";
        reg = <0>;

        /* maximum speed for Rockchip SPI */
        spi-max-frequency = <50000000>;
    };
};
Run Code Online (Sandbox Code Playgroud)

我还尝试了不同的总线和芯片选择。但没有成功。根据电路板原理图,使用的是 SPI 闪存器件GD25Q128CS

我如何编译源代码:

$ make rock64-rk3328_defconfig
$ make CROSS_COMPILE=/path/to/gcc-arm-9.2-2019.12-x86_64-aarch64-none-elf/bin/aarch64-none-elf- -j 4
Run Code Online (Sandbox Code Playgroud)

我使用了ARM 网站上的官方GCC端口。

还尝试了旧版本和新版本的 U-Boot。同样的问题。我按照U-Boot文档刷写了microSD卡:

$ dd if=idbloader.img …
Run Code Online (Sandbox Code Playgroud)

c arm spi u-boot kbuild

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

stm32 SPI + DMA

我尝试使用DMA通道使用SPI发送数据.当我在没有DMA的情况下发送一切都没问题,但是用DMA确实是错误的.当我调试我的程序时,SPI DR寄存器始终为0.我想使用dma循环模式一直发送我的数组.有我的代码GPIO INIT:

GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(SPI_PERIPH_CLOCK, ENABLE);
RCC_AHBPeriphClockCmd(GPIO_PERIPH_CLOCK, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

GPIO_PinAFConfig(GPIOB, AF_PIN_SOURCE, GPIO_AF);

GPIO_InitStructure.GPIO_Pin = GPIO_PIN_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);
Run Code Online (Sandbox Code Playgroud)

SPI INIT

SPI_I2S_DeInit(SPI1);

SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);

SPI_Cmd(SPI1, ENABLE);
Run Code Online (Sandbox Code Playgroud)

DMA INIT:

    DMA_InitTypeDef dma;
    DMA_DeInit(DMA1_Channel1);
    DMA_StructInit(&dma);

    dma.DMA_PeripheralBaseAddr = (uint32_t)&SPI1->DR;
    dma.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    dma.DMA_PeripheralDataSize …
Run Code Online (Sandbox Code Playgroud)

c embedded spi stm32 dma

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

在 STM32 传输结束时,循环 DMA 外围到内存的行为如何?

我想问一下,在以下情况下,STM32 中的 DMA SPI rx 将如何表现。我有一个名为 A 的指定(例如)96 字节数组,用于存储从 SPI 接收到的数据。我打开对每个字节进行操作的循环 SPI DMA,配置为 96 字节。是否有可能,当 DMA 将填充我的 96 字节数组时,传输完成中断将关闭,以快速将 96 字节数组复制到另一个 - B,然后循环 DMA 将开始写入 A(并破坏保存在 B 中的数据) ? 我想通过 USB 将数据从 B 快速传输(每次我从 B 中的 A 获取新数据时)到 PC。

我只是在想如何通过 USB 将 STM32 的连续数据流 SPI 传输到 PC,因为我认为每隔一定时间通过 USB 传输的 96 字节数据块比通过 STM32 将实时 SPI 流传输到 USB 更容易?我不知道这甚至可能

embedded usb spi stm32 dma

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