智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3325|回复: 2
打印 上一主题 下一主题

K60 SPI模式读写SD卡

[复制链接]

2

主题

10

帖子

0

精华

高级会员

Rank: 4

积分
879
威望
496
贡献
245
兑换币
161
注册时间
2012-2-25
在线时间
69 小时
跳转到指定楼层
1#
发表于 2013-3-28 21:06:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*******************************************************************************
  2. 函数名称:SPI_RdWr_Byte
  3. 函数功能:打开指定的SPI端口并打开指定的片选信号CS,向SD卡写入一字节数据并读取SD卡回响
  4. 入口参数:spin:指定的SPI端口,如SPI0,SPI1,SPI2
  5.           data:待向SD卡中写入的数据
  6. 出口参数:temp
  7. *******************************************************************************/
  8. u8 SPI_RdWr_Byte(SPIn spin,u8 data)
  9. {
  10.     u8 temp;
  11.     SPI_TX_WAIT(spin);

  12.     do
  13.     {
  14.         /*************  清标志位  ***************/
  15.         SPI_SR_REG(SPIN[spin]) = (SPI_SR_EOQF_MASK
  16.                                 | SPI_SR_TFUF_MASK
  17.                                 | SPI_SR_TFFF_MASK
  18.                                 | SPI_SR_RFOF_MASK
  19.                                 | SPI_SR_RFDF_MASK
  20.                                 );
  21.    
  22.         /************** 清FIFO计数器 **************/
  23.         SPI_MCR_REG(SPIN[spin])    |=  (SPI_MCR_CLR_TXF_MASK     //Clear TX FIFO.写1清 Tx FIFO counter
  24.                                    |SPI_MCR_CLR_RXF_MASK     //Clear RX FIFO. 写1清 the Rx FIFO counter.
  25.                                    );
  26.         //SPI_SR_REG(SPIN[spin]) |= SPI_SR_RFDF_MASK;
  27.     }while( (SPI_SR_REG(SPIN[spin]) & SPI_SR_RFDF_MASK));   //如果 Rx FIFO 非空,则清FIFO.

  28.     /***************** 发送一个数据 *******************/   
  29.     SPI_PUSHR_REG(SPIN[spin]) = 0
  30.                    | SPI_PUSHR_CTAS(0)
  31.                    | SPI_PUSHR_EOQ_MASK         //End Of Queue,1为 传输SPI最后的数据
  32.                    | SPI_PUSHR_TXDATA(data);
  33.    
  34.     SPI_EOQF_WAIT(spin);    //要及时把RX FIFO的东西清掉,不然这里就无限等待
  35.    
  36.     while( !(SPI_SR_REG(SPIN[spin]) & SPI_SR_RFDF_MASK));    //RFDF为1,Rx FIFO is not empty.
  37.     temp = (u8)SPI_POPR_REG(SPIN[spin]);    //读取一次接收的数据         
  38.     //SPI_SR_REG(SPIN[spin]) |= SPI_SR_RFDF_MASK;
  39.     return(temp);
  40.    

  41. }
复制代码
这是我像SD卡发送一个数据并读取SD返回的值,但发现每次读取的值是不对的,请问哪位大神能指点一下!

2

主题

10

帖子

0

精华

高级会员

Rank: 4

积分
879
威望
496
贡献
245
兑换币
161
注册时间
2012-2-25
在线时间
69 小时
2#
 楼主| 发表于 2013-3-28 21:10:21 | 只看该作者
不管写什么数据,返回的都是255
回复 支持 反对

使用道具 举报

55

主题

1589

帖子

0

精华

知名人物

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
24758

优秀会员奖章活跃会员奖章论坛骨干奖章论坛元老奖章资源大师奖章

威望
14177
贡献
8803
兑换币
1162
注册时间
2012-3-4
在线时间
889 小时
毕业学校
3#
发表于 2013-4-16 11:39:23 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-20 22:48 , Processed in 0.043516 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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