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.

[参考译文] CC2652RSIP:SPI_TRANSFRAT()期间的系统崩溃

Guru**** 2454880 points
Other Parts Discussed in Thread: CC2652RSIP, CC2640R2F, SYSCONFIG, CC2652PSIP

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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1105166/cc2652rsip-system-crash-during-spi_transfer

器件型号:CC2652RSIP
主题中讨论的其他器件: CC2640R2FSysConfigCC2652PSIP

我正在开发一个可在 CC2652RSIP Launch Pad 上运行的应用程序。

首先,我将相应的 SimpleCentral 示例程序从“C:\ti\simplelink_cc13xx_cc26xx_sdk_6_10_00_29\examples\rtos\lp_CC2652RSIP\ble5stack”导入到 IAR 中。 虽然我没有测试其功能是否正常、但它在编译和运行时没有崩溃。

然后、我将 SimpleCentral 应用代码替换为我们的定制 SimpleCentral 应用代码、该代码在 CC2640R2F LaunchPad 上运行正常。 该代码也已编译并正确运行、包括通过 XDS110运行的 UART0。

然后、我开始实施新功能。 我为此代码创建了一个新任务、其优先级低于 SimpleCentral 应用程序。 此应用程序在处理状态机的其他类型的操作系统上运行。 它被称为欧斯莫斯。 您将在下面的调用栈中看到它。 它的循环每10ms 运行一次。 我还尝试了1000ms。 此任务不使用动态内存分配。

我开始添加外设。 首先、我确保了我可以操纵一些 LED。

然后、我添加了 UART2、它与条形码扫描仪成功通信。

我现在禁用了 UART2代码、并尝试在阻塞模式下在 SSI0上实现 SPI 主设备。 此代码按预期编译和传输两个字节。 CS、MOSI 和 SCLK 信号均正常工作。 但是,代码随后在 spiPollingTransfer()中崩溃。 似乎最可能的问题是堆栈烧断、但我将两个任务的堆栈大小增加到4096、没有任何效果。 我还将系统堆栈从1K 增加到4K、但没有效果。

SPICC26X2DMA.c spiPollingTransfer()行 rxbuf =(void *)(((UINT32_trxBuf)+ rxIncrement 中的代码失败。 我在崩溃之前和之后附加了屏幕截图。 失败的 LDR 汇编指令似乎是无害的。

如果能在这方面提供任何帮助,将不胜感激。

   

 SPI_Params   spiParams;

 /*将 SPI 作为主器件打开(默认)*/
 SPI_Params_init (&spiParams);
 spiParams.transferMode    = SPI_MODE_BLOCKING; //SPI_MODE_CALLACK;
 spiParams.transferTimeout  = 100000U;
 spiParams.transferCallbackFxn =空;
 spiParams.mode         = SPI_MASTER;
 spiParams.bitrate       =200000;
 spiParams.dataSize       = 8;
 spiParams.frameFormat     = SPI_POL0_PHA0;
 spiParams.custom        =空;
// SPI_Params_init (&spiParams);

 pMAX3241E->m_SPI_Handle = SPI_open (spiIndex、&spiParams);

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

    您好!

    感谢您的参与。 我认为解决此问题的最佳方法是将项目与 SPI 部分隔离。  您有两个 LaunchPad 吗? 如果是、我建议导入 spimaster  和 spislave 示例、并将每个示例刷写到您的 LaunchPad 中。 之后、我将验证 SPI 功能在默认示例中是否按预期工作。 然后、您能否更改 spimaster 和 spisalve 中的参数以匹配您将在项目中使用的参数? 完成此操作后、您能否分享观察到的行为?

    此致、

    1月

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

    首先、您能否向我发送 CC2652RSIP LaunchPad 的原理图? 网站上的链接错误。 应该已经有了一个 TT、但我仍然没有收到正确的原理图。

    我看到 spimaster 项目的 SysConfig 文件将 SPI 硬件设置为 MX25R8035_SPI_FLASH。 但是、闪存芯片似乎不在 LP 上。 是吗? 由于我没有在 LP 上看到它、因此我没有在  SysConfig 文件中选择 MX25R8035_SPI_FLASH、但我使用了相同的引脚8-10。 即使未组装闪存芯片、我仍需要将 SysConfig 硬件设置为 MX25R8035_SPI_FLASH 才能正常工作吗? (我将 SPI 配置为3引脚、并为 SS 使用不同的引脚、即使闪存芯片存在、whcih 也应该工作)。 也许我们在这里讨论一些问题。

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

    尊敬的 David:

     CC2652RSIP 页面上的设计文件正确。 CC2652RSIP 和 CC2652PSIP 的设计文件几乎相同。 它们之间的唯一区别是、某些组件在一个组件中标记为 DNM、而在另一个组件中标记为 DNM。 原理图本身中指出了这些差异。

    我建议首先验证 spimaster 和 spislave 示例是否按预期工作。 如果是、我建议根据需要匹配 SysConfig 设置。

    此致、

    1月

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

    我想我缺少一些信息。 spimaser 项目在 CC2652RSIP LP 上不起作用。 代码需要额外的 GPIO 引脚来同步主器件和从器件(闪存)、但这些信号在 LP 上不存在。 因此、代码在 信标上挂起。  

    因此、我在 SysConfig 中将代码配置为使用 MX25R8035_SPI_FLASH 硬件、但我更改为3线、并使用 CS 与我的器件而非外部闪存进行通信。 代码在同一条指令下失败。 请注意、我的代码将在 MOSI 上施加 CS 并发送两个字节、但 CS 不会失效。

    然后、我使用 MX25R8035_SPI_FLASH 硬件、4引脚和外部闪存 CS 以与示例相同的方式配置 SysConfig。 我已禁用 SPI 器件的 CS。 此配置应强制与外部闪存进行通信。 该配置将 CS 置为有效两次、每个 TX 字节置为有效一次。 但它在同一个位置崩溃。

    我可能还补充说、失败语句中使用的方法似乎不正确。 代码将 rxBuf 转换为(uint32_t *)、然后将此指针递增 rxIncrement、在我的情况下为1。 但是、1不会使指针递增一个字节、而是将指针递增4个字节。 我认为  rxBuf 应转换为(uint8_t *)、然后递增1、指向下一个字节。 对您来说、这是否是一个问题?

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

    我解决了问题。 这是我在上面提到的发言。 我从 SDK 中复制了 SPICC26X2dma.c 并将其复制到我的项目中。 我更改了 spiPollingTransfer()中的以下行以进行修复。 铸件不正确。 这不是增加指针的好方法。

    //       rxBuf =(void *)(((uint32_t) rxBuf)+ rxIncrement);

           rxBuf =(void *)(((uint8_t *) rxBuf)+ rxIncrement);