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.

[参考译文] TMDSCNCD28388D:C2000

Guru**** 2540720 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1026748/tmdscncd28388d-c2000

器件型号:TMDSCNCD28388D
主题中讨论的其他器件:C2000WARE

在调试 SD 卡驱动程序的过程中、尝试向 SD 卡发送 CMD0命令、然后读回返回值。 (使用 SPI 协议。 在正常情况下、如果发送了 CMD0且已接收到命令、则响应为 R1、R1应为多少、表示已进入 SPI 模式?)

运行我编写的程序后、我发现 R1的回读值为0x95FF。 R1的值错误。 R1只有1个字节、最高位始终为0。

我的想法是:

可能是我向寄存器发送命令的位置错误、或者当 SD 卡的响应被读回时、对象读回错误。

请专家帮助分析导致该问题的原因?

程序代码如下:

CS_LOW;
//针对加电延迟实现74个 CLK,实际上,下一个周期提供80 ***个脉冲
for (i=0;i<10;i++)

SPI_writeDataBlockingNonFIFO (***、0x00);//发送虚拟数据以接收状态。

//
//发送 CMD0命令。
//
for (i=0;i<6;i++)
SPI_writeDataBlockingNonFIFO (***、CMD0[i]);

//发送命令结束,增加16个时钟周期。
for (i=0;i<2;i++)
SPI_writeDataBlockingNonFIFO (***、0x00);

R1 = SPI_readDataBlockingNonFIFO (***);

//
//将芯片选择拉高。
//
CS_HIGH;

请告诉我、上述写入命令函数和读取返回值函数是否存在问题?

我使用的 SD 卡是 Kingston 的高速卡 C10、内存大小为64G。 文件系统为 FAT32。
另一个问题是、如何判断您使用的 SD 卡是否支持.SD3.0协议或其他协议?
根据信息、不同 SD 协议的命令略有不同。

根据这些信息、我的 SD 卡属于 SDXC。 一些消息来源说、它支持 SD3.0版本。

来询问

期待您的回复!

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

    查到的资料显示,在初始化过程中,SD卡时钟信号周期必须在100KHz到400KHz之间,不能大于400KHz。μ A

    我的设置是:μ A
    SPI_setConfig (spic_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA1、SPI_MODE_MASTER、1000000、8);
    DEVICE_LSPCLK_FREQ=
    ((((25000000U * 32)/(2 * 2 * 1))/ 4)

    SD 卡的时钟信号周期设置是否有问题?

    期待您的回复

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

    您是否使用 C2000Ware 中的 F2837x SD 卡示例项目将 FatFs 作为代码的起点?

    我认为您的 SPI 时钟设置没有任何问题。 假设您使用的是 C2000Ware device.h/c 文件中的默认 LSPCLK 设置、这似乎是调用 SPI_setConfig()以获取1MHz SPI 时钟的正确方法。 如果您不确定、可以尝试将 SPI C CLK 信号输出到 controlCARD 文档上的引脚、并在示波器上进行测量。

    惠特尼

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

    我想问、如何降低 SPI 的传输速度?

    当 SD 被初始化时、SPI 的传输速度要求不超过400kbit/s

    抱歉、以下函数中的1000000单位与常用波特率相同。 它是 bps、这意味着每秒发送1、000、000位数据

    SPI_setConfig (***、DEVICE_LSPCLK_FREQ、SPI_PROT_POL1PHA1、SPI_MODE_MASTER、1000000、8);

    如果是这种情况、如果我想降低 SPI 的传输速度、我只需要将1000000更改为360000、即360kbit/s

    初始化 SD 卡后、需要提高 SPI 的传输速度。 您只需再次使用上述函数、其写法如下:

    SPI_setConfig (***、DEVICE_LSPCLK_FREQ、SPI_PROT_POL1PHA1、SPI_MODE_MASTER、1000000、8);

    我想向您验证这个想法的正确性。

    期待您的回复

    谢谢

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

    是的、您已正确理解。 您只需在调用 SPI_setConfig()时更改 bitrate 参数,函数将为您计算新的 SPIBRR 寄存器值。 您无需更改任何其他参数。

    惠特尼

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

    很高兴听到你的声音。

    谢谢