Tag: spi

STM32:FatFs库 – f_mount

我正在编程STM32F0(Keil uVision 5)。 我曾尝试使用FatFs库来管理文件系统(SD卡)。 我写了每个初始化函数,项目正在编译而没有任何错误/警告。 但是第一个函数f_mount无法正常工作。 函数调用是: const char sciezka = ‘0’ ; FATFS *fs = (void *) 0; fresult= f_mount (fs, &sciezka, 1); 函数甚至没有到达disk_initialize的行。 我得到了结果“FR_NOT_ENABLED”(f_mount – > find_volume :::::在行fs = FatFs [vol] fs指针仍为NULL之后)。 带有示例的FatFs库位于fatFs网站: http ://elm-chan.org/fsw/ff/en/mount.html 请告诉我应该怎么做。

将各个位分配给字节

我需要在微控制器和另一个芯片之间进行SPI通信。 该芯片接受16位字。 但是抽象库需要将数据作为两个8位字节发送。 现在我想制作一个包装器,这样我就可以轻松创建读写请求……但我还没有取得任何成功。 这是它应该如何: 下表显示了16位。 MSB可以是0表示写入, 1表示读取。 地址可以是0x0到0x7 ,数据是11位。 R/W | ADDRESS | DATA B15 | B14-B11 | B10-B0 0 | 0000 | 00000000000 W0 | A3, A2, A1, A0 | D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0 例如,如果我想从寄存器0x1读取,我想我必须设置这样的位: W0 | A3, A2, A1, A0 | D10, D9, D8, D7, […]

在Linux中断处理程序中创建一个小延迟

我正在与硬件设计小组合作开发一个中断处理程序,我们正试图弄清楚bug的位置。 我正在以5khz的速度读取SPI总线上的芯片。 芯片加载4个字节并触发数据就绪引脚。 我的中断处理程序唤醒并从SPI总线读取4个字节并将数据存储在缓冲区中。 但奇怪的是,每17次读取都会给出所有0的4个字节,这是不对的。 我们正在探索的一个选项是,当芯片发送数据就绪信号时,它并不总是准备就绪。 所以,我知道我无法在中断处理程序中睡觉,但我想尝试引入10或20微秒的延迟。 现在我有一个计数到100,000的for循环然后处理中断。 我没有看到任何变化,所以我想我可能会看到有人有更好的技术来忙碌等待。 或者至少是一种更好的方法来确定我应该经历多少循环迭代,因为我不确定这需要多长时间,或者编译器是否只是优化了整个事情。

读取STM32 MCU的SPI数据寄存器的值

有很多类似的问题,但似乎都没有相同的问题。 我正在将STML4 MCU连接到6轴传感器(LSM6DS3)。 我已经成功地在I2C中实现了所有function,但是想要SPI的额外速度(以及DMA,如果我可以使这些第一步工作……)。 因此,对于第一步,我试图读取设备的WHO_AM_I寄存器( 0x0F ),该寄存器应以0x69回复。 这是代码: uint8_t who = 0; // Sanity check/debugging aid should get 0x5D who = 0x43 + 0x1A; // Set SS low GPIO_WritePin (GPIOB, LL_GPIO_PIN_7, GPIO_PIN_RESET); // while tx buffer is in use, wait while (!LL_SPI_IsActiveFlag_TXE(SPI1)); // Send READ command to the WHO_AM_I register (SPI1->DR) = 0x8F; // while […]

什么使SPI比I2C协议更快

我知道I2C和SPI通信的基本知识。 由于两者都是同步协议。 我想知道是什么让SPI比I2C更快。 如果我没有使用I2C,我们可以使用400kbps,而在SPI中我们也可以达到10mbps。 是因为硬件变化了吗? 在一次采访中我问过这个问题。如果我错了,请告诉我。

Spidev不使用ioctl同时写/读

我希望找到一些帮助,即使这个问题可能是硬件而不是软件相关(我们会看到)。 我正在开发基于Freescales P1021处理器(ppc,e500v2核心)的定制电路板。 外部PCB将连接并可由SPI配置。 该外部PCB的规格读取为全双工模式下的2字节命令,并且只有最后一个字节用于在MISO上传输数据。 知道这一点,我目前正在准备一些软件来测试这个设备。 所以我从众所周知的spi_test程序开始。 root@p1021rdb:~# ./spi_test -D /dev/spidev32766.3 spi mode: 0 bits per word: 8 max speed: 500000 Hz (500 KHz) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 […]

谁在驱动程序代码中调用“probe”函数?

我试图了解mcspi的omap2pandas板的驱动程序代码。 我不明白谁调用probe函数以及此驱动程序代码中的调用链是什么? 连接设备时如何通知驱动程序?

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

我正在尝试编写一个程序,该程序将安装在Linux MCU(Raspberry Pi)上,该程序将读取从另一个MCU(我将自己构建的本地产品)的串行数据。 我已经研究过如何做到这一点,并认为我有“大局”,但仍然缺少一些东西。 首先,我需要启用内核模块并让自己访问设备: sudo modprobe spi_bcm2708 sudo chown `id -u`.`id -g` /dev/spidev0.* 从那里我可以使用这个着名的C文件来测试SPI连接。 所以现在连接就在那里,但我仍然需要从中读取串行数据。 根据这个问题的答案,我只需要: …打开相关端口进行读取,并使用read()获取数据。 然而,该答案中的代码片段似乎是通过设备驱动程序而不是通过SPI打开端口。 我的理解是我可以使用SPI从连接的MCU设备读取数据,并且我不需要为该设备编写自己的设备驱动程序。 这是真的? 如果是这样,我将如何从SPI连接中读取,以及该代码与上面链接的问题的答案中的代码有何不同? 如果我的理解不正确,并且我确实阅读了“通过”设备驱动程序,为什么我首先需要驱动程序? 这不是SPI希望绕过的吗? 提前致谢。