OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » 天空网由的樱花板进程

共48条 4/5 |‹ 1 2 3 4 5 跳转至
高工
2012-12-05 09:26:28    评分
31楼

第7步:开始玩SDMMC(先占个位置)


看了一下Arduino的SD卡头文件,大概的函数说明如下,樱花板的经过对比,有部分出入,先上Arduino官网上看到的:
begin()
【描述】初始化SDMMC卡,该函数会使用SPI总线及芯片选通引脚,需要注意的是芯片选通引脚应当保持输出模式,否则SD相关的函数无法工作。
【语法】SDMMC.begin()默认方式
SDMMC.begin(cspin)指定选通引脚
【返回】成功返回true,失败返回false

exists()
【描述】检测SD上是否存在某个文件或目录
【语法】SD.exists(filename)
【参数】filename--想要检测的文件名,或目录名(目录名前加'/')
【返回】存在返回true,不存在返回false

makdir()
【描述】在SD卡上创建一个目录,并可以创建中间目录或子目录如SDMMC.makdir("a/b/c")将会创建目录a,b,c
【语法】SDMMC.makdir(filename)
【参数】filename--要创建的目录的名称,子目录的话在名称前加'/'
【返回】创建成功返回1,不成功返回0

open()
【描述】打开SD卡上的文件,如果以写方式打开,如果该文件此时不存在,则会创建新文件(但如果是目录,则只能打开已存在的目录)
【语法】SDMMC.open(filepath)
SDMMC.open(filepath,mode)
【参数】filepath--要打开文件的路径,包括其所在的目录
【参数】mode--(可选项)打开文件的方式,默认的打开方式为FILE_READ,当然其参数可以是以下之一:
        FILE_READ--只读方式打开文件,从文件开始处开始读;
        FILE_WRITE--以可读可写的方式打开文件,从文件结束的地方开始读写
【返回】一个指向打开文件的实例对象,如果打开失败,则会指向空

remove()
【描述】从SD卡上移除一个文件
【语法】SDMMC.remove(filename)
【参数】filename--要移除的文件名称
【返回】移除成功返回true,否则返回false

rmdir()
【描述】从SD卡上移除一个目录,不过要注意该目录必须为空
【语法】SDMMC.rmdir(filename)
【参数】filename--要移除的目录名称,子目录前加'/'
【返回】移除成功返回true,否则返回false

FILE类相关函数说明
available()
【描述】检查文件中是否有可以读的有效字节
【语法】file.available()
【参数】file--一个File类的实例,由SD.open()返回
【返回】有效字节数

close()
【描述】关闭文件,并且确保写入文件的数据会被保存到SDMMC卡上
【语法】file.close()
【参数】file--由SDMMC.open()返回的File实例

flush()
【描述】确保已写入文件的数据会被保存到SDMMC卡上,当执行文件关闭操作时该函数会被自动调用。
【参数】同close()

peek()
【描述】从文件中读出一个字节(字符),文件内容指针不会指向下一个字节,也就是说,只连续调用peek(),将返回相同的数据,如果想要读下一个节字须要调用read()函数
【语法】file.peek()
【参数】同colse()
【返回】下一个字节内容,如果该字节无效则返回-1

position()
【描述】获取当前指针在文件中的位置,即将在该位置进行下一次读或写操作
【参数】同close()
【语法】file.position()
【返回】文件中的当前位置(unsigned long)

print()
【描述】向文件中写入数据(文件必须是以写的方式(FILE_WRITE)打开),打印数字时,会在文件中以字符形式显示(即会自动进行转换),且数字可定义格式
【语法】file.print(data)
file.print(data.BASE)
【参数】file--同close()
data--需要打印的数据
BASE(可选参数)--打印数字的格式,可以是二进制(BIN)、十进制(DEC)、八进制(OCT)、十六进制(HEX)
【返回】打印的总字数,但是否读取该该打印总字数由应用程序决定。

println()
【描述】向文件中输入数据,输入完数据后自动换行,除语法和换行功能有部分区别外,其余与print()相同
【语法】file.println()
file.println(data)
file.println(data,BASE)
【参数】同print()

seek()
【描述】在文件中寻找一个新的位置(该位置必须是0到文件实际大小之间)
【语法】file.seek(pos)
【参数】file--同close()
pos--要寻找的位置(unsigned long)
【返回】成功返回true,否则返回false

size()
【描述】返回文件的大小
【语法】file.size()
【参数】同close()
【返回】文件的字节数(unsigned long)

read()
【描述】读取文件中的1个字节
【语法】file.read()
【参数】同close()
【返回】下一个字节内容,如果该字节无效则返回-1

write()
【描述】往文件中写入数据
【语法】file.write(data)
file.write(buf,len)
【参数】file--同close()
data--字节(字符)或字符串首地址
len--buf中元素的个数
【返回】写入数据的个数,是否读取返回值由应用程序决定

isDirectory()
【描述】目录和文件夹是特殊的文件,调用该函数可以用于判断当前文件是否是个文件夹
【语法】file.isDirectory()
【参数】同close()
【返回】布尔值

openNextFile()
【描述】报告一个目录下的下一个文件或目录
【语法】file.openNextFile()
【参数】同close
【返回】当前路径中的下一个文件(字符型)

rewindDirectory()
【描述】该函数会使指针指向当前目录下的第一个字件,一般和openNextFile()联合使用。
【参数】同close
【返回】无


程序代码部分,参照其他进程序增加了一些测试功能:
/*GR-SAKURA Sketch Template Version: V1.01*/
/*********************************************************************

**********************************************************************/
#include <rxduino.h>

#include "sdmmc.h"
#define SD_Check_Pin 33
SDMMC TestSD;
/* 初始化部分 */
void setup()
{
    pinMode(PIN_LED0,OUTPUT);       //set LED0 pin output
    Serial.begin(9600);//set baudrate 9600bps
    pinMode(SD_Check_Pin,INPUT);
    TestSD.begin();
   
}
/* 主循环 */
void loop()
{
 /* 循环要开始需要串口输入一个命令 */
    while (! Serial.available ());  //wait command from upper computer
    Serial.println ("Check SDMMC Card.....\r\n");
    digitalWrite (PIN_LED0, 1);      //set led0 on
    while(digitalRead(SD_Check_Pin) == 1);
    delay(3000);/* 延时3秒再检测,相当于消抖 */
    while(digitalRead(SD_Check_Pin) == 1);
    Serial.println ("SDMMC Card Check Done,Please send me a command -- 's'.......\r\n");
    char c = Serial.read ();/* 读取刚刚串口输入的命令 */
   
    if(c=='r')                      //if receive comand 'r'
    {
        File myFile = TestSD.open ("eepw.txt", FILE_WRITE);  //read file 'eepw.txt'
        if (myFile == false)                          
        {
            //if read mmc card error.
            Serial.println ("Fail to access MMC");    //send error message via uart
            while (1)
            {
                digitalWrite (PIN_LED0, 0);           //flash led0
                delay(200);
                digitalWrite (PIN_LED0, 1);
                delay(200);
            }
        }
        // Write
        Serial.println ("Success to access MMC");  //send message via uart
        myFile.println ("Hello, my MMC test successfully!");  //write text to mmc card
        myFile.close ();
        // Read
        myFile = TestSD.open ("eepw.txt", FILE_READ);
        while (myFile.available ())
        {
            Serial.print ((char) myFile.read ());        //read file 'eepw.txt' and send via uart
        }
        // Read file size
        Serial.print ("File size: ");
        Serial.print (myFile.size ());
        Serial.print ("Bytes");
        Serial.println ();
        myFile.close ();
        Serial.println ("? Remove the file y / n");
        while (! Serial.available ());
        char c = Serial.read ();
        // Remove file
        if (c == 'y')
        {
            TestSD.remove ("eepw.txt");
            Serial.println ("eepw.txt has been removed");
            delay (400);
        }
        else
        {
            Serial.println ("eepw.txt has not been removed");
        }
        Serial.println ("Please send me a command.");
    }
    else
    {
        Serial.println ("Please send me a correct command.");
    }
};      


注意:目前还不能直接使用刚刚格式化后的MMC卡


助工
2012-12-05 12:39:53    评分
32楼

板子不太会用,来学习一下。


高工
2012-12-05 17:13:26    评分
33楼
我也感觉资料太少了,还得继续找资料啊,有些函数的用法还得看详细资料的说明……

高工
2012-12-05 19:38:44    评分
34楼
中途插入剧情:DIY两块Arduino板子来配合调试……伤不起

主控芯片MEGA8,时钟16MHz,固件更新接口(串口)
下面是一个视屏,大家也可以看看哈,捧个场

专家
2012-12-05 20:01:49    评分
35楼
楼主 这个高级啊~~
自己做了两个……

P.S.楼主使用atmega16能自己制作arduino的开发板不?

高工
2012-12-05 20:24:17    评分
36楼
据说16的暂时没有官方的bootloader吧……

工程师
2012-12-05 20:45:59    评分
37楼

高手啊,要好好的学习


高工
2012-12-06 23:38:55    评分
38楼
好像网上有传16的BootLoader,正在尝试中%%%&&……&……

专家
2012-12-07 09:10:04    评分
39楼
持续关注中…

高工
2012-12-07 10:10:45    评分
40楼
BootLoader已经写进去了,串口下载程序及简单程序的测试也成功了,但Arduino的库还没有测试过能不能直接用…………还有一大堆地测试……

共48条 4/5 |‹ 1 2 3 4 5 跳转至

回复

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