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.

[参考译文] IWR6843:发送雷达数据输出时的 SPI 事务写入

Guru**** 2445030 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/858390/iwr6843-spi-transaction-write-when-sending-the-radar-data-output

器件型号:IWR6843

尊敬的 TI: 

问题:我尝试发送使能 SPI 通信、以将来自 IWR6843 SPI 从设备(在 MMWICBoost 板内)的消息发送到用作 SPI 主设备的外部微控制器。 这是我的代码片段,以及调用 SPI_TRANSF()时发生的错误的堆栈转储。

SPI 初始测试(不带雷达):我已在 mibspi_dma.c 中启用#define SPI_MULT_ICOUNT_support、并在计划通过 SPI 线路发送更多数据时重新编译毫米波 SPI 驱动器。 我尝试发送虚拟消息、如0、1、2、3 ... 它在2个 SPI 事务中发送的256 uint16_t 字上运行良好。

SPI 实际测试(使用雷达): 然后,我开始运行 IWR6843 DSS 以从常规演示中获取线性调频脉冲数据输出,然后在返回 MmwDemo_mboxReadTask()时,它首先通过 UART 发送数据,然后我再通过 SPI 通道发送数据。 这是我遇到问题的部分。

代码
void SPI_Init_Fcn (){ SPI_Params Params; DMA_Params dmaParams; /* Init SYSDMA 参数*/ dma_params_init (&dmaParams); /*为 SPI 打开 DMA 驱动程序实例0 */ dmaHandle = dma_open (0、&dmaParams、&errCode); if (dmaHandle ==空) { System_printf ("打开 DMA 驱动程序失败,错误=%d\n",错误代码); return;//jgi } spi_init(); /*设置 SPI 参数*/ SPI_PARAMS_INIT (params); params.frameFormat = SPI_POL0_PHA1;//jgi、您为何更改相位? //was SPI_POL0_PHA1 Params.pinMode = SPI_PINMODE_4PIN_CS; Params.ShiftFormat = SPI_MSB_FIRST; params.dataSize = 16; params.transferMode = SPI_MODE_BLOCKING;//jgi、已添加 /*启用 DMA 并设置要使用的 DMA 通道*/ params.dmaEnable = 1; params.dmaHandle = dmaHandle; params.eccEnable = 1; params.mode = SPI_SLAVE; params.u.slaveParams.chipSelect = 0; Params.U.slaveParams.dmaCfg.txDmaChanNum = 1U; Params.U.slaveParams.dmaCfg.rxDmaChanNum = 0U; //params.transferTime=TIMEOUT_MS;//SemaphoreP_PEND 描述说明设置超时(以 ms 为单位)、而不是像 TI 文档所说的//jgi:已启用时那样设置系统时钟 spiHandle = SPI_open (0、&params); } void SPI_Send_Transaction (){ SPI_Transaction 交易; //发送大型事务 TX_READY = LARGE_MSG; transaction.count=sizeof (TX_READY); transaction.txBuf=&TX_READY; transaction.rxBuf=&Rx_ready; spi_transfer (spiHandle、&transaction);//这是问题所在! }

让我了解一些见解或我可以尝试使其正常运行的事情。 非常感谢。

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

    Hi TI,

    问题:我尝试发送使能 SPI 通信、以将来自 IWR6843 SPI 从设备(在 MMWICBoost 板内)的消息发送到用作 SPI 主设备的外部微控制器。 这是我的代码片段,以及调用 SPI_TRANSF()时发生的错误的堆栈转储

    SPI Initial Test (without radar): I had enabled the #define SPI_MULT_ICOUNT_SUPPORT in the mibspi_dma.c and recompile the mmwave SPI Driver as I am planning to send more data thru SPI lines. I had tried sending dummy msg like 0,1,2,3... and it is working well across 256 uint16_t words send in 2 SPI transactions.

    SPI Actual Test (with radar): Then, I start running the IWR6843 DSS to get the chirp data output from the regular demo, and then on the way back thru the MmwDemo_mboxReadTask( ), it send the data thru UART as usual first and then I send it thru my SPI channel next. This is the part I am getting the issue at.

    我认为我上面的邮件格式已混乱。 首先读取这个、然后转到上面的代码和堆栈转储。 很抱歉给您带来不便。

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

    您好、Jonathan、

    我已要求专家对此进行研究、我们应该在接下来的几天为您提供答案。

     

    谢谢、

    Akash

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

    您好、Jonathan、

    请参阅 SPI 驱动程序文档中的注2 @C:\ti\mmwave_sdk_03_03_00_03\packages/ti\drivers\spi\docs\doxygen\html\index.html。

    请确保满足要求、以便使其在从4引脚模式下工作。

    具有多个 RAM 缓冲器的 SPI 传输(计数)

    SPI 硬件有一个内部 RAM 缓冲器、此缓冲器将发送/接收数据元件存储在8位或16位中。 SPI 驱动程序具有编译时间选项、可传输大于 RAM 缓冲区大小的数据。 这用于高吞吐量传输。 但它有一些限制、并非在所有 SPI 模式下都受支持。

    SPI 模式 引脚模式 是否受支持? 限制
    主器件 4引脚 是的 注1
    主器件 3引脚 是的 注1
    从器件 4引脚 是的 注2
    从器件 3引脚

    注1:RAM 缓冲区大小的每次传输之间将有间隙、用于数据的内部 DMA 副本。 在此期间、时钟和 CS 将处于非活动状态。

    注2:从器件需要时间为每个 RAM 缓冲器对接收到的数据进行 DMA 复制。 因此、在此期间需要 SPI 主器件停用 CS/CLK 信号。 当使用另一个 XWR1xxx 器件作为主器件时、可通过设置 C2Tdelay/T2Cdelay/wdelay 来实现。

    最大元件被定义为 MIBSPI_RAM_MAX_Elem。 对于多个从器件方案、该数字在所有从器件之间进行分频。 此信息由 SPI_MasterModeParams 中的应用程序提供。 最大计数值为32。 请确保传输长度不超过32 * ramLen。 对于高时钟速率、建议使用小计数值。

    谢谢

    Yogesh

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

    Yogesh、

    感谢您的回答。 为了能够启用4引脚 SPI (MISO、MOSI、CLK、CS)、是的  

    a)在 mibspi_dma.c 中 、启用#define SPI_MULT_ICOUNT_support

    b)在 SPI.h 中、将其更改为 #define MIBSPI_RAM_MAX_Elem      128U  (以前为64U)

    我收到 DSS 帧处理最后期限等错误、但未出现异常。 但我注意到、如果我在 MSS_main.c 的 SPI 写入上放置一个断点、并且我按 F8键一次发送全部2个128 uint16、它就可以正常工作。 但是、当我移除断点并让它持续运行时、它会在上一帖子中遇到错误。  

    对于 DSS 帧异常、我曾尝试更改配置文件中的帧周期、例如 帧配置0 2 0 50 1 0、我尝试了50到100、但仍然失败。  

    有一些问题

    1.在哪里更改最大计数值32?  

    2、这里提到的 ramLen 是什么?  我的时钟以大约7MHz 的 SPI 时钟运行。  

    请告诉我您的想法、非常感谢您。  

    Jonathan

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

    您好、Jonathan、

    变化看起来不错。  

    1.在哪里更改最大计数值32?  

    计数值不应超过32。  您的应用程序中的计数值是否超过32?

    2、这里提到的 ramLen 是什么?  

    MIBSPI_RAM_MAX_Elem

    我想问、您针对哪个器件测试 SPI。

    谢谢

    Yogesh

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

    Yogesh、

    我在 SPI 驱动程序中所做的唯一更改是这些行上的 mibspi_dma.c、  

    /*标记至 enalbe 参数检查*/
    //#define SPI_Params_check //jgi:已启用

    /*支持一次传输中的多计数以实现高吞吐量,这仅在阻塞模式下才受支持*/
    #define SPI_MULT_ICOUNT_support //在2019年11月在这里添加了 jgi

    您认为此处的帐户号码是什么? 我不确定。

    2.好的。 让我再测试一下。  非常感谢。  

    问题: 在编译此毫米波 SPI 驱动程序时、我认为我应该使用"gmake all"而不是"make all"? 我在 Win10 PC 上。  谢谢。

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

    您好、Jonathan、

    如果不直接修改最大安装,则应该可以。

    如前所述 、在所有模式下都不支持多缓冲器。 您使用它进行测试的器件是什么。

    谢谢

    Yogesh

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

    您好、Jonathan、

    由于我没有听到您的声音、我正在关闭这个线程。 如果仍有问题、请打开新主题帖。

    谢谢

    Yogesh