问题标签 [spi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1511 浏览

embedded - 嵌入式:SDHC SPI 写入问题

我目前正在使用 MSP430F2618 MCU 和 SanDisk 4GB SDHC 卡的记录器工作。

卡初始化按预期工作,我也可以读取 MBR 和 FAT 表。

问题是我不能在上面写任何数据。我检查了它是否受缺口写保护,但事实并非如此。Windows 7 操作系统读取/写入它没有问题。

不过,我使用了一个名为“HxD”的工具,并且尝试更改某些扇区(在 Windows 下)。当我尝试将内容保存到 SD 卡时,该工具会弹出一个窗口,告诉我“访问被拒绝!”。

然后我回到写入 SD 卡的代码:

问题似乎出在我等待卡状态时:

在这里,我正在等待 X 未定义的“X5”(十六进制值)类型的响应。

但大多数情况下,响应是 0x00(十六进制值),我没有跳出循环。很少有响应为 0xFF(十六进制值)的情况。

我不知道是什么问题。

谁能帮我?谢谢!

0 投票
4 回答
11795 浏览

serial-port - 串行与 SPI

SPI和串行有什么区别?在阅读有关处理器间通信的文章时,它指出串行接口正在被 SPI 取代以获得更好/更快的通信?究竟有什么区别?

0 投票
1 回答
3510 浏览

c - 我可以设置工作队列的优先级吗?

我可以设置工作队列的优先级吗?

我正在修改 SPI 内核模块“spidev”,以便它可以更快地与我的硬件通信。外部硬件是一个带有非常小的缓冲区的 CAN 控制器,因此我必须快速读取任何传入数据以避免丢失数据。我已经配置了一个 GPIO 中断来通知我新数据,但我无法在中断处理程序中读取 SPI 硬件。我的中断处理程序基本上设置了一个将读取 SPI 数据的工作队列。当内核中只有一个活动进程时,它可以正常工作。一旦我同时打开任何其他进程(甚至是进程查看器顶部),我就会开始丢失成串的数据,也就是说,我可能会毫无问题地收到 1000 个数据包,然后连续丢失 15 个数据包,依此类推. 我怀疑我的问题的原因是当其他进程(顶部,在这种情况下)可以控制中断处理程序运行的 cpu,但工作队列中的工作直到再次调用调度程序才开始。我试图提高我的流程的优先级,但没有成功。

我想知道是否有办法告诉内核在中断处理函数之后立即执行工作队列中的工作。欢迎提出建议。

0 投票
2 回答
10230 浏览

c - Spidev 不使用 ioctl 同时写入/读取

我希望能找到一些帮助,即使这个问题可能更多的是硬件而不是软件相关(我们会看到)。我正在开发基于飞思卡尔 P1021 处理器(ppc,e500v2 内核)的定制板。外部 PCB 将被连接并可通过 SPI 进行配置。该外部 PCB 的规格在全双工模式下读取 2 字节命令,并且只有最后一个字节用于将数据传回 MISO。

知道了这一点,我目前正在准备一些软件来测试这个设备。所以我从众所周知的spi_test程序开始。

图1

信号显示 608 个时钟,似乎只有前半部分的数据。我决定使用环回来调查和测试它 - 缩短 MOSI-MISO 将数据循环回 rx 缓冲区。结果:

图2

这个信号表明,整个电报因任何原因被重复(我不知道为什么)。但是,程序在控制台中正确显示了接收到的数据,所以它可能正如 spi_test 所期望的那样。

此外,我将在该程序中发送的模式控制为 2 个字节(以模拟我所针对的请求的命令格式),如下所示:

但正如我没想到的那样,32 位被移出到 SPI 总线 - 而不是 16 位。在前两个字节期间,MOSI 提供来自 tx[] 的两个字节,而对于其他 2 个字节,它是低/0。以下是控制台输出和信号的结果:

图3

即使我将 MOSI 环回到 MISO 也没有收到数据(控制台输出仍然是相同的接收“00 00”):

图4

我对所有参数进行了一些调整,并决定将测试程序更改为使用半双工(仅传输)模式:

由于这是编译和执行的事情,就像预期的那样。16 位的 SPI_CLK 循环 16 次,MOSI 按预期提供数据。Cosole 输出显示没有接收到数据,并且信号与预期的一样:

图5

图6

实际上,在我看来,我不是进行 2 字节全双工传输,而是进行 N 字节传输,然后进行 N 字节接收。

其实有两个问题:

  1. 为什么要传输 0xAA、0x81 和 0x00、0x00?
  2. 为什么(使用环回)原始代码能够在 rx 缓冲区中取回数据,但如果减少到 2 个字节,则没有接收到数据?
0 投票
3 回答
20454 浏览

arduino - Arduino Nano:是否支持 SPI?

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

Nano 页面上,它说:

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

然而有一个SPI 库

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

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

它是哪一个?

谢谢

0 投票
1 回答
243 浏览

linux - SPI 数据传输 - 为什么 MOSI 在数据传输前进入零半周期?

我有一个 SPI 设备的 SPI 信号输出。我想知道为什么数据输出( )在实际数据写入总线之前MOSI进入半个周期?0它是 SPI 设备的必备条件吗?如果不归零,数据传输会不会有问题?

我在linux上使用spidev32766.1(ubuntu 12.04 - kernel 3.7.1),处理器是imx233

先感谢您!!

在此处输入图像描述

0 投票
1 回答
1737 浏览

sd-card - 编辑 dsPIC 的 FatFS 通用示例

我正在尝试使用 FatFS ( http://elm-chan.org/fsw/ff/00index_e.html ) 作为使用 SPI 与 SD 卡进行通信的一种方式。

FatFS 网站有许多示例,但我发现它们并不容易理解或遵循。可下载的 zip 中有两个示例适用于我,一个用于“通用”微控制器,另一个用于 PIC24。虽然 PIC24 看起来与我的 dsPIC33F 非常相似,但代码非常难以理解,具有我不关心的特定应用程序。

通用代码更容易理解,并且执行一个非常简单的应用程序:创建一个 txt 文件,写入它,然后关闭它。但是,我很难更改代码以使用我的 PIC。

我有 dsPIC33FJ128GP802。我在通用示例中添加了代码来重新映射 SPI 引脚、设置内部振荡器以及设置和启动 SPI 模块:

PIC到SD卡是:

  • RP15,SPI时钟输出,到SCK
  • RP14,SPI 数据输入,到 DO(数据输出)。
  • RP13,SPI 从机选择,至 CS。
  • RP12,SPI数据输出,到DI(数据输入)。
  • SD 卡 CD 未连接。

有FatFS经验的人可以帮我做必要的改动。到目前为止,运行代码一直到 f_open,它返回错误 FR_NOT_READY。

现在我不想做任何花哨的事情,只是创建一个文件并写入它。我见过许多使用外部晶体振荡器的应用程序,而我没有。这是SPI的必需品吗?我是 SPI 新手,在此之前一直在使用 I2C。

在通用示例的 mmcbb.c 文件中,我必须进行一些更改以消除我遇到的一些错误,我用我自己的函数替换了他们的延迟函数,以创建与引发错误的时间相似的延迟,我还删除了出现在 disk_initialize(BYTE pdrv) 中的 INIT_PORT(),因为它引发了错误,并且我在进入任何 FatFS 代码之前初始化了端口,就在 main 的开头。在 mmcbb.c 的顶部有 #define 需要将相应的端口添加到我设置 SPI 的方式中,我这样做了(RBx 引脚与我在上面设置的 RPx 相同):

位运算符已经存在,我只是添加了 PORTBbits.RBxx。

这就是我所做的所有更改,但我发现在线查找有关使用任何库进行 SD 卡操作的信息特别困难(FatFS 和 MDDFS)。任何帮助将不胜感激!

0 投票
2 回答
2284 浏览

avr - 使用 USBASP 编程器进行 SPI 通信

我正在尝试通过 USBASP 编程器将一些数据从 PC 发送到 ATmega328P 芯片。

它能够通过 SPI 传输多达 4 个字节。这 4 个字节可以在 USB 设置包中设置(2 个字节用于wValue和 2 个字节用于wIndex)。要在 ATmega328P 中启用 SPI,我已将 USBASPReset引脚连接到SS. 在 PC 端,我libusb用来发送 USB 设置数据包。

ATmega328P 代码:

电脑代码(C#):

USBASP -> ATmega328P SPI 通信运行良好,但似乎设置数据包中的数据wValuewIndex字段已损坏到 USBASP,因为我得到了这个输出(虽然它应该是恒定的 - [0, 200, 0, 200]):

我还在连接到 ATmega328P 的 LED 数字显示屏上看到这些数字。

谁能解释一下?

PS 出于编程目的,此 USBASP 运行良好。

0 投票
1 回答
7100 浏览

c - 如何为 Zynq 7000 ARM 开发板编写 SPI 驱动程序?

我将为 ARM 开发板编写一个 SPI 驱动程序。它不适用于 Linux。

昨天看了Xilinx提供的QSPI驱动,试了成功。但是,我真的很想编写自己的 SPI 驱动程序。

以下是我的问题:

  1. QSPI 和 SPI 在使用上的区别是什么?
  2. 如果我写一个基于 QSPI 的驱动程序,它会工作吗?
  3. 如果我从头开始编写驱动程序,基本程序是什么(READ / WRITE / INITIALIZE)?
  4. 最后,为什么 SPI 必须同时发送和接收?

谢谢大家。

0 投票
2 回答
1123 浏览

c - 与 2 个具有不同 spi 模式的设备的 Spi 连接

我有两个不同的设备要与Arduino连接。以太网屏蔽和轴编码器。第一个有SPI模式 0 和第二个 SPI 模式 2。它们冲突。这个问题有解决方案吗?

我使用不同的芯片选择引脚,这两个设备可以完美地单独工作。

我能做些什么来解决这个问题?有没有我想念的教程?