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.

[参考译文] CCS/LAUNCHXL-CC3235SF:在具有多个其他 SPI 从器件的 SPI 3引脚模式下使用 SD FatFS

Guru**** 2586665 points
Other Parts Discussed in Thread: CC3235SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/961265/ccs-launchxl-cc3235sf-use-of-sd-fatfs-in-spi-3-pin-mode-with-multiple-other-spi-slaves

器件型号:LAUNCHXL-CC3235SF
主题中讨论的其他器件: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);

返回结果;

} 

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

    您好!

    您如何通过 SPI 实现 SDFatFS 磁盘 IO 功能? 默认情况下、该库配置为使用本机 SD 主机外设。

    假设您修改了 SDFatFs.c 文件、是否要在 SDFatFS_diskRad/Write 中添加检查以查看 SPI 是否为 open help?

    此致、

    Michael