完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
SPI主控组件不能正常工作。
如果我在设计一个SPI主成分,正确连接到一些I/O引脚和尝试发送数据到数组,即使该数组的大小很适合定义的缓冲区,然后SPI组件滴每个字节输出之间的SS线。 我相信这是一个错误的组件的实现。 学生不应该把bewteenbytes,这个信号传输到奴隶的结束。 这使得它不可能连续写入或读取从站设备。 我可以看到两种可能的工作方式: 1。手动控制SS的I/O引脚,但这一直是次优的,有些设备可能不喜欢的时间。 2。手动禁用或重新启用txinterrupt -但我不认为这将工作,如果使用一个缓冲区大于4字节,然后spim_writetxdata()方法强行重新使能中断了。而SPimelPtRayALE()调用SPIMGWruteXDATA()。 因此,SPI主控不打算除非你手动控制的SS线工作。这样做,你需要添加一个“或”门和一个额外的输出引脚(没有硬件连接)或控制登记您的设计。 看着生成的源代码,我相信我可以看到发生了什么… 当你使用spim_putarray()写numebr字节在SPI,它要求spim_writetxdata()反过来使TX中断。TX中断火灾和传输字节的SPI主。然后看是否有更多的数据在缓冲区中,如果不是,那么它释放SS线。这一切发生的时候,spim_putarray()仍试图写入数据的缓冲区,但发生得如此之快,超过了putarray环和SS线获取数据仍然被添加到输出缓冲区释放。 就不叫spim_txwritedata直到缓冲区已满。如果数组是大放入缓冲区,然后尽可能要复制,然后溢出错误点应设置和一个错误的结果,返回(或者像POSIX写)的实际字节数添加到缓冲区应该归还。只有当spim_putarray()完成添加到缓冲应该TX中断启用。 当做, 肯尼。 |
|
相关推荐
10个回答
|
|
|
|
|
|
另一个解决办法是导出SPI时钟频率。这增加了在SPI上写入数据所需的时间,从而给ISR更多的时间来重新填充TX缓冲器。
我认为SPI主数据表的下一个版本将说明这是一个已知的问题(并且没有真正的解决方案)。 |
|
|
|
嗨,鲍伯 抱歉回复的电子邮件通知,只有到了今天早上的延迟。 是的,我将用一些演示代码创建一个MyCase. |
|
|
|
lxhzx 发表于 2019-9-11 16:36 谢谢你 我认为一个好的解决办法是有一个非阻塞的SpimthRealErrar(…)方法,返回实际添加到缓冲区的字节数,直到它返回之前才启动TX中断。然后用户可以对TX状态寄存器进行轮询,以查看最后一个字节是何时被传输的。 |
|
|
|
有人有简单的SPI主机Meal.C代码,其中CyPress KyCy8CKIT-042-BLE将一个字节发送到加速计并接收一个字节吗?在SPI.C代码中有很多功能,我不知道要使用哪些代码。到目前为止,我有:
项目包括: In主(){CyGloalAlctuable;/*启用全局中断。*/ /*将您的初始化/启动代码放在这里(例如MyStRestSistar())*/SPIMYSTATE();为(;;){/*将您的应用程序代码放在这里。*/SPimuWruteXDATA(0xF1U);SpimuWruteXDATA(0xF1U); SPimtWruteXDATA(0xF1U);} 在调试器中,我将断点放置在第三写入上,因此将有两个写入,第一个写入地址/读请求到从属,第二个写入从从属器实际接收请求的寄存器内容。第一次写入也会迫使奴隶把它的传输寄存器空出来,不管它以前有什么,对不对? 我不需要一个循环来知道主RX寄存器何时满了吗? 其他功能是否丢失、启用等? 在这部分中,你使用内部时钟还是外部时钟?在原理图中,我将时钟连接到SPI主机。 只是试图读取/写入加速度计,现在通过USB电缆连接到PC的工具包。 谢谢您! |
|
|
|
对于通过SPI发送的每一位(字节),接收一位(BATE)。
SPIMGWORTETXDATA(0xF1U);在发送字节之前返回,有一个发送缓冲区(和一个接收缓冲区)。只有当TX缓冲器满时,写入功能才会等待。 因此,你将不得不等待一个完整的传输之前,您将收到您的数据。 根据您使用的SPI类型(SCB或基于UDB),有一些功能来检查接收缓冲区中有多少字节。 “第一次写入也会迫使奴隶把它的传输寄存器空出来,不管以前有什么,对吗?”不完全是这样。 您必须使用适当的API清除输入缓冲区。当最后一个字节被传输时,输出缓冲区将被清空。 鲍勃 |
|
|
|
ncmza 发表于 2019-9-11 17:28 嗨,鲍伯, 我的SPI接口也不工作。我试图连接一个CYBLY-022001到一个MCP3551 ADC使用SCB配置为SPI主机。 我没有得到适当的沟通,当我测量SS引脚它从来没有被断言低, 我已经附加了一个工作空间档案馆……请你看看我的错误所在,并提供一些建议。 (;) { SpIsS00My写(0); 而(SpmithMISOOMMRead()){ SpIsS00My写(0); } SPISPIPARTWRITETXDATA(0x00); CyDelayUs(1); SPISPIPARTWRITETXDATA(0x00); CyDelayUs(1); SPISPIPARTWRITETXDATA(0x00); CydelayUS(01); C.AB〔2〕=SPIXSPIUARTRADRXDATA(); C.AB〔1〕=SPIXSPIUARTRADRXDATA(); C.AB〔0〕=SPIXSPIUARTRADRXDATA(); C.AB〔3〕=0x00; SpIsS00My写(1); SPIX SPIUART CURLRXBUFER(); SAMPLF(缓冲器,“回复:-%D”,C.值); UARTHUARUTPARTHORT(缓冲器); UARTHUUART字符串(“rn”); (棘螺); CyTeles(1000); } |
|
|
|
swanegong 发表于 2019-9-11 17:45 附属的 WorkStudio07.CyWrk.CaseV01.Zip 1.6兆字节 |
|
|
|
嗨,鲍伯, 我更新完了,我还没有这个…阅读SPI请看… 迈克 WorkStudio07.CyWrk.CaseV02.Zip 1.6兆字节 |
|
|
|
lxhzx 发表于 2019-9-11 16:36 Tep。这对我起了作用。可惜这个“特性”在手册中没有明确说明… |
|
|
|
只有小组成员才能发言,加入小组>>
752个成员聚集在这个小组
加入小组2075 浏览 1 评论
1829 浏览 1 评论
3643 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1766 浏览 6 评论
1517 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
515浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
366浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
413浏览 2评论
360浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
867浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 18:31 , Processed in 1.261565 second(s), Total 95, Slave 78 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号