TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1310: SPI master 操作过程中, 每传送 8拍时钟, 间隔2拍以后, 再传送 下一组 8拍时钟 (它们 共享 一个 CSn 低脉冲)

Part Number:CC1310

直接调用 CC1310 的 SPI 函数库(也将 minDmaTransferSize 修改为 1 了), 如果 一次写 5个字节, 示波器显示, 在一个 CSn 为低电平的 状态下, 会有 8*5个 连续的 时钟脉冲 ( 它们 没有间隔,SPI 效率更好)
但是,我们 当前的一个 实际电路, 有一个 元器件,  当 CC1310 使用 SPI 向它 写 5个 字节 过程中,  需要 每8拍 时钟,  都要间隔 至少2拍,  然后再 传送 下一组 8拍 时钟。
请问一下, 修改 CC1310 的 SDK 哪个文件的 哪个地方, 可以实现 这个 增加 间隔的  功能?—— 实现以后的 示波器 波形, 大致 类似 下面的 图片。
备注:前面 也请教过 其它 类似的 修改: minDmaTransferSize 默认是 10, 修改为1了, 则 一个 CSn 为低电平, 可以连续 送出 8*N 个 时钟脉冲。 主要是 请教 在 哪个文件 哪个位置 哪个 变量 做 修改。谢谢啊 !

Cherry Zhou:

您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

,

user3985772:

补充一下  CC1310 默认 SPI 的 波形图。它的 时钟信号,是 连续的,没有 间隔。

,

Cherry Zhou:

好的哈,我们收到了,一起反馈给工程师看下。

,

Cherry Zhou:

您好,

可以通过使用 GPIO 手动控制 CS 引脚并使用单独的 SPI_transfer 一次发送一个字节来实现。 使用此方法,您无需修改 SDK 中的 SPI 驱动程序代码。

在 CC1310_LAUNCHXL.c 内的 SPI 驱动器中未分配 CSn 引脚如下:

const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC1310_LAUNCHXL_SPICOUNT] = {{.baseAddr= SSI0_BASE,.intNum= INT_SSI0_COMB,.intPriority= ~0,.swiPriority= 0,.powerMngrId= PowerCC26XX_PERIPH_SSI0,.defaultTxBufValue= 0xFF,.rxChannelBitMask= 1<<UDMA_CHAN_SSI0_RX,.txChannelBitMask= 1<<UDMA_CHAN_SSI0_TX,.mosiPin= CC1310_LAUNCHXL_SPI0_MOSI,.misoPin= CC1310_LAUNCHXL_SPI0_MISO,.clkPin= CC1310_LAUNCHXL_SPI0_CLK,.csnPin= PIN_UNASSIGNED, // <- csn pin controlled by software.minDmaTransferSize = 10},

工程师在 spimaster 示例中尝试了以下代码: 

/* Initialize master SPI transaction structure */txChar = masterTxBuffer[0];transaction.count = 1;transaction.txBuf = (void *) &txChar;transaction.rxBuf = (void *) masterRxBuffer;// deassert CS pinGPIO_write(Board_SPI_MASTER_CSn, 0);for (i = 0; i < SPI_MSG_LENGTH; i++){txChar = masterTxBuffer[i];transferOK = SPI_transfer(masterSpi, &transaction);if (!transferOK) {while(1){};}}// assert CS pinGPIO_write(Board_SPI_MASTER_CSn, 1);

并在逻辑分析仪上获得以下事务: 

每个字节事务之间的间隔最终介于11和12us 之间。 在不修改 SPI 驱动程序代码的情况下、很难实现更严格的字节间间隔。

您请参考以上答复。

,

user3985772:

每个字节 8-bit 的 间隔有 11~12us, 太慢了。 我们的实际电路,对于 SPI 需要使用 4M 那种速率。

请问一下, “SDK 中的 SPI 驱动程序代码”,对应的 文件名字,可否帮忙 告诉我一下? 谢谢啊!

,

Cherry Zhou:

我们跟进给工程师看看。

,

Cherry Zhou:

您好,

CC1310的 SPI 驱动程序代码位于<sdk>/source/ti/drivers/SPI.h 和 SPI.c 中。特定于器件的代码位于<sdk>/source/ti/drivers/spi/SPICC26XX.h 和 SPICC26XX.c 中。 如果您想要进行更low-level的操作,那么就必须修改 driverlib 中的 SSI 模块,该驱动程序位于<sdk>/source/ti/devices/cc13x0/driverlib/ssi.h 和 ssi.c 。

,

user3985772:

上图中, 将 SPI 配置为 DMA 模式, 配置时钟 8M, 配置 SPI_POL0_PHA0,  示波器 显示 两组 8-bit 间隔 256ns(大致 2拍 8M 时钟)请问一下, 修改哪个 参数, 可以让 上面的 间隔  扩大为 4拍 8M 时钟 ?

如果 不使用 DMA 模式,  间隔 是 1.38us (大致 11拍 8M 时钟),  还是 比较大。  我需要 8-bit  间隔 4拍 8M 时钟。  谢谢啊!

备注:上面的波形图, 是参照着 spimaster 的尝试代码, 使用一个 IO 产生 CSn 信号。 对于 SPI 的配置 如下:    spiParams.transferMode = SPI_MODE_BLOCKING; //   spiParams.dataSize = 8; // 8-bit data size   spiParams.mode = SPI_MASTER; //SPI MASTER   spiParams.frameFormat = SPI_POL0_PHA0;   spiParams.bitRate = 8000000;

,

Cherry Zhou:

好的我们反馈给工程师看下。

,

Cherry Zhou:

您好,

在 DMA 模式下设置传输时,一旦事务开始,驱动程序将不会干扰 SPI 模块。DMA 硬件模块将自动在 SPI TX FIFO 中加载字节,并且 SPI IP 将会以允许的尽快的速度传输数据。但SPI 模块没有参数或硬件配置可让您选择连续字节之间的时间间隔(在 SSI 模块的 TRM 中找不到与此相关的任何设置)。上次 POST 的记录时间间隔源自一个字节和下一个字节之间的代码执行时间。因此我们的器件并不支持您的用例。您必须使用~2个时钟周期(DMA 事务)、~11个时钟周期(非 DMA 事务)或实施缩减版本的 SPI 驱动器,以便能够进行更精确的计时控制。

赞(0)
未经允许不得转载:TI中文支持网 » CC1310: SPI master 操作过程中, 每传送 8拍时钟, 间隔2拍以后, 再传送 下一组 8拍时钟 (它们 共享 一个 CSn 低脉冲)
分享到: 更多 (0)