Questions tagged «spi»

SPI是具有时钟(SCLK),数据输入(MISO)和数据输出(MOSI)的低级3线或4线串行总线接口。第四根线是从选择,用于唯一选择总线上的设备。该信号通常为低电平有效。从选择,片选,CS#,SS#通常代表相同的功能。不过,请务必检查数据表。SPI总线是缺乏正式规范的事实上的标准。

1
似乎无法写入SPI Flash
好吧,我已经坚持了一段时间,目前大概需要2-3周。我只是不确定自己在做什么错。我正在尝试对此spi flash部分进行写操作,现在我只是在运行例程来擦除,写和读以尝试隔离它,但到目前为止还算不上什么。当然,我已经解决了很多错误。 无论如何,我都将WP线绑在板上,并且将时钟频率降低到200khz,然后运行擦除例程,它看起来像这样: 首先,我仅检查ID以进行调试,即9F命令,然后使用06命令设置WREN,将C7整个芯片擦除,然后使用05检查状态位,这很明显。这东西的芯片擦除时间只有35ms。 现在,我重新加载代码并尝试写: 首先,我将WREN设置为06,检查状态以确保WREN设置为05,然后将页面编程命令02发送到地址0x000000。您可以看到,我正在将Deadcafe写为前几位。同样在此处未显示的是写入完成(一页或256字节)后,我发送了0x04命令来禁用WREN。我观察到了这一点,并且确实将页面缓冲区的最后四个字节设置为0xAA,0x55​​、0xAA,0x55​​,并且在CS变高之前我就看到了它们。 现在,停止重新加载代码并尝试运行读取周期: 发送0x03作为读取命令,发送0x000000作为地址,然后...从设备返回所有0xFF。 我可以看到设备响应我的读取ID并设置了WREN命令,因此我知道它可以听到我的声音并且可以响应。我目前不知道我在做什么错。我想我将重新阅读数据表,并尝试一些尝试,但是如果有人有任何见解,我将不胜感激。这将是又一个令人沮丧的周末,正在研究这个问题。
9 pic  spi  flash 

1
处于SPI模式的SD卡是否尊重片选/从片选择?似乎正在我的应用程序中重置
我有一个具有微控制器(NXP LPC1343)的应用程序,该微控制器通过16位SPI 连接到FPGA。还有一个SD卡使用相同的SPI端口(MISO / MOSI),但具有不同的CS / SS引脚(根据SPI规范,它们均为低电平有效)。我需要做的一件事就是使用FAT32将FPGA中的数据写入SD卡上的文件中,这就是微控制器的工作。该微控制器正在运行FatFS,我已经可以独立可靠地工作。 由于微控制器只有少量的RAM,因此一次只能缓存少量的数据。因此,微控制器必须从FPGA读取缓冲区,将SPI模式更改为8位,然后将该数据写入FATFS。回想一下,为了将SD卡配置为SPI模式,必须在SPI总线以400 kHz运行时发送命令,并且必须进行一定的等待。因此,我只想执行一次初始化。 但是,即使在将SD卡上的CS保持高电平的同时在FPGA上执行事务,似乎也会使SD卡进入怪异状态,从而需要再次进行初始化。这当然是不希望的,因为初始化可能要花费几毫秒,以便仅写入4 kB左右的数据(同样受微型计算机的RAM容量限制)。由于我需要尽快写入几兆字节,因此性能从大约500 kB / s降低到不到100 kB / s。 我知道SD卡在技术上并不完全兼容SPI,但是如何解决此问题?
9 fpga  spi  sd  nxp 

2
如何处理模块上的多个上拉电阻
我正在考虑为几天前开发的开发板制作一个模块,其中将包括spi / i2c接口。 问题是我没有在主板的MCU引脚中包括上拉电阻,而是在考虑将它们添加到模块中以使其更“通用”,因此每个用户都可以使用它们而无需在其中添加额外的电阻。原型板。 但是后来我遇到了下一个问题。如果在额外的模块中添加上拉电阻,并且例如将两个或多个模块连接到同一条总线,则这些电阻将并联,这样电阻将下降并且无法实现其功能。 但是,如果我在主板上增加上拉电阻,则这些引脚在MCU中始终为低电平有效。 因此,主要问题是: 如何将多个模块连接到同一条总线上,而每个模块上都有一个上拉电阻,而当一个以上模块时却不能使它们并联?那可能吗? 还是这里最好的解决方案是在MCU中启用上拉电阻,而不在模块中插入上拉电阻? 谢谢。-

1
ATmega328上的AVR计时器加速
当在ATmega328上以64的时钟预分频器运行时,我的一个定时器在执行的特定时间由于未知原因而加速。 我在ATmega328上使用了两个定时器来生成TLC5940所需的时钟(请参见下面的原因;这与问题无关紧要)。TIMER0使用快速PWM开启生成时钟信号OC0B,其设置如下: TCCR0A = 0 |(0<<COM0A1) // Bits 7:6 – COM0A1:0: Compare Match Output A Mode |(0<<COM0A0) // |(1<<COM0B1) // Bits 5:4 – COM0B1:0: Compare Match Output B Mode |(0<<COM0B0) |(1<<WGM01) // Bits 1:0 – WGM01:0: Waveform Generation Mode |(1<<WGM00) ; TCCR0B = 0 |(0<<FOC0A) // Force Output Compare A …
9 avr  atmega  spi  timer 

3
通过数个板路由30MHz时钟
我正在使用TLC5945 LED驱动器。微控制器(我正在使用LPC1343)必须为其内部PWM定时器/计数器提供时钟。允许的最大时钟速度指定为30MHz。 我将使用菊花链连接TLC5945的几块板。板将通过板对板连接器或短带状电缆连接,一块板的宽度为10cm。我最多将其中4个串联。 可能我不会使用完整的30MHz,但是尽管如此,我还是想做对-如何路由/调节时钟信号,使其保持完整? 如果在每个板的输出上添加一个像74HC245这样的缓冲区,那么在每个缓冲区之后都会有10ns的延迟,我不希望这样。我应该使用专用的“零延迟”时钟缓冲器吗?我应该采用哪种终止方案?

1
用合成的ROM内核模拟一个简单的测试台
我对FPGA领域是一个全新的领域,并认为我将从一个非常简单的项目开始:一个4位7段解码器。我纯粹用VHDL编写的第一个版本(基本上是单个组合select,不需要时钟),并且似乎可以使用,但我也想尝试使用Xilinx ISE中的“ IP内核”功能。 因此,现在我正在使用“ ISE Project Explorer” GUI,并使用ROM内核创建了一个新项目。生成的VHDL代码为: LIBRARY ieee; USE ieee.std_logic_1164.ALL; -- synthesis translate_off LIBRARY XilinxCoreLib; -- synthesis translate_on ENTITY SSROM IS PORT ( clka : IN STD_LOGIC; addra : IN STD_LOGIC_VECTOR(3 DOWNTO 0); douta : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END SSROM; ARCHITECTURE SSROM_a OF SSROM IS -- …

4
为什么我的某些信号“发抖”(抖动)?
我有一条2 MHz的SPI总线,但是我注意到的一件事是我的某些信号经常“发抖”。是的,我的触发器设置正确,所以我认为问题不存在。 您可以在这里看到我的意思:(这是在持久模式下启用的)。这是我的SPI总线的时钟。 SPI确实可以正常工作。我已经在多个板上传输了数百兆字节,到目前为止还没有发现问题。但是我仍然想知道这里可能是什么问题。另外,即使它可以正常工作,我也应该解决这个问题吗? 测量是使用非常小的接地夹直接在信号源处进行的。 这是我的电路的简化示意图。当然,板上有更多的SPI器件,但出于这个问题的目的,这是正确的,因为除了uC和SD卡外,板上没有焊接任何东西。 主设备(AVR Mega 128)正在运行其内部RC振荡器-我不知道这是否有意义,但是由于信号随时间推移而变化,因此RC振荡器的抖动也有可能在SPI总线中消失。只是以为我会提到它。在我看来,在这些测量过程中,我会无限循环地运行控制器。这是代码: while(1) { setFirstBitOnDriver(driver); // this sends a 8-bit command on the SPI bus. GLCD_SetCursorAddress(40); // Change cursor position on the display. GLCD_WriteText("LED: "); for(wire=0;wire<72;wire++) { itoa(wire+1,str,10); GLCD_WriteText(str); GLCD_SetCursorAddress(44); _delay_ms(10); shiftVectorOnDriver(driver); // another command on SPI. 8-bit wide. } } 当内部运行72次然后退出时,可能会发生抖动/颤抖。由于执行前三行需要花费额外的时间,因此可能会由于附加的处理时间而使每个第73个波形到达的时间略有不同。如果我必须打赌,我猜这是造成我问题的原因(如果可以的话,我会立即确认这一点,但我的董事会和下个星期都休息了!),但我仍然希望提出意见/ SE在此问题上的答案。 …

1
SPI在MSP430上似乎出现乱码
我正在尝试从连接到启动板的Bus Pirate中获取明智的信息(使用Sparkfun电缆:橙色变为P1.6,黄色变为P1.5。除非我对MOSI和MISO感到困惑,否则这应该是正确的...)。我没有连接CS,因为我只是在使用海盗车监视任何东西。 总线盗版设置为SPI,125KHz,时钟极性空闲低,输出时钟边沿有效到空闲,输入采样相位中间,/ CS,输出正常。 在启动板上,我有一个没有外部晶体的MSP430G2231。使用Code Composer Studio,我可以进行以下操作: #include "msp430g2231.h" volatile unsigned char value=0; #pragma vector=USI_VECTOR __interrupt void universal_serial_interface(void) { value+=1; USISRL=value; USICNT=8; } void main(void){ WDTCTL = WDTPW + WDTHOLD; BCSCTL1 = CALBC1_1MHZ; // Set range DCOCTL = CALDCO_1MHZ; BCSCTL2 &= ~(DIVS_3); USICTL0 |= USIPE7 + USIPE6 + USIPE5 + …
9 spi  msp430 

7
如何写入SPI闪存?
我正在开发一个音频应用程序,而不是将音频数据存储在SD卡(Arduino 上的Waveshield)上,而是将其存储在SPI闪存IC上,并使用MCU,DAC和放大器滚动自己的电路板。 我正在使用Winbond W25Q80BVSSIG。 我对使用AVRISP mkII或USBTiny编程AVR非常熟悉,是使用同一程序员将数据写入闪存吗?在专门寻找SPI闪存编程器时,我一直找不到任何东西。 这个问题是一个跟进这一个。

2
SPI从设备可以以全双工模式启动传输吗?
据我所知,SPI从设备的SPI传输如下所示: 主机通过SS引脚选择一个从机 主从之间同时发送数据 主机同时启动时钟和数据传输(写操作之前没有时钟) 即使从站有更多数据要发送,主站也可以在其希望的任何时候停止传输(通过停止写操作和时钟生成)。 是否有任何SPI从设备配置,该配置允许从设备在未经主机许可的情况下传输数据? 我只是想大声一点。假设只有一个从站,而主站等提供了一个连续的时钟。 即使假定的陈述为真,由于没有SPI的起止位,主机和从机也不会丢失字节同步(即接收位流)吗? 我问这样的问题是因为我已经阅读了本文档的以下部分。 2.2 SPI示例 所附的SPI示例说明了USART在同步模式下的使用。USART1被配置为从设备,而USART2被配置为主设备。发生以下交易: 从主机到从机的数据传输。 从机到主机的数据传输。 从主机到从机以及从机到主机同时进行数据传输。 本文给出了SPI示例,但使用USART器件实现了示例。而且我知道USART从站可以在未经主站许可的情况下开始传输。 我找不到文档引用的源代码。

1
没有上拉电阻,STM32上的SPI将无法工作,即使如此,其性能也很差
我一直在尝试使STM32F103C8(蓝色药丸板)上的SPI1 正常工作一段时间。在我刚刚开始学习ARM时,我只是在尝试将数据移至74HC595移位寄存器并对其进行锁存以点亮一个字节的LED。我没有回读任何数据,所以我只有MOSI,SCK和SS线路。 起初我什么都没有得到,但是阅读一些在线示例后,我可以解决这些第一个问题,以使通信正常进行(我需要正确设置GPIOA引脚并设置软件SS)。 现在的主要问题是,如果我在所有线路(MOSI,SCK和SS)上均未包括上拉电阻,则微控制器在任何线路上均不会输出任何内容(已通过示波器检查)。最重要的是,在添加上拉电阻之后,脉冲的上升时间非常慢,因此我不能使用太高的频率(对于10kΩ上拉电阻,我限于约250 kHz SCK,并且切换至330Ω(约4 MHz)。我正在试验板上,但是即使使用AVR和更杂乱的布线,我也可以得到一个4 MHz SPI,而无需添加任何电阻就可以正常工作,并且波形更清晰。 这是两张图片(抱歉,我的示波器屏幕处于极低状态),它们以250 kHz的时钟传输字节0b01110010。顶部轨迹为SCK,底部轨迹为MOSI。第一张图带有10kΩ上拉电阻,第二张图带有330Ω上拉电阻,这些波形使波形更好看(但不需要)。 我将不胜感激,以帮助您找出正在发生的事情。 我的代码的相关部分是: #define SS_LOW GPIOA->BSRR |= 1 << 4 + 16; #define SS_HIGH GPIOA->BSRR |= 1 << 4; // SPI GPIO configuration RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; GPIOA->CRL |= 0b0011 << 4 * 4; // Set pin A4 as PP out …

3
如果仅使用一个SPI设备,可以将SS引脚拉低吗?
我在线阅读了一篇文章,要开始与SPI支持的设备进行SPI事务,必须将SS(从机选择,也称为芯片选择)线设置为低,以便整个事务通过,然后在端到端事务中将其设置为高。如果我制作的电路仅包含一个SPI器件,我是否需要降低SS线发送命令,然后每次都升高ss线,还是可以将ss线拉低并发送无限制命令?我使用的设备是ISD1700声音芯片。
8 spi 

1
SPI数据存储设备:(micro)SD卡,DataFlash或串行EEPROM?
我正在重新审视我的一些设计习惯,其中一个正在受到严格审查:基于SPI的存储设备是(micro)SD卡,因为它们的性价比高,而且速度通常更高。 在三种主要的基于SPI的存储设备中-(micro)SD卡,DataFlash和更简单的25Cxx系列SPI EEPROM(并24Cxx考虑了微控制器中的内置EEPROM和I2C EEPROM),这是给定用例的合适介质下面?请记住,我将所有介质都用作原始块设备,因此“ SD卡需要文件系统”参数不成立。 用例: 系统配置和校准数据。示例:以太网接口的MAC地址,机载参考电压的测量电压。 日志。示例:从传感器捕获的数据。 代码和代码资源(太大,无法容纳在程序存储器中或必须随身携带。)示例:系统更新,国际化和本地化字符串,用户界面资源,字体。 安全和数字版权管理。示例:加密密钥(公共和/或私有,对称和/或非对称)数字签名。

4
板载SPI通信有哪些设计方面的考虑?
概述: 我正在使用SPI在3个具有dspic33的定制PCB板之间进行通信。我有一个主设备和2个从设备,但是我要向两个从设备发送相同的数据(并让他们选择要注意的内容)。 硬件设置: 这两个从机均内置有BLDC电机控制器,而主机则通过SPI控制这些电机控制器。电线从主机到每个从机大约3英尺,并且插头的通孔SAMTECH插头通常为.1“间距。每个电机控制器都有自己的3.3伏调节器,用于运行dsPIC / LV电子产品。我使用一个电机控制器调节器(让他叫A)也为SPI主DSPIC供电。对于另一个电机控制器(让他叫B),我只运行了SPI线并从主接地,SPI clk的运行频率为100KHz 到达重点(最后): 在没有电动机运行的情况下,所有这些都可以正常工作,所有数据均按预期传递给两个从站。但是,当我启动电动机时,Bslave不再获得正确的数据。他正在拾起多余的时钟或丢掉它们,我想这样做是为了消除多余的噪音。无论如何,他的校验和都会开始失败。无论如何,阿斯拉夫都像冠军。 1)您是否希望所有这些设备都需要使用相同的3.3伏电源?如果是这样,您能说说更长的电感环路和诸如此类的黑魔法吗? 2)对于我期望能够以多快的速度运行SPI clk并成功完成上述硬件设置,您有任何经验法则吗?
8 spi 

2
SPI设备阻止ISP编程
我有一个连接了诺基亚LCD 5510的ATmega8。一切都在面包板上运行良好,而我的下一步是将其移至更永久的板上。我的问题是在连接LCD的情况下无法编程ATmega8。我认为这是因为它们使用相同的SPI引脚,并且LCD某种程度上干扰了编程。我该如何做些不同,以便我可以通过ISP刷新ATmega,而无需断开LCD 的电源?
8 atmega  spi  lcd  isp 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.