主题中讨论的其他器件:CC3235SF
工具/软件:Code Composer Studio
大家好!
我将 CCS 和 Launchpad CC3235SF 开发套件用于研究计划。 我需要在3引脚 SPI 模式下使用具有 FatFS 的 SD 卡、我也有
(目前)我也以这种方式使用的大约2个其他从器件。 该问题来自通过 SPI 提供 SD FatFS 的底层库。 我已实施
实际上正在管理其他从器件选择和传输的类、但当首先使用文件函数时、SPI_open 将由于之前的状态返回 NULL SPI 句柄
SD FatFS 已打开 SPI (我比其他器件更早使用它)、因此我创建了一个辅助函数、用于检查 SPI 是否已打开、在这种情况下、我会打开 SPI
在重新打开之前将其关闭、以便其他器件使用(具有其自己的 SPI 参数)。 一切都可以正常工作、直到我需要从 SD 卡中再次读取文件。 底层
库似乎正在使用正确的从器件选择、但它不会检查 SPI 是否已打开(我猜是这样)、然后它会在 disk_read 处阻止(我猜是驱动程序实现
(用于 FatFS 库)。 我没有再深入讨论它、但我想、如果我关闭 FatFS 启动的原始 SPI 句柄、它将不会重新打开它、因此我想问是否存在
我错过了一些东西、例如、有一种方法强制底层驱动程序函数重新打开 SPI、或者如果有更简单的方法能够使用多个 SPI 从站
并通过 SPI 驱动器包含 SD FatFS。 TIA
乔治
电源 以下是用于检查 SPI 是否已打开的代码。 您可以看到、由于包含实现对象(SPICC32XXDMA_Object)、它会失去抽象
#include #include bool SPI_isOpen (SPI_Handle handle){ if (handle=NULL||handle->object=NULL) 返回 false; SPICC32XXDMA_Object *对象=(SPICC32XXDMA_Object *) handle ->对象; 返回对象->isOpen; }
下面是我的课程中负责管理 SS 引脚的传输部分
bool SpiManager:::transfer (SlaveSelect slave、uint8_t * tx_buffer、uint8_t * rx_buffer、int8_t size){ SPI_Transaction 事务; SPI_Handle 句柄; if (slave=SlaveSelect:无){ unselectAll(); 返回 false; } if (SPI_isOpen ((SPI_Handle)&(SPI_CONFIG[CONFIG_SPI_0]))) SPI_Close (((SPI_Handle)&(SPI_CONFIG[CONFIG_SPI_0])); 句柄= SPI_open (CONFIG_SPI_0、&spiParameters[SLAVE]); if (handle=NULL){ unselectAll(); 返回 false; } 芯片选择(从器件); transaction.count =大小; transaction.rxBuf = rx_buffer; transaction.txBuf = TX_buffer; bool 结果= SPI_transfer (handle、&transaction); SPI_Close (handle); 返回结果; }