This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294KCPDT:我们能否控制 SPI#39;s 时钟的间隔?

Guru**** 2463330 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/656264/tm4c1294kcpdt-could-we-control-the-interval-of-spi-s-clock

器件型号:TM4C1294KCPDT

降级:

我们使用 TI 的 SSI 代码从 SPI 闪存中读取数据、该代码如下图所示:

在我们的读取过程中、我们发现 SPI 的时钟将偶尔更改为更大的时钟间隔。

我们能否控制 SPI 时钟的间隔或避免此问题?

请 请帮助提供一些建议。

非常感谢!

此致

祝你好运

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您选择的函数始终等待成功完成、然后再返回。 在这种情况下,对 SSIDataPut ()的调用会在将数据放入要传输的 FIFO 中时迅速返回。 函数 SSIDataGet ()将等待前一个传输(和接收)完成后再返回。 这意味着在下一个要发送的值装载到 FIFO 中之前会有一个延迟。 有许多方法可以防止发送 FIFO 在最后一个值被发送之前清空。
    1.您可以像现在一样在循环中调用 SSIDataPut(),但可以在中断例程中读取数据,或使用 uDMA。
    2.您可以在外部循环中调用 SSIDataPut (),然后在内部循环中调用 SSIDataGetNonBlocking (),只要它读取数据即可。 您需要跟踪已读取的值数量、因为您将完成"输入"数据、但仍有16个数据片段"获取"。
    3.如果数据量小于缓冲区大小(16个项目),则可以在一个循环中调用 SSIDataPut (),然后在后续循环中调用 SSIDataGet ()。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    @ Bob、

    真正的"灵感!"   因此建议使用“全新”复选框:... (笑声) *** 超级 像 ***。

    供应商代理必须提供多种服务-此处显示的时间/精力记录为" 图表外" 、这很有帮助。   

    工作做得很好-这应该提升为"容易找到"状态、而不是被允许"离开"(从论坛首页) 进入论坛状态...

    (当然-破解人员已"复制/粘贴"您的响应-现在出现"第1页"-我们 的"SPI 外围笔记本电脑"。    (此类积极和及时的行动胜过(后来)搜索... (可能)查找...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:

    感谢您的建议、我们需要再次检查问题并提供更多信息。

    为什么字节和字节之间的宽度存在差异?

    例如、当我们为循环读取1000次时、我们需要宽度相同。

    为什么 A 和 B 的宽度不同、但代码是相同的代码。

    顺便说一下、您能不能帮助提供 DMA 或 其他示例的示例代码? 我们需要对其进行测试。

    非常感谢、请。 请帮助我们!

    BR。

    祝你好运

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我怀疑这种差异与您原始示例的软件循环与 SPI 传输完成的一致程度有关。 您是否能够实施上述建议之一、以使 SSI TX FIFO 保持满状态、直到数据传输结束?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:
    我们想尝试测试、您能不能帮助提供 DMA 的示例代码或其他示例?
    非常感谢!

    BR。
    祝你好运
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    祝你好运、

    您是否处于 SPO=1和 SPH=0模式?

    您是否具有 FSS (芯片选择)引脚的示波器电容?

    我之所以要求您的 SPI 模式和 FSS 引脚的示波器电容、是因为根据设计、FSS 在空闲周期甚至在连续传输期间都将变为高电平。 捕获中较宽的 SPICLK 表示 SPI 处于空闲状态。 请参阅以下数据表注释。  

    在单个字传输的情况下、在数据字的所有位被传输后、即 SSInFss

    在最后一位被捕获后的一个 SSInClk 周期内、线路被返回到其空闲高电平状态。

    但是、在连续背靠背传输的情况下、SSInFss 信号必须是脉冲信号

    因为从器件选择引脚会冻结其串行数据、所以每个数据字传输之间的数据为高电平

    外设寄存器、如果 SPH 位清零、则不允许对其进行更改。 因此、主器件

    器件必须在每次数据传输之间将从器件的 SSInFss 引脚拉高、以启用

    串行外设数据写入。 连续传输完成后、返回 SSInFss 管脚

    在最后一位被捕获后的一个 SSInClk 周期内进入空闲状态。