发 帖  
原厂入驻New
[问答] 能够在单个SPI接口上运行两个SPI设备吗?
391 SPI 微控制器
分享
当这两个设备具有不同的微控制器初始化变量(如不同模式和时钟边缘要求)时,我能够在单个SPI接口上运行两个SPI设备吗?每次需要从每个设备读取或写入总线时,是否需要重新初始化微控制器?还是有另一种方式,提前感谢
0
2019-10-11 13:44:16   评论 分享淘帖 邀请回答

相关问题

9个回答
两个设备,如在两个奴隶中,除了你的主人,每个奴隶配置不同(例如波特率)?还是这两个设备,奴隶和主人?SPI是一个16位的移位登记分为两个8位的移位寄存器,每一个8位的移位寄存器在一个单独的芯片,和寄存器进对方,因共同的时钟(SCLK)。每个时钟改变从主到从1位移动,从主机移动。它需要8个时钟周期(以8位SPI)将所有的数据。如果你想从中获取数据,你可以发送数据表明一个请求(如0xfe是请求),下位机读取,然后把数据要求其登记,然后师父就发送一个虚拟的写(如0x00),和T他在奴隶登记册中的8位现在在你的主人手里。你不需要交换谁是主人…如果你问的是这个意思。当你品尝你的SDI是你的,它不会影响系统外,它就在你的(潜在的)影响Spix缓冲是什么模式并不重要,因为他们应该出现相同的从外面。你总是受到最慢的时钟的限制。如果一个来源不能坚持特定的上升或下降时间,你将有一个不好的时间。将它们设置为相同的。我设想可以与具有不同SPI设置的两个不同IC通信,但是您必须有一些花哨的从机选择,并在通信之前更改SPI模块配置。
2019-10-11 13:50:05 评论

举报

目前还不清楚你所说的“不同的微控制器初始化变量,如不同的模式和时钟边沿要求”,我建议你为每个从设备张贴你的初始化代码,这样我们就能准确地看到不同的东西。如果只有SPI模式是不同的(CKE和CKP位),那么您应该能够在每次将从属选择引脚激活到激活状态(通常为低)之前立即改变它们。
2019-10-11 14:04:40 评论

举报

如果您的SPI模块需要不同的初始化,那么您需要禁用它,初始化,然后再次重新启用。通常,你会使用SS线来激活/去激活特定的设备。
2019-10-11 14:12:21 评论

举报

如果你有两个SPI奴隶,每个奴隶都有自己的芯片选择,那么是的,你可以对两者进行对话。但是,是的,在与每个会话之前,您必须重新配置SPI端口。(不是整个微观)
2019-10-11 14:25:56 评论

举报

你总是被最慢的钟所限制。如果一个来源不能坚持特定的上升或下降时间,你将有一个不好的时间。将它们设置为相同。甚至可以在单个SPI设备中发生:通过SPI操作的SD卡,需要非常慢的初始化时钟。一旦做到这一点,你可以切换到(多)更高的速度。我使用开关速度,甚至与EEPROM通信。以全速写入和读取,检查“正在写入”状态,速度非常慢,以便在2或3字节时间内清除WIP……通过这种方式,我可以在中断中运行通信,并且不用花费WIP等待时间,一半是被SPI中断填充,一次又一次地做同样的事情,(哦,它还没有准备好,重试…)哦,是的,这是可行的,用示波器验证计时,所以功能是合理的,功能也是有效的……
2019-10-11 14:39:14 评论

举报

一般来说,即使在不同的时钟速度和不同的模式下,也可以在同一个SPI总线上拥有两个或更多不同的奴隶。原因在于,从选择输入是一个异步重置,它重置了从机的逻辑,如果它处于非活动状态,则阻止从机对任何东西做出响应。您不需要确保时钟对于从设备来说足够慢或者将其降低到最慢的时钟速度,状态机被保持在重置状态。如果模式和/或时钟不同,则需要在每个设备访问之间重新配置SPI外围设备。
2019-10-11 14:46:37 评论

举报

嗨,这似乎是我的问题的正确线索:我正在使用PIC32MZ2048ECM144(我正在使用Harmony 1.07.01),并且我有一个SD卡和一个GPIO(两个从机)共享的SPI,具有以下特征:-GPIOspiClk=CLK_BUS_PERIPHERAL_2,GPIOSpeedHz=2MHz,chipSelectPort=PORT_CHANNEL_H,chipSelectBit.=PORTS_BIT_POS_2,SPI_CLOCK_极性极化_ID高,SPI_输出数据_相_上_相_上_上_上_IDLE_上_IDLE_到_活动_时钟;SDcardscardspiClk=CLK_BUS_PERIPHERAL_2,sdcardSpedSpeedHz=20MHz,chipSelect端口=PORT_CHANNNNPON_D D 2,SPpSelect_CLOCK_CLOCCLOCKCPCPCPCPCPCPCPCPpiClk=CLCLCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPCPIDLE_LOW,SPI_OUTPUT_DATA_Phase_ON_active_TO_IDLE_CLOCK,(CLK_BUS_PERIPHERAL_2=60MHz)这个共享SPI给我带来了问题:当我在SD卡上读/写文件时,文件系统服务有时返回低级故障(SYS_ERROR=1)。我尝试使用RTOS旗语来独占使用SPI,但没有成功。如果在所有文件使用期间(从打开SD卡到关闭SD卡上的文件)没有访问GPIO,问题就消失了。对SD卡的访问是通过使用其驱动程序完成的(在MHC中,SPI默认参数是SD卡的参数),而对于GPIO访问,我必须改变速度和模式。我使用缓冲事件处理程序,如Harmony Help(Delay10us()函数是Nops的校准周期,如果我擦除该延迟,则什么也做不了):void_DRV_GPIO_SpiBufferEventHandler(DRV_SPI_BUFFER_EVENT事件,DRV_SPI_BUFFER_HANDLE缓冲处理程序,void*context){DRV_GPIO_INIT*dObj;如果(上下文=null)返回;dObj=(DrviGPIOIONIIT *)上下文;如果(缓冲句柄!=dObj->drvSPSPIBIBIBIBIB_POLARITY_POLARITY_IDID_IDLE_IDLE_IDID_IDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDIDLEHIHIHIGH_HIGH_HIGH_HIGH_SPI_SPI_SPI_CLCLOCK_CLOCOCOCOCK_POLARITY_POLARITY_IDLE IDLE_HIGH_HIGH)返回;开关(事件){(事件){案例DRV_DRV_SPI_SPI_SPI_SPI_SPI_SPI_BUBUBUBUBUBUBUBUFF_BUFFER_BUFFFFFFER_EEEVEVEVEVE_EEVEVEVEspiId,SPI_OUTPUT_DATA_PHASE_ON_IDLDelay10us(1);/*选择芯片*/PLIB_PORTS_PORTS_PinClea清除(PORTS_ID_0,dObj->chip Select端口,dObj->chipSelectBitPortPort,dObj->chipSelectBitSelectBitBitBit位置;break;}}case DRV_SPI_BUFFI_BUFFER_EVENT_COMPLVENT_COMPLPLPLNT_COMPLPLPLPLNT_COMPLNT_COMPLNT_COMPLPLNT_COMPLNT_COMPLNT_COMPLPLPLNT_COMPLNT_COMPLPLPLNT_COMPLPLPLPLNT_COMPLNT_COMPL_PinSet(PORTS_ID_0,dObj->dObj->chipSelectBipBit.);//重新设置DRV_SPI_SPI_CLOCI_CLCLOCK_CLCLOC_CLOCK_CLCLOCK_CLCLOCK_CLOC_MO_MO_MO_MD_CLOCK_CLOCI->chipSelectBipObj->chipSelectBipSelectBipSelectBipSelectBiBiBiBiBiBiBit位置);//重新设置DRV_DRV_SPI_SPI_SPI_SPI_CLCLCLCLCLCLOCK_CLOCK_CLOCK_CLOCK_CLOCK_CLOCK_CLOCK_MO_CLCLOCK_MODE_MODE_CLCLCLCLCLCLCLCLIDLE_CLOCK;Delay10us(1);break;}}}你有什么暗示吗?我做错了什么?提前感谢。
2019-10-11 14:52:20 评论

举报

劫持线程肯定不是提出问题的正确位置。请启动自己的线程并提供必要的信息。苏珊
2019-10-11 15:04:10 评论

举报

理论上是可以,前提是确保所有设备的spi协议配置一样,像波率率之类的,clk闲时电平状态之类的要配置一样,  每个设备有片选信号的话,可以通过片选信号区分控制不同设备,有片选信号的就建议最好用上,可靠性高
2019-10-12 15:42:56 评论

举报

只有小组成员才能发言,加入小组>>

65个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表