公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager
100 likes received

亲爱的各位

我使用带有 nano 库的 DAVE ide v4,调用 SPI-MASTER-EnableSlaveSelectSignal() 和 SPI-MASTER-DisableSlaveSelectSignal() 函数无法升高或降低 SPI 的 CS 引脚。不过,在通过 SPI 发送数据时,使用示波器检查 SCL 和 MOSI 引脚的状态时,它们会产生正常的波形,但 CS 引脚仍处于高电平状态。

将 CS 引脚配置为 IO 端口,手动上拉或下拉 CS 引脚,但使用 TBUF 寄存器中的 "BUSY "标志来完成发送。 拉高 CS 引脚时,会出现仍有一个字节未发送,但 CS 引脚已被拉高的情况。

调用生成的两个 API 函数无法控制 CS 引脚状态的原因可能是什么;如何避免在仍有一个字节的数据未发送时手动升高或降低 CS 引脚?

谢谢。

XMC4500-E144F1024 AC#

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/The-CS-of-SPI-in-XMC4500-cannot-be-lowered/td-p/742241

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager
100 likes received

嗨,@yh_

如果通信帧长。 如果 FLE< 64,则第一个数据位自动生成 CS 信号,并在最后一个数据位(包括延迟 Tld)结束时停用。 如果 FLE = 64,则用户应通过 TCSR.SOF/EOF 位提供数据帧的开始/结束信息,以创建所需的 CS 信号长度。

因此,请设置帧长度<= 63,这样就能满足您的要求。

另一个传输问题是缺少 1 个字节。

在发送后添加以下代码。

while(SPI_MASTER_IsTxBusy(&SPI_MASTER_0))
{
}
 
希望这会有所帮助,如果您还有其他疑问,请告诉我。
 
最好的问候
Pradeep。

 

 

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/The-CS-of-SPI-in-XMC4500-cannot-be-lowered/m-p/742461

在原帖中查看解决方案

0 点赞
5 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager
100 likes received

嗨,@yh_

如果通信帧长。 如果 FLE< 64,则第一个数据位自动生成 CS 信号,并在最后一个数据位(包括延迟 Tld)结束时停用。 如果 FLE = 64,则用户应通过 TCSR.SOF/EOF 位提供数据帧的开始/结束信息,以创建所需的 CS 信号长度。

因此,请设置帧长度<= 63,这样就能满足您的要求。

另一个传输问题是缺少 1 个字节。

在发送后添加以下代码。

while(SPI_MASTER_IsTxBusy(&SPI_MASTER_0))
{
}
 
希望这会有所帮助,如果您还有其他疑问,请告诉我。
 
最好的问候
Pradeep。

 

 

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/The-CS-of-SPI-in-XMC4500-cannot-be-lowered/m-p/742461

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager
100 likes received

非常感谢您的答复。 它对我非常有用。

目前,我已为发送和接收数据设置了先进先出(FIFO),使用您建议的

while (SPI-MASTER-IsTxBusy (&SPI-MASTER-0))
{
}

在阻塞并拉起 CS 引脚后,仍然会出现只有在拉起该引脚后才能发送最后一个字节数据的情况。 哪些标志位可以区分 FIFO 中的数据是否已发送或 FIFO 中的数据是否为空?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/The-CS-of-SPI-in-XMC4500-cannot-be-lowered/m-p/743082

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager
100 likes received

嗨,@yh_

您可以使用以下 API 获取 Tx FIFO 的信息。

XMC_USIC_CH_TXFIFO_GetLevel() :获取发送 FIFO 的填充级别。


每向 FIFO 写入一个字,就会更新填充级别。API 会给出填充水平的值。

XMC_USIC_CH_TXFIFO_IsEmpty() :检查发送 FIFO 是否为空。

当发送 FIFO 为空时,可将数据写入 FIFO。 当最后一个写入发送 FIFO 的字从 FIFO 传送出去时,FIFO 空标志置位。

XMC_USIC_CH_TXFIFO_IsFull() :检查发送 FIFO 是否已满。

当发送 FIFO 填充水平达到配置大小时,FIFO 满标志被置位。 当发送 FIFO 已满时,用户不应写入 FIFO

在应用程序接口的定义中,你可以找到相关的寄存器。

希望这会有所帮助,如果您还有其他疑问,请告诉我。

最好的问候
Pradeep。

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager
100 likes received

使用 IO 端口取代 SPI 的 CS 引脚功能,在未配置 SPI 的 CS 引脚的情况下,软件会在报告窗口中自动选择另一个引脚作为 CS 引脚,导致使用额外引脚造成硬件资源浪费。 有什么办法可以避免这种情况吗?

谢谢。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/The-CS-of-SPI-in-XMC4500-cannot-be-lowered/m-p/743610

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager
100 likes received

嗨,@yh_

目前,我可以建议你在生成的代码中删除 GPIO 的初始化,作为一种变通办法。

我没有看到任何避免这种情况的选项。

最好的问候
Pradeep。

0 点赞