打印
[其他ST产品]

stm32-SDIO-4bits发送数据时出错

[复制链接]
307|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2023-9-27 10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pi, ni, STM32, 4B, IO, sd
我向操作单元为“字”的FIFO中写入一个“字”;查询时,发现FIFO中被重复写了32个“字”。(FIFO一共有32个字的存储空间)
以下是我针对此问题写的一段代码:
#include "STM32f10x.h"
#include "stm32f10x_conf.h"

SDIO_DataInitTypeDef SDIO_DataInitStructure;   
SDIO_InitTypeDef SDIO_InitStructure;

void SD_LowLevel_Init(void)        ;
void SDIO_DataInit(void);


int main(void)
{
    char *character= "abcdefghijklmnop" ;
        uint32_t  *data= (uint32_t *)character ;

    SD_LowLevel_Init();
    SDIO_DataInit();


    SDIO->DCTRL = 0;

        SDIO_DataInitStructure.SDIO_DataLength = 16;

    SDIO_SetSDIOOperation(ENABLE);
        SDIO_DataInitStructure.SDIO_DataTimeOut = 0xffffffff;

    SDIO_DataInitStructure.SDIO_TransferDir = SDIO_TransferDir_ToCard;    //SDIO_TransferDir_ToCard=0 SDIO_TransferDir_ToSDIO=2
    SDIO_DataInitStructure.SDIO_TransferMode = SDIO_TransferMode_Stream;   // SDIO_TransferMode_Stream SDIO_TransferMode_Block
    SDIO_DataInitStructure.SDIO_DPSM = SDIO_DPSM_Enable;
    SDIO_DataConfig(&SDIO_DataInitStructure);

         SDIO->FIFOCNT;
         SDIO->DCOUNT;
         SDIO_WriteData(0X12345678);
         SDIO->FIFOCNT;
         SDIO->DCOUNT;

         SDIO_WriteData(*data++);
         SDIO->FIFOCNT;
         SDIO->DCOUNT;

         SDIO_WriteData(*data++);
         SDIO->FIFOCNT;
         SDIO->DCOUNT;

         SDIO_WriteData(*data);
         SDIO->FIFOCNT;
         SDIO->DCOUNT;

}









void SD_LowLevel_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;

  /*!< GPIOC and GPIOD Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , ENABLE);

  /*!< Configure PC.08, PC.09, PC.10, PC.11, PC.12 pin: D0, D1, D2, D3, CLK pin */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  /*!< Configure PD.02 CMD line */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

      /*!< Enable the SDIO AHB Clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, ENABLE);

  /*!< Enable the DMA2 Clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
}


void SDIO_DataInit(void)
{
  SDIO_DeInit();

  /*!< Power ON Sequence -----------------------------------------------------*/
  /*!< Configure the SDIO peripheral */
  /*!< SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2) */
  /*!< on STM32F4xx devices, SDIOCLK is fixed to 48MHz */
  /*!< SDIO_CK for initialization should not exceed 12 MHz */  
  SDIO_InitStructure.SDIO_ClockDiv = 0x04;
  SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
  SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
  SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
  SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_4b;
  SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
  SDIO_Init(&SDIO_InitStructure);

  /*!< Set Power State to ON */
  SDIO_SetPowerState(SDIO_PowerState_ON);

  /*!< Enable SDIO Clock */
  SDIO_ClockCmd(ENABLE);
  
/*******************************************Gainspan Testing******************************/
    SDIO_DataStructInit(&SDIO_DataInitStructure);

}

使用特权

评论回复
沙发
probedog| | 2023-9-27 15:56 | 只看该作者
检查SDIO接口与SD卡的连接是否正常

使用特权

评论回复
板凳
laocuo1142| | 2023-9-27 15:57 | 只看该作者
如果时钟频率过高或过低,可能会导致数据传输错误。

使用特权

评论回复
地板
flycamelaaa| | 2023-9-27 15:58 | 只看该作者
可能是初始化问题

使用特权

评论回复
5
classroom| | 2023-9-27 15:58 | 只看该作者
发送的数据格式是否正确

使用特权

评论回复
6
MessageRing| | 2023-9-30 18:26 | 只看该作者
你看是不是有循环

使用特权

评论回复
7
abotomson| | 2023-10-5 09:09 | 只看该作者
如果SDIO中断处理程序有错误,可能会导致数据传输失败。请检查中断处理程序的实现。

使用特权

评论回复
8
jonas222| | 2023-10-5 10:12 | 只看该作者
SDIO卡的硬件故障可能会导致数据传输错误

使用特权

评论回复
9
wangdezhi| | 2023-10-5 10:33 | 只看该作者
STM32的SDIO驱动程序需要与操作系统和SDIO卡兼容。如果没有正确安装驱动程序,可能会导致数据传输错误。请确保安装了正确的驱动程序。

使用特权

评论回复
10
hudi008| | 2023-10-5 11:16 | 只看该作者
在SDIO接口的通信过程中,可能会出现中断。你需要在代码中正确地处理这些中断,以便在需要时获取正确的数据。

使用特权

评论回复
11
tifmill| | 2023-10-7 22:54 | 只看该作者
如果SDIO接口的硬件出现故障,也可能会导致数据发送错误。

使用特权

评论回复
12
robincotton| | 2023-10-8 17:16 | 只看该作者
STM32的引脚连接不良或者损坏,可能会导致数据传输错误。请检查STM32的硬件连接和状态。

使用特权

评论回复
13
earlmax| | 2023-10-8 18:51 | 只看该作者
可能是由于SDIO接口连接不良、SDIO时钟频率设置不正确、SDIO中断配置不当等原因导致数据传输失败。

使用特权

评论回复
14
robincotton| | 2023-10-8 19:38 | 只看该作者
数据传输过程中出现超时              

使用特权

评论回复
15
robertesth| | 2023-10-8 19:45 | 只看该作者
在程序中,使用适当的方法发送 4 位数据。例如,你可以使用 HAL_SDIO_Transmit() 函数发送数据。请确保发送的数据是正确的 4 位值。

使用特权

评论回复
16
zerorobert| | 2023-10-8 21:32 | 只看该作者
还需要设置相应的寄存器,例如SDIO_CR1、SDIO_CR2和SDIO_CMD等。

使用特权

评论回复
17
jtracy3| | 2023-10-8 21:41 | 只看该作者
可以尝试使用官方例程来测试您的代码。

使用特权

评论回复
18
Bowclad| | 2023-10-8 22:20 | 只看该作者
硬件故障应该问题不大吧

使用特权

评论回复
19
bestwell| | 2023-10-12 19:40 | 只看该作者
错误的时钟设置可能会导致数据传输错误。

使用特权

评论回复
20
kkzz| | 2023-10-12 20:10 | 只看该作者
如果SDIO接口本身存在故障,例如接触不良、线路损坏等,也可能导致错误

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1414

主题

3785

帖子

5

粉丝