提问人:ZwClose 提问时间:10/20/2023 最后编辑:LundinZwClose 更新时间:10/20/2023 访问量:68
编程PCI SD卡读卡器
Programming PCI SD card reader
问:
我正在尝试从插入 Realtek 5260 读卡器的 SD 卡中读取扇区。读卡器是连接到笔记本电脑的 PCI 设备。我通过将命令及其参数写入命令缓冲区来发出READ_SINGLE_BLOCK (17)。该命令指示读取器对数据使用乒乓缓冲区。
//read single block
init_cmd(hDev);
add_cmd(hDev, WRITE_REG, 0xFDA9, 0xFFu, 0x51u); //SD_CMD0 0x11 | 0x40
add_cmd(hDev, WRITE_REG, 0xFDAA, 0xFFu, 0); //SD_CMD1
add_cmd(hDev, WRITE_REG, 0xFDAB, 0xFFu, 0); //SD_CMD2
add_cmd(hDev, WRITE_REG, 0xFDAC, 0xFFu, 0); //SD_CMD3
add_cmd(hDev, WRITE_REG, 0xFDAD, 0xFFu, 0); //SD_CMD4
add_cmd(hDev, WRITE_REG, 0xFDAF, 0xFFu, 0x0); //SD_BYTE_CNT_L
add_cmd(hDev, WRITE_REG, 0xFDB0, 0xFFu, 0x2); //SD_BYTE_CNT_H
add_cmd(hDev, WRITE_REG, 0xFDB1, 0xFFu, 0x1); //SD_BLOCK_CNT_L
add_cmd(hDev, WRITE_REG, 0xFDB2, 0xFFu, 0x0); //SD_BLOCK_CNT_H
add_cmd(hDev, WRITE_REG, 0xFDA0, 0x3u, 0x1); //SD_CFG1 : bus width
add_cmd(hDev, WRITE_REG, 0xFDA1, 0xFFu, 0x1); //SD_CFG2 : RSP_TYPE_R1
add_cmd(hDev, WRITE_REG, 0xFD5B, 1, 1); //CARD_DATA_SOURCE : 1 : RTSX_PINGPONG_BUFFER
add_cmd(hDev, WRITE_REG, 0xFDB3, 0xFFu, 0x80 | 0xC); //SD_TRANSFER : RTSX_TM_NORMAL_READ
add_cmd(hDev, CHECK_REG, 0xFDB3, 0x40u, 0x40); //SD_TRANSFER : SD_TRANSFER_END
send_cmd(hDev);
发出READ_SINGLE_BLOCK后,我对控制器进行编程,以将数据从乒乓缓冲区移动到命令缓冲区:
//read ping pong buffer
init_cmd(hDev);
DWORD reg = 0xFA00;
for (DWORD i = 0; i < 0x100; i++)
{
add_cmd(hDev, READ_REG, reg, 0, 0);
reg++;
}
send_cmd(hDev);
问题是,在发送命令并等待来自设备的中断后,我在命令缓冲区中观察到 0,就像读取失败一样。失败的原因可能是什么?我该如何处理这样的问题?
谢谢!
答: 暂无答案
评论