【咨询】硬件SPI发送字节与字节之间间隙是多少?
最近在要使用一个类似WS2812通讯方式的数码管驱动芯片,最后选择了DMA+SPI模拟驱动芯片时序的方式与芯片通讯。目前通讯已经通了,芯片可以正常使用。但是有几个疑问,,对于STC的硬件SPI在发送数据的时候,字节与字节之间有一个间隙使用了DMA之后 处于纳秒级别。且相同配置下,大小固定。
1. 这个间隙与什么有关?
2. 一般是多少?
3. 能否通过SPI的配置缩小,或者去掉(仅配置SPI的情况下)?
看过论坛里几篇关于WS2812的帖子,,里面都说了在字节传送时存在一个间隙,,也给出了各种解决方案。我这里想知道这个间隙大概应该怎么计算。
先研究下这个贴,如没讲清楚,跟贴跟梁工讨论
SPI DMA 输出控制WS2812三基色彩灯程序,不加反相器,STC8/STC32 - SPI/I2S/I2C,DMA支持的3组SPI和I2C,一线制温湿度传感器 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
神农鼎 发表于 2024-4-20 19:49
先研究下这个贴,如没讲清楚,跟贴跟梁工讨论
帖子看过了,,功能都已经实现了,,现在在想了解一些机制性的东西,
我去问问把,, WS2812对这个间隙要求不严格,我也没定性测试,后续我会测试一下。 梁工 发表于 2024-4-20 23:50
WS2812对这个间隙要求不严格,我也没定性测试,后续我会测试一下。
不是不是 您理解错了 ,,我不是在问WS2812的事情,,我问的是关于单片机SPI的间隙.
我觉得这个东西不应该你们芯片厂家在设计芯片的时候,就应该确定的么,或者说官方应该是要知道这部分参数的啊.
实际的测试参数我都已经测试完了,,就是没有找到对应的文献来验证我的测试,, 本帖最后由 梁工 于 2024-4-21 16:41 编辑
_奶咖君_ 发表于 2024-4-21 15:38
不是不是 您理解错了 ,,我不是在问WS2812的事情,,我问的是关于单片机SPI的间隙.
我觉得这个东西不应该你 ...
我没有理解错,我是说,由于WS2812对于间隔时间没有严格要求,小于RES时间50us都可以,所以没有严格测试DMA发送时字节键间隔,通常都是几十ns级别。
DMA SPI发送间隔是由硬件处理的,不可设置。当SPI发送完成,则下一个时钟就会启动下一个字节传送。但由于内部需要时钟同步,所以有一个或几个时钟的间隔是正常的,但我并未严格测试这个间隔时间,因为对于我的所有应用,都不会造成干扰,并且间隔时间也不可设置。 你调整一下 SPI的频率看下? 关于STC的SPI以前测试过。普通模式发送一字节,到下一个字节需要等待很长时间。
SPI DMA模式开启FIFO。CLK间隔时间更短,最短1.5T ,就是1.5个SPI时钟节拍。void DMA_Config(void)
{
DMA_SPI_STA = 0x00;
DMA_SPI_CFG = 0xE0; //bit7 1:Enable Interrupt
DMA_SPI_AMT = 0xff; //设置传输总字节数:n+1
DMA_SPI_TXAH = (u8)((u16)&DmaTxBuffer >> 8); //SPI发送数据存储地址
DMA_SPI_TXAL = (u8)((u16)&DmaTxBuffer);
DMA_SPI_RXAH = (u8)((u16)&DmaRxBuffer >> 8); //SPI接收数据存储地址
DMA_SPI_RXAL = (u8)((u16)&DmaRxBuffer);
DMA_SPI_CFG2 = 0x01; //01:P2.2
DMA_SPI_CR = 0x80; //bit7 1:使能 SPI_DMA, bit6 1:开始 SPI_DMA 主机模式, bit0 1:清除 SPI_DMA FIFO
HSSPI_CFG = 0x00;//高速模式时SS 控制信号的HOLD 和SETUP 时间设置0,CLK最小间隔1.5T
HSSPI_CFG2 = 0x00; //高速模式时SS 控制信号的DEACTIVE 时间设置0,CLK最小间隔1.5T
HSSPI_CFG2 |= 1<<5; //使能SPI高速模式
}
字节之间的间隔一般都不影响使用吧 小飞侠 发表于 2024-4-22 07:35
字节之间的间隔一般都不影响使用吧
是的一般来说不影响,
但是毕竟是有关时序的东西,了解清楚比一直糊里糊涂的用要好。