搜索
bottom↓
回复: 8

K60 用spi写MicroSD卡,FAT32的文件系统

[复制链接]

出0入0汤圆

发表于 2012-4-15 23:30:37 | 显示全部楼层 |阅读模式
简洁的spi收发指令该如何写?下面是我写的,求火哥,老高等高手修改(PS:receiveByte的函数我弄不明白怎么写,感觉SD卡没有响应,真心求解释啊。。
void SPI_SendByte(u8 transmit_data){
    u8 temp;
    temp = transmit_data;
    SPI_SR_REG(SPI0_BASE_PTR) = (SPI_SR_EOQF_MASK         //clear the bit end of queue
                               | SPI_SR_TFUF_MASK         //clear the bit overflow
                               | SPI_SR_TFFF_MASK         //clear the bit fill
                               | SPI_SR_RFOF_MASK         //clear the bit overflow
                               | SPI_SR_RFDF_MASK);       //clear the bit drain
   
    SPI_MCR_REG(SPI0_BASE_PTR) |= SPI_MCR_CLR_TXF_MASK    //clear the TX FIFO
                               |  SPI_MCR_CLR_RXF_MASK;   //clear the RX FIFO
   
   
    SPI_PUSHR_REG(SPI0_BASE_PTR) = 0
                                 | SPI_PUSHR_CTAS(0)      //CTAR0
                                 | SPI_PUSHR_EOQ_MASK     //last data
                                 | SPI_PUSHR_TXDATA(temp);//transfer
   
   
   
    while((SPI_SR_REG(SPI0_BASE_PTR) & SPI_SR_TCF_MASK)==0);
    SPI_SR_REG(SPI0_BASE_PTR)=1<<31;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2012-5-5 16:23:48 | 显示全部楼层
你好,我现在也在研究k60的SD卡开发,用的也是SPI,但是我的SD卡初始化一直不能进入idle模式,下面是我的SPI初始化部分程序,能不能帮我看下有什么问题,或者给我提供一些建议,不胜感激。
  1. void spi_init(uint8_t spino, uint8_t master)
  2. {   
  3.     SPI_MemMapPtr base_addr = spi_get_base_address(spino);
  4.    
  5.     /* 使能SPI模块时钟,配置SPI引脚功能 */
  6.     if(SPI_MOD_SET(spino) == SPI0)
  7.     {
  8.         SIM_SCGC6 |= SIM_SCGC6_DSPI0_MASK;
  9.         
  10.         /* PORT_PCR_MUX(0x2) : SPI功能
  11.          * PORT_PCR_DSE_MASK : Drive Strength Enable */
  12.         gpio_init(0, 13, OUT_PUT, 1);                            /* PCS0 */
  13.         PORTA_PCR15 = 0 | PORT_PCR_MUX(0x2) | PORT_PCR_DSE_MASK; /* SCK */
  14.         PORTA_PCR16 = 0 | PORT_PCR_MUX(0x2) | PORT_PCR_DSE_MASK; /* SOUT */
  15.         PORTA_PCR17 = 0 | PORT_PCR_MUX(0x2);                     /* SIN */
  16.     }
  17.     else if(SPI_MOD_SET(spino) == SPI1)
  18.     {
  19.         SIM_SCGC6 |= SIM_SCGC6_SPI1_MASK;
  20.         PORTE_PCR4 = 0 | PORT_PCR_MUX(0x2) | PORT_PCR_DSE_MASK; /* PCS0 */
  21.         PORTE_PCR2 = 0 | PORT_PCR_MUX(0x2) | PORT_PCR_DSE_MASK; /* SCK */
  22.         PORTE_PCR1 = 0 | PORT_PCR_MUX(0x2) | PORT_PCR_DSE_MASK; /* SOUT */
  23.         PORTE_PCR3 = 0 | PORT_PCR_MUX(0x2);                     /* SIN */
  24.     }
  25.     else
  26.     {
  27.         SIM_SCGC3 |= SIM_SCGC3_SPI2_MASK;
  28.     }
  29.    
  30.     SPI_MCR_REG(base_addr) = 0
  31.                  | SPI_MCR_CLR_TXF_MASK     /* Clear the Tx FIFO counter. */
  32.                  | SPI_MCR_CLR_RXF_MASK     /* Clear the Rx FIFO counter. */
  33.                  | SPI_MCR_PCSIS_MASK       /* Peripheral Chip Select x Inactive State */
  34.                  | SPI_MCR_HALT_MASK;       /* Starts and stops DSPI transfers */

  35.     /* 根据主从机模式设置工作模式 */
  36.     if(master == MASTER)
  37.     {
  38.         SPI_MCR_REG(base_addr) |= SPI_MCR_MSTR_MASK;   /* Master/Slave Mode Select */
  39.         SPI_CTAR_REG(base_addr,0) = 0
  40.                        | SPI_CTAR_DBR_MASK        /* Double Baud Rate */
  41.                        | SPI_CTAR_FMSZ(0x08)      /* Frame Size */
  42.                        | SPI_CTAR_PDT_MASK        /* 延时因子为7 */
  43.                        | SPI_CTAR_BR(0x8)         /* Selects the scaler value for the baud rate.  */
  44.                        | SPI_CTAR_CPOL_MASK       /* Clock Polarity:The inactive state value of SCK is high */
  45.                        | SPI_CTAR_CPHA_MASK;      /* Clock Phase:Data is changed on the leading edge of SCK  */
  46.     }
  47.     else
  48.     {
  49.         SPI_CTAR_SLAVE_REG(base_addr,0) = 0
  50.                             | SPI_CTAR_SLAVE_FMSZ(0x08)
  51.                             | SPI_CTAR_SLAVE_CPOL_MASK
  52.                             | SPI_CTAR_SLAVE_CPHA_MASK;
  53.    }

  54.     SPI_SR_REG(base_addr) = (SPI_SR_EOQF_MASK    /* End of Queue Flag */
  55.                          | SPI_SR_TFUF_MASK      /* Transmit FIFO Underflow Flag */
  56.                          | SPI_SR_TFFF_MASK      /* Transmit FIFO Fill Flag */
  57.                          | SPI_SR_RFOF_MASK      /* Receive FIFO Overflow Flag */
  58.                          | SPI_SR_RFDF_MASK);    /* Receive FIFO Drain Flag */
  59.    
  60.     SPI_MCR_REG(base_addr) &= ~SPI_MCR_HALT_MASK;   /* start */
  61.    
  62. }
复制代码

出0入0汤圆

发表于 2012-5-5 20:51:41 | 显示全部楼层
购买了野火的K60了?不是已经提供了SDHC的例程了吗?跑文件系统了

出0入0汤圆

发表于 2012-5-5 20:53:53 | 显示全部楼层
hcx31 发表于 2012-5-5 16:23
你好,我现在也在研究k60的SD卡开发,用的也是SPI,但是我的SD卡初始化一直不能进入idle模式,下面是我的SP ...

   第42行:                    | SPI_CTAR_FMSZ(0x08)      /* Frame Size */

通信的方式,是8位通信吧?这里修改成 0x07……

出0入0汤圆

发表于 2012-5-5 20:55:26 | 显示全部楼层
应该是 SPI 的初始化有问题……苏大提供的例子,有个误导人的地方。

第42行:                      | SPI_CTAR_FMSZ(0x08)      /* Frame Size */

这里修改成0x07 ,而不是0x08

出0入0汤圆

发表于 2012-5-6 11:58:25 | 显示全部楼层
山外メ雲ジ 发表于 2012-5-5 20:51
购买了野火的K60了?不是已经提供了SDHC的例程了吗?跑文件系统了

我们是自己做的板子,没有用SDHC,用的是SPI

出0入0汤圆

发表于 2012-5-6 13:16:50 | 显示全部楼层
山外メ雲ジ 发表于 2012-5-5 20:55
应该是 SPI 的初始化有问题……苏大提供的例子,有个误导人的地方。

第42行:                      | SP ...

恩,看了芯片资料,这里确实应该是0x07,可是改过之后还是没有相应~~郁闷了

出0入0汤圆

发表于 2012-8-1 12:53:41 | 显示全部楼层
库函数里面没有SPI啊

出0入0汤圆

发表于 2015-2-23 21:11:59 | 显示全部楼层
fatfs的官网有STM32F4的程序,可以下来参考下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-2 21:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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