这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » campozeng的进程帖★基于RL78/G13的双向信息监测传送系统项目总结

共104条 8/11 |‹ 6 7 8 9 10 11 跳转至
院士
2012-10-09 09:03:56     打赏
71楼
上位机软件做得真棒……
我的还需要努力啊~~
向楼主学习

菜鸟
2012-10-09 13:06:08     打赏
72楼
瑞萨论坛点击率最高的强帖,一定要留个名

工程师
2012-10-17 16:39:43     打赏
73楼
SD卡讀寫學習

 SD卡的引脚定义

SD卡引脚功能详述:

引脚

编号

SD模式

        SPI模式

名称

类型

描述

名称

类型

描述

1

CD/DAT3

IO或PP

卡检测/

数据线3

#CS

I

片选

2

CMD

PP

命令/

回应

DI

I

数据输入

3

VSS1

S

电源地

VSS

S

电源地

4

VDD

S

电源

VDD

S

电源

5

CLK

I

时钟

SCLK

I

时钟

6

VSS2

S

电源地

VSS2

S

电源地


7

DAT0

IO或PP

数据线0

DO

O或PP

数据输出

8

DAT1

IO或PP

数据线1

RSV

 

 

9

DAT2

IO或PP

数据线2

RSV

 

 


注:S:电源供给  I:输入 O:采用推拉驱动的输出
PP:采用推拉驱动的输入输出

SD卡SPI模式下与单片机的连接图:

SD卡支持两种总线方式:SD方式与SPI方式。其中SD方式采用6线制,使用CLK、CMD、DAT0~DAT3进行数据通信。而SPI方式采用4线制,使用CS、CLK、DataIn、DataOut进行数据通信。SD方式时的数据传输速度与SPI方式要快,采用单片机对SD卡进行读写时一般都采用SPI模式。采用不同的初始化方式可以使SD卡工作于SD方式或SPI方式。这里只对其SPI方式进行介绍。

(2) SPI方式驱动SD卡的方法
     SD卡的SPI通信接口使其可以通过SPI通道进行数据读写。从应用的角度来看,采用SPI接口的好处在于,很多单片机内部自带SPI控制器,不光给开发上带来方便,同时也见降低了开发成本。然而,它也有不好的地方,如失去了SD卡的性能优势,要解决这一问题,就要用SD方式,因为它提供更大的总线数据带宽。SPI接口的选用是在上电初始时向其写入第一个命令时进行的。以下介绍SD卡的驱动方法,只实现简单的扇区读写。
1) 命令与数据传输
1. 命令传输
SD卡自身有完备的命令系统,以实现各项操作。命令格式如下:


命令的传输过程采用发送应答机制,过程如下:

   每一个命令都有自己命令应答格式。在SPI模式中定义了三种应答格式,如下表所示:

 

字节 含义
      1 7 开始位,始终为0
6 参数错误
5 地址错误
4 擦除序列错误
3 CRC错误
2 非法命令
1 擦除复位
0 闲置状态

字节 含义
      1 7 开始位,始终为0
6 参数错误
5 地址错误
4 擦除序列错误
3 CRC错误
2 非法命令
1 擦除复位
0 闲置状态
      2 7 溢出,CSD覆盖
6 擦除参数
5 写保护非法
4 卡ECC失败
3 卡控制器错误
2 未知错误
1 写保护擦除跳过,锁/解锁失败
0 锁卡

字节 含义
      1 7 开始位,始终为0
6 参数错误
5 地址错误
4 擦除序列错误
3 CRC错误
2 非法命令
1 擦除复位
0 闲置状态
2~5 全部 操作条件寄存器,高位在前


工程师
2012-10-18 11:35:28     打赏
74楼
RL78/G13 SD卡讀寫學習

写命令的例程:

首先用Applilet 生成基礎代碼,設置如下:



把要發送的命令放進TxBuffer,返回的回應將存放在RxBuffer

CSI00_SendReceiveData(TxBuffer,Num, RxBuffer);


SD卡初始化
SD卡的初始化是非常重要的,只有进行了正确的初始化,才能进行后面的各项操作。在初始化过程中,SPI的时钟不能太快,否则会造初始化失败。在初始化成功后,应尽量提高SPI的速率。在刚开始要先发送至少74个时钟信号,这是必须的。在很多读者的实验中,很多是因为疏忽了这一点,而使初始化不成功。随后就是写入两个命令CMD0与CMD1,使SD卡进入SPI模式

 初始化时序图:


初始化例程:
    //--------------------------------------------------------------------------  
初始化SD卡到SPI模式  
 //--------------------------------------------------------------------------  
UCHAR SD_Init()  
{    
 UCHAR retry,temp;  
 UCHAR i;  
 CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};  
 SD_Port_Init(); //初始化驱动端口  
 
 Init_Flag=1; //将初始化标志置1    for (i=0;i<0x0f;i++)   
 {  
  Write_Byte_SD(0xff); //发送至少74个时钟信号  
 }  
 
 //向SD卡发送CMD0  
 retry=0;  
 do 
 { //为了能够成功写入CMD0,在这里写200次  
  temp=Write_Command_SD(CMD);  
  retry++;  
  if(retry==200)   
  { //超过200次  
   return(INIT_CMD0_ERROR);//CMD0 Error!  
  }  
 }   
 while(temp!=1);  //回应01h,停止写入  
 
 //发送CMD1到SD卡  
 CMD[0] = 0x41; //CMD1  
 CMD[5] = 0xFF;  
 retry=0;  
 do 
 { //为了能成功写入CMD1,写100次  
  temp=Write_Command_SD(CMD);  
  retry++;  
  if(retry==100)   
  { //超过100次  
   return(INIT_CMD1_ERROR);//CMD1 Error!  
  }  
 }   
 while(temp!=0);//回应00h停止写入  
    
 Init_Flag=0; //初始化完毕,初始化标志清零  
   
 SPI_CS=1;  //片选无效  
 return(0); //初始化成功  
}  

 读取CID
CID寄存器存储了SD卡的标识码。每一个卡都有唯一的标识码。
CID寄存器长度为128位。它的寄存器结构如下:
 

名称

数据宽度

CID划分

生产标识号

MID

8

[127:120]

OEM/应用标识

OID

16

[119:104]

产品名称

PNM

40

[103:64]

产品版本

PRV

8

[63:56]

产品序列号

PSN

32

[55:24]

保留

4

[23:20]

生产日期

MDT

12

[19:8]

CRC7校验合

CRC

7

[7:1]

未使用,始终为1

1

[0:0]

它的读取时序如下:


读取CSD
CSD(Card-Specific Data)寄存器提供了读写SD卡的一些信息。其中的一些单元可以由用户重新编程。具体的CSD结构如下:

名称

数据宽度

单元类型

CSD划分

CSD结构

CSD_STRUCTURE

2

R

[127:126]

保留

-

6

R

[125:120]

数据读取时间1

TAAC

8

R

[119:112]

数据在CLK周期内读取时间2(NSAC*100)

NSAC

8

R

[111:104]

最大数据传输率

TRAN_SPEED

8

R

[103:96]

卡命令集合

CCC

12

R

[95:84]

最大读取数据块长

READ_BL_LEN

4

R

[83:80]

允许读的部分块

READ_BL_PARTIAL

1

R

[79:79]

非线写块

WRITE_BLK_MISALIGN

1

R

[78:78]

非线读块

READ_BLK_MISALIGN

1

R

[77:77]

DSR条件

DSR_IMP

1

R

[76:76]

保留

-

2

R

[75:74]

设备容量

C_SIZE

12

R

[73:62]

最大读取电流@VDD min

VDD_R_CURR_MIN

3

R

[61:59]

最大读取电流@VDD max

VDD_R_CURR_MAX

3

R

[58:56]

最大写电流@VDD min

VDD_W_CURR_MIN

3

R

[55:53]

最大写电流@VDD max

VDD_W_CURR_MAX

3

R

[52:50]

设备容量乘子

C_SIZE_MULT

3

R

[49:47]

擦除单块使能

ERASE_BLK_EN

1

R

[46:46]

擦除扇区大小

SECTOR_SIZE

7

R

[45:39]

写保护群大小

WP_GRP_SIZE

7

R

[38:32]

写保护群使能

WP_GRP_ENABLE

1

R

[31:31]

保留

-

2

R

[30:29]

写速度因子

R2W_FACTOR

3

R

[28:26]

最大写数据块长度

WRITE_BL_LEN

4

R

[25:22]

允许写的部分部

WRITE_BL_PARTIAL

1

R

[21:21]

保留

-

5

R

[20:16]

文件系统群

FILE_OFRMAT_GRP

1

R/W

[15:15]

拷贝标志

COPY

1

R/W

[14:14]

永久写保护

PERM_WRITE_PROTECT

1

R/W

[13:13]

暂时写保护

TMP_WRITE_PROTECT

1

R/W

[12:12]

文件系统

FIL_FORMAT

2

R/W

[11:10]

保留

-

2

R/W

[9:8]

CRC

CRC

7

R/W

[7:1]

未用,始终为1

-

1

 

[0:0]

           读取CSD 的时序:


 读取SD卡信息
综合上面对CID与CSD寄存器的读取,可以知道很多关于SD卡的信息

扇区读
扇区读是对SD卡驱动的目的之一。SD卡的每一个扇区中有512个字节,一次扇区读操作将把某一个扇区内的512个字节全部读出。过程很简单,先写入命令,在得到相应的回应后,开始数据读取。
扇区读的时序:



扇区写
扇区写是SD卡驱动的另一目的。每次扇区写操作将向SD卡的某个扇区中写入512个字节。过程与扇区读相似,只是数据的方向相反与写入命令不同而已。
    扇区写的时序:


工程师
2012-10-28 19:04:50     打赏
75楼
本次活动终于按时完成。谢谢大家。

之后还有FPGA的,又有得忙了。

菜鸟
2012-11-23 15:35:07     打赏
76楼
不知道能不能提供一下关RL78 /G13 开发板EEPROM仿真教程的详细代码,信箱:hkazuki0818@gmail.com

工程师
2012-11-23 15:45:48     打赏
77楼
代码已经贴在进程里了,去看看

高工
2013-03-11 21:37:26     打赏
78楼
LZ乃高手啊~!

菜鸟
2013-04-03 09:58:13     打赏
79楼

非常感谢,刚好手里有个这样的板子,请问能否提供代码一份呀 。谢谢了!

yinyong.cn@gmail.com


菜鸟
2013-04-03 09:58:45     打赏
80楼

非常感谢,刚好手里有个这样的板子,但是还不会用,请问能否提供代码一份呀 ?谢谢了!

yinyong.cn@gmail.com


共104条 8/11 |‹ 6 7 8 9 10 11 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]