完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我正在尝试用SPI总线在我的微控制器PIC33EP512MC504和角度传感器之间建立通信。SPI数据传输序列描述如下(见附图):初始配置(i)-将CHIP_SELECT设置为0(i i)-发送命令字(16位)(i i i)-等待130ns(i i i i)-读取第一数据(16位)-读取第二数据(16位)…(i i i i)-读取安全字(i i i i i)-将CHIP_SELECT设置为1返回步骤(i)如何确保以正确的到达顺序读取正确的数据?我是否需要为SPI块中的每个消息添加一个动作“只读”,我是否需要在每个动作“只读”之间添加一个动作“延迟”?我附上了SPI块的屏幕截图,谢谢你的关注,问候。
|
|
相关推荐
7个回答
|
|
|
嗨,Mark,关于SPI块的信息很少:SPI块产生一个在后台运行的状态机(除了使CPU等待那个延迟的延迟动作),由SPI中断驱动。这使得实现非常高效,因为它释放CPU负载用于其他任务。副作用是SPI块将输出在前一个时间步骤中读取的值(有一个采样延迟)。如果一个采样延迟有问题,您总是可以选择“阻塞模式”选项。在大多数情况下,该示例延迟值与后台实现提供的CPU空闲时间相当。在任何情况下,尽可能避免长延迟操作,因为它们消耗CPU负载。单词长度在面板SPI总线参数中设置。SPI序列中的Size参数是您想要发送/接收的数量(字节/字)。序列建议:您可以在序列末尾将端口C1(芯片选择)设置为1,从而消除8us的第一个延迟。只有当SPI事务发生时,才应该选择芯片。有一个很好的机会,连续块执行将分开一个时间步长,通常超过8US。关于到达顺序和延迟:您可以使用长度为X的一个Read操作,也可以使用长度为1的几个Read操作,到达顺序是正确的,生成的代码同样有效。每个Read操作将创建一个新的块输出:当X>1时为Vector,否则为scalar。数据表图,命令和第一次读取之间需要延迟(从数据表中的TWRY延迟)。数据读取之间不需要延迟。如果读取长序列(>16),那么激活DMA实现选项可能值得。否则,默认使用的内部FIFO是大的,以获得有效的结果。鲁宾
|
|
|
|
|
|
嗨,鲁宾,谢谢你的答复,我回来的时候还有几个问题要问:-有没有适当的方法确保第一个“只读”动作和从机发送的“Twr_.”之后的第一个比特之间的同步?-我是否正确地理解了SPI块:SPI块采样时间意味着在每个采样时间,Read动作输出被更新,这意味着如果在两个连续的采样时间步骤(非确定性数据传输)中接收到新数据,则数据可能丢失。
|
|
|
|
|
|
嗨,贾景晖,SPI块将DSPIC定义为SPI事务的主控器。所附组件是SPI从属件。这个从设备将只在芯片选择处于活动状态(通常很低)时发送数据,并且MASTER生成一个时钟信号。在您的示例中,SPI MASTER dsPIC向SLAVE发送一个值(只写操作),等待Twr_.(阻塞CPU!)然后生成一个时钟,在这个时钟期间,SLAVE应该用它对MASTER的响应填充SDI。这是一个典型的情况,其中dsPic要求组件开始转换,等待转换完成并读取结果。避免Twr_delay是为了:Enalbe CSread转换结果从先前的块执行开始,为下一个块执行启动新的转换。禁用CS第一值应该被取消,因为它是不正确的(没有完成转换)。SPI块接收的数据没有丢失:每次评估(执行)该块时执行一次SPI序列。用定义的采样时间评估该块(值-1表示继承采样时间)。在每个评估:1)块输出在前一步骤(s.2)期间接收的“在后台”的值。触发器启动将在后台执行的新的SPI序列,如果有的话,使用新的块输入值。有一点很重要:在一个模型中,可以使用相同的SPI外围设备添加具有相似或不同采样率的多个SPI块。SPI序列将以相同的顺序在后台执行,它们是由这些块触发的。请看一下为SPI和I2C提供的例子(I2C以类似的方式工作)。鲁宾
|
|
|
|
|
|
你好,鲁宾,谢谢你的回答。我仍然有麻烦阅读角度传感器的信息。我使用示波器(见附带的屏幕截图)来可视化我的信号,我有以下行为:-芯片选择正确地设置为0,使微控制器和角度传感器能够通信。-通过SCK+命令字时钟通过SDO正确地由微控制器(主机)-Twr_d生成elayis尊重-然后我能够从物理上看到来自微控制器的时钟信号和角度传感器的16位响应,但是电压电平太低,微控制器无法检测到。我正在处理一种特殊情况,其中SDO(主发送从接收)和SDI(M)aster Receive Slave Transmit)是物理连接在一起的(2线SPI变成3线SPI),见附图。我的问题是:当我在SPI块GUI中取消选择“启用SDO”时,微控制器如何反应?在执行“只读操作”时,是否有可能保持“SDO启用”会导致信号冲突?再一次感谢你的帮助,问候,贾景晖A
|
|
|
|
|
|
你好,马克,谢谢你把SDO和SDI线合并在一起。我还没有遇到过这样的情况。在保持“SDO启用”的情况下,有一个很高的机会,而只执行动作,导致SDI和SDO线合并成一条线的情况下的信号冲突。认为即使在读取序列中禁用SDO行也是可能的,块集将定义SDO行作为输出。让我检查一下这种行为可能的更新。亲切的问候,鲁宾。
|
|
|
|
|
|
谢谢你的反应。期待更新。问候,贾景晖。
|
|
|
|
|
|
v3.39块集发行版的补丁启用了“SSC”或3线SPI通信,SDI和SDO信号合并为单线。SETHIPP//www. McCHIP.COM/FUMRS/FUNDSPED/900761
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1123浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 01:36 , Processed in 1.005964 second(s), Total 54, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
378