如何在Arduino SD库中切换电源模式?

如何在Arduino SD库中切换电源模式?,arduino,sd-card,Arduino,Sd Card,我正在使用Arduino SD库,但我对某些SD卡模块的响应不一致:尽管有相同的硬件(相同的模块,相同的SD卡),但某些SD卡未能初始化(使用SD.begin())。我使用的是SanDisk UHS-1卡,根据OEM产品手册,该卡支持2.7-3.3V电压范围 当我把它连接到示波器和逻辑分析仪上时,我发现SPI MISO线的输出电压有非常微小的变化,这足以不触发我的MCU,有时低至1.58V。这里的问题是SD卡以1.8V模式输出。所以我想把这些卡放进一个更高的电压模式,这样它们将输出3.3V,但是

我正在使用Arduino SD库,但我对某些SD卡模块的响应不一致:尽管有相同的硬件(相同的模块,相同的SD卡),但某些SD卡未能初始化(使用
SD.begin()
)。我使用的是SanDisk UHS-1卡,根据OEM产品手册,该卡支持2.7-3.3V电压范围

当我把它连接到示波器和逻辑分析仪上时,我发现SPI MISO线的输出电压有非常微小的变化,这足以不触发我的MCU,有时低至1.58V。这里的问题是SD卡以1.8V模式输出。所以我想把这些卡放进一个更高的电压模式,这样它们将输出3.3V,但是我在SD库中设置这个有困难

SD协议显示了我在此处附加的CMD8的初始化。它表示位[19:16]是发出的命令中提供的电压设置。但是当我尝试发出0x101AA而不是0x1AA时,初始化失败。R7响应仍然显示“已接受电压”的未定义值。即使进一步读取OCR寄存器,也会继续返回电压模式的未定义值

好的,所以CMD8只是向您显示卡的状态。显然,可以在ACMD41期间设置模式。议定书说:

(1) 如果参数中的电压窗口字段(位23-0)设置为零,则称为“查询CMD41”,该字段不启动初始化,用于获取OCR。查询ACMD41应忽略参数中的其他字段(位31-24)。(2) 如果参数中的电压窗口字段(位23-0)第一次设置为非零,则称为“第一个ACMD41”,开始初始化。参数中的另一个字段(位31-24)有效

我使用的卡被标识为SD2型

arg = type() == SD_CARD_TYPE_SD2 ? 0X40000000 : 0;
while ((status_ = cardAcmd(ACMD41, arg)) != R1_READY_STATE) {...}
但是根据协议,如果低位23-0仍然设置为0,这会有任何影响吗


此外,
cardCommand()
函数发送32位参数,但是位是否在正确的位置?应该发送什么来确保卡不会切换到1.8V,而是保持在当前信号电压模式?

对于任何可能知道发生了什么的SD fat lib人员,请点击此按钮。我认为这可能是一个输入级状态问题,所以我在CLK上设置了4.7k下拉,在MOSI上设置了10k上拉,在MISO上设置了4.7k上拉。但我仍然得到一个初始化错误。不是编码问题。你最好问问别人