查看: 12700|回复: 6

[分享] k60的spi模式驱动SD卡无法初始化

[复制链接]

该用户从未签到

5

主题

14

帖子

0

新手上路

Rank: 1

积分
41
最后登录
1970-1-1
发表于 2012-5-5 20:44:18 | 显示全部楼层 |阅读模式
        最近要使用k60的spi模块开发SD卡,移植了苏州大学spi的底层驱动,又加上了fatfs官网上找到的例程,但是在初始化的过程中发送CMD0命令却始终无法让sd卡进入idle模式,用示波器测试时钟信号和单片机输出的MOSI和时钟信号都是有的,但是MISO信号却一直是高电平。查看了初始化的流程,先进行了80次脉冲的通讯,让SD卡上点完成,然后再发送CMD0,应该是对的,所以有点怀疑是SPI底层部分的驱动不适合,下面是我的底层驱动初始化,哪位高手能帮我看看有没有什么问题,谢谢啦。
void spi_init(uint8_t spino, uint8_t master)
{
    SPI_MemMapPtr base_addr = spi_get_base_address(spino);
    
    /* 使能SPI模块时钟,配置SPI引脚功能 */
    if(SPI_MOD_SET(spino) == SPI0)
    {
        SIM_SCGC6 |= SIM_SCGC6_DSPI0_MASK;
        
        /* PORT_PCR_MUX(0x2) : SPI功能
         * PORT_PCR_DSE_MASK : Drive Strength Enable */
        gpio_init(0, 13, OUT_PUT, 1);                            /* PCS0 PA13 使用的是GPIO功能 */
        PORTA_PCR15 = 0 | PORT_PCR_MUX(0x2) | PORT_PCR_DSE_MASK; /* SCK */
        PORTA_PCR16 = 0 | PORT_PCR_MUX(0x2) | PORT_PCR_DSE_MASK; /* SOUT */
        PORTA_PCR17 = 0 | PORT_PCR_MUX(0x2);                     /* SIN */
    }
    else if(SPI_MOD_SET(spino) == SPI1)
    {
        SIM_SCGC6 |= SIM_SCGC6_SPI1_MASK;
        PORTE_PCR4 = 0 | PORT_PCR_MUX(0x2) | PORT_PCR_DSE_MASK; /* PCS0 */
        PORTE_PCR2 = 0 | PORT_PCR_MUX(0x2) | PORT_PCR_DSE_MASK; /* SCK */
        PORTE_PCR1 = 0 | PORT_PCR_MUX(0x2) | PORT_PCR_DSE_MASK; /* SOUT */
        PORTE_PCR3 = 0 | PORT_PCR_MUX(0x2);                     /* SIN */
    }
    else 
    {
        SIM_SCGC3 |= SIM_SCGC3_SPI2_MASK;
    }
    
    SPI_MCR_REG(base_addr) = 0 
                 | SPI_MCR_CLR_TXF_MASK     /* Clear the Tx FIFO counter. */
                 | SPI_MCR_CLR_RXF_MASK     /* Clear the Rx FIFO counter. */
                 //| SPI_MCR_PCSIS_MASK       /* Peripheral Chip Select x Inactive State */
                 | SPI_MCR_HALT_MASK;       /* Starts and stops DSPI transfers */
 
    /* 根据主从机模式设置工作模式 */
    if(master == MASTER)
    {
        SPI_MCR_REG(base_addr) |= SPI_MCR_MSTR_MASK;   /* Master/Slave Mode Select */
     
        SPI_CTAR_REG(base_addr,0) = 0
                       | SPI_CTAR_DBR_MASK        /* Double Baud Rate */
                       | SPI_CTAR_FMSZ(0x08)      /* Frame Size */
                       | SPI_CTAR_PDT_MASK        /* 延时因子为7 */
                       | SPI_CTAR_BR(0x8)         /* Selects the scaler value for the baud rate.  */
                       | SPI_CTAR_CPOL_MASK;       /* Clock Polarity:The inactive state value of SCK is high */
                       //| SPI_CTAR_CPHA_MASK;      /* Clock Phase:Data is changed on the leading edge of SCK  */
    }
    else
    {
        SPI_CTAR_SLAVE_REG(base_addr,0) = 0 
                            | SPI_CTAR_SLAVE_FMSZ(0x08)
                            | SPI_CTAR_SLAVE_CPOL_MASK 
                            | SPI_CTAR_SLAVE_CPHA_MASK; 
   }
 
    SPI_SR_REG(base_addr) = (SPI_SR_EOQF_MASK    /* End of Queue Flag */
                         | SPI_SR_TFUF_MASK      /* Transmit FIFO Underflow Flag */
                         | SPI_SR_TFFF_MASK      /* Transmit FIFO Fill Flag */
                         | SPI_SR_RFOF_MASK      /* Receive FIFO Overflow Flag */
                         | SPI_SR_RFDF_MASK);    /* Receive FIFO Drain Flag */
    
    SPI_MCR_REG(base_addr) &= ~SPI_MCR_HALT_MASK;   /* start */
}
回复

使用道具 举报

该用户从未签到

12

主题

136

帖子

0

中级会员

Rank: 3Rank: 3

积分
256
最后登录
2021-1-15
发表于 2012-5-7 09:08:05 | 显示全部楼层

RE:k60的spi模式驱动SD卡无法初始化

这个要看一下波形的,对照着时序写
回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-5-7 09:24:47 | 显示全部楼层

    RE:k60的spi模式驱动SD卡无法初始化

    你用的是哪个SPI?最好用示波器测试,看看发送的时候,波形是否正确。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    33

    帖子

    0

    新手上路

    Rank: 1

    积分
    76
    最后登录
    1970-1-1
    发表于 2012-5-7 11:21:38 | 显示全部楼层

    RE:k60的spi模式驱动SD卡无法初始化

    写的时序都对吗,包括CS,MOSI,CLK?MISO无信号,可以量下MISO,CLK,你读的时候看下CLK有没有信号。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    33

    帖子

    0

    新手上路

    Rank: 1

    积分
    76
    最后登录
    1970-1-1
    发表于 2012-5-7 11:28:07 | 显示全部楼层

    RE:k60的spi模式驱动SD卡无法初始化

    还有,你一帧数据是几个bit, SPI_CTAR_FMSZ(0x08)      /* Frame Size */如果是8bit,应该是SPI_CTAR_FMSZ(0x07)。不妨试试。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    14

    帖子

    0

    新手上路

    Rank: 1

    积分
    41
    最后登录
    1970-1-1
     楼主| 发表于 2012-5-7 13:21:51 | 显示全部楼层

    回复:k60的spi模式驱动SD卡无法初始化

    回复第 5 楼 于2012-05-07 11:28:07发表:
    还有,你一帧数据是几个bit, SPI_CTAR_FMSZ(0x08)      /* Frame Size */如果是8bit,应该是SPI_CTAR_FMSZ(0x07)。不妨试试。
     
    谢拉,就是这个问题,已经解决了。还以为苏州大学的底层可以直接移植,就没有认真看这部分的芯片资料。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-12-23 15:26
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    5

    主题

    20

    帖子

    0

    注册会员

    Rank: 2

    积分
    68
    最后登录
    2019-12-23
    发表于 2019-12-23 15:35:59 | 显示全部楼层
    我想问一下楼主,sd卡在k60上使用的时候,需不需要读卡器?或者再画一块板子,放上读卡器的电路好一些?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-23 04:52 , Processed in 0.096092 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表