【求助!】CH376T+STM32,SPI方式读写SD卡,只能创建文件不能写入

SPI-CH376T.png

CH376T开发遇到问题,SPI方式,只有复位重启或者烧录后自动重启才能成功在SD卡中创建文件,断电再通电就没有成功创建文件,向文件中写数据也没成功,创建的文件内有一个空格字符,请帮忙检查下原理图是否有错误。如果不是硬件问题,求教软件可能是在什么步骤出错才会有这种现象

一:硬件方面,晶振建议加15p的匹配电容

二:376是进行到哪一步出问题,返回值是多少

三:INT脚没有接,你程序的中断是怎么处理的?SDO兼做中断输出吗?



晶振测得XO和XI电压分别是1.42V和1.36V,应该是启振了
没有读取376返回值,直接延时等待处理的
问题可能出在没有获取中断上?程序只简单初始化了SPI,下面是测试程序

void SD_card_test(void)

{

SPI3_CS_H;

delay_us(30);

SPI3_CS_L;

Send_SD_Data(USB_INT_CONNECT);

delay_us(2);

Send_SD_Data(SD_MODE);

delay_us(2);

SPI3_CS_H;

delay_us(30);

Send_SD_Command(CMD0H_DISK_CONNECT);

Send_SD_Command(CMD0H_DISK_MOUNT);

HAL_Delay(200);

SPI3_CS_L;

Send_SD_Data(CMD10_SET_FILE_NAME);

delay_us(2);

HAL_SPI_Transmit(&hspi3,"\\ABC.TXT\0",9,100);

SPI3_CS_H;

HAL_Delay(10);

Send_SD_Command(CMD0H_FILE_CREATE);

HAL_Delay(200);

Send_SD_Command(CMD01_GET_STATUS)

SPI3_CS_L;

Send_SD_Data(CMD2H_BYTE_WRITE);

delay_us(2);

Send_SD_Data(28);

delay_us(5);

Send_SD_Data(CMD01_WR_REQ_DATA);

delay_us(5);

HAL_SPI_Transmit(&hspi3,"123456789012345678901234567\0",28,100);//28

SPI3_CS_H;

HAL_Delay(10);

SPI3_CS_L;

Send_SD_Data(CMD1H_FILE_CLOSE);

delay_us(2);

Send_SD_Data(1);

SPI3_CS_H;

}

void Send_SD_Data(uint8_t Data)

{

HAL_SPI_Transmit(&hspi3,&Data,1,100);

}

void Send_SD_Command(uint8_t CMD)

{

SPI3_CS_L;

HAL_SPI_Transmit(&hspi3,&CMD,1,100);

delay_us(2);

SPI3_CS_H;

delay_us(5);

}



你没有做任何中断处理吗?

你联系这个邮箱xcc@wch.cn给你发一份参考代码吧


好的,已发邮件


请问用SDO做兼容中断输出,DISK_MOUNT(31H)之后,获取到SDO中断,GET_STATUS(22H)读取到中断状态也是22H是什么原因?


这是 SPI 命令没发成功,发送的值又被读回来,命令码和数据之间需要时间间隔,命令与数据间一般 2us,数据与数据间一般 1us,有中断的命令,等待中断通知后再读取值。


感谢,延长delay之后可以读到正确的中断状态了
目前遇到新的问题:读取mount中断成功之后创建的文件名是乱码,不处理中断直接创建反而是正确文件名。
请问可能是什么原因造成的乱码?create中断返回值也是创建成功14H
image.png


中断未处理,是指创建文件后还是disk_mount?disk_mount该命令用于初始化磁盘并测试磁盘是否就绪。新连接的 USB 存储设备或者 SD 卡必须通过该命令进行初始化后,然后才能进行文件操作
创建文件有我们官方封好的函数,你使用的是例程还是自己写的


在官方函数的基础上修改的,乱码原因已经找到,有一步片选操作错误


只有登录才能回复,可以选择微信账号登录