Yuji Notsu
/
QVGA_TFT_test
This is test program for running 192GC00(240 x 320 dot, 65K Color TFT LCD module ) on Star Board Orange.
Revision 0:0e2aded4edb0, committed 2011-01-21
- Comitter:
- y_notsu
- Date:
- Fri Jan 21 12:51:26 2011 +0000
- Commit message:
Changed in this revision
diff -r 000000000000 -r 0e2aded4edb0 FATFileSystem.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FATFileSystem.lib Fri Jan 21 12:51:26 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_unsupported/code/fatfilesystem/ \ No newline at end of file
diff -r 000000000000 -r 0e2aded4edb0 REL225L0.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/REL225L0.cpp Fri Jan 21 12:51:26 2011 +0000 @@ -0,0 +1,292 @@ +#include "REL225L01.h" + + + REL225L01::REL225L01() : CS_OUT(CS), RS_OUT(RS), RD_OUT(RD), WR_OUT(WR),RST_OUT(RST),SCK_OUT(SCK),SDA_OUT(SDA) + { CS_OUT = 0x01;RS_OUT = 0x01; RD_OUT = 0x01; + WR_OUT = 0x01;RST_OUT = 0x01; + SCK_OUT= 0x01; SDA_OUT=0x01; + //t.attach( this, &SG12864A::display, ReflashRate ); + } + +//Initialization LCD module +void REL225L01::lcd_init(void){ + wait_ms(20); + RD_OUT=1; + CS_OUT=1; + WR_OUT=1; + RST_OUT=0; + wait_ms(1); + RST_OUT=1; + wait_ms(25); + + lcd_cmd(0xB0); + lcd_data(0xCA); + lcd_data(0x90); + lcd_data(0x37); + lcd_data(0x01); + lcd_data(0x48); + lcd_data(0x01); + lcd_data(0x40); + lcd_data(0x04); + lcd_data(0x00); + lcd_data(0x00); + + lcd_cmd(0x26); + lcd_data(0x01); + + lcd_cmd(0xB1); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x08); + lcd_data(0x00); + lcd_data(0x04); + lcd_data(0x10); + lcd_data(0x48); + lcd_data(0x82); + lcd_data(0x20); + lcd_data(0x84); + lcd_data(0x92); + lcd_data(0x2A); + lcd_data(0x52); + lcd_data(0xAA); + lcd_data(0x5A); + lcd_data(0x55); + lcd_data(0x2A); + lcd_data(0x55); + lcd_data(0xAE); + lcd_data(0xFF); + lcd_data(0xFE); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x04); + + lcd_cmd(0xB2); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x04); + lcd_data(0x00); + lcd_data(0x02); + lcd_data(0x08); + lcd_data(0x48); + lcd_data(0x82); + lcd_data(0x20); + lcd_data(0x84); + lcd_data(0x42); + lcd_data(0x48); + lcd_data(0x92); + lcd_data(0x2A); + lcd_data(0x52); + lcd_data(0xAA); + lcd_data(0x5A); + lcd_data(0x55); + lcd_data(0x2A); + lcd_data(0x55); + lcd_data(0xAE); + lcd_data(0xFF); + lcd_data(0xFE); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x00); + lcd_data(0x04); + + lcd_cmd(MODE); // Entry Mode + lcd_data(0x29); + //color mode + lcd_cmd(COLMOD); + lcd_data(0x05); //65k color + //Inteface mode + lcd_cmd(IFMOD); + lcd_data(0x03); //16bit mode + + + lcd_cmd(0xBA); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + lcd_data(0x55); + + + // + lcd_cmd(SLPOUT); + lcd_cmd(DISON); //Display On +} + + + +//Command output function +void REL225L01::lcd_cmd(unsigned int comm){ + if(comm<=0xffff) + { + + for(int i=0;i<16;i++) + { + SDA_OUT = ((comm >> i) & 0x1); + SCK_OUT = 0; + SCK_OUT = 1; + } + RS_OUT = 0; + CS_OUT = 0; + WR_OUT = 0; + //wait_us(1); + RS_OUT = 1; + WR_OUT = 1; + CS_OUT = 1; + // wait_us(1); + + } + } + + void REL225L01::lcd_data(unsigned int data){ + if(data<=0xffff) + { + for(int i=0;i<16;i++) + { + SDA_OUT = ((data >> i) & 0x1); + SCK_OUT = 0; + SCK_OUT = 1; + } + CS_OUT = 0; + WR_OUT = 0; + //wait_us(1); + WR_OUT = 1; + CS_OUT = 1; + // wait_us(1); + } + } + + /*************************** +* ��ʏ���֐� +* ����p�F�w�肠�� +****************************/ +void REL225L01::lcd_clear(unsigned short Color){ + int i, j; + + lcd_cmd(PASET); // �y�[�W�J�n�I���A�h���X�Z�b�g + lcd_data(0); + lcd_data(0x0C); + lcd_data((unsigned char)((ENDPAGE+0x0C)>>8)); + lcd_data((unsigned char)(ENDPAGE+0x0C)); + //lcd_data(ENDPAGE); + + lcd_cmd(CASET); // �R�����J�n�A�I���A�h���X�Z�b�g + lcd_data(0); + lcd_data(0x08); + lcd_data((unsigned char)((ENDCOL+0x08)>>8)); + lcd_data((unsigned char)(ENDCOL+0x08)); + //lcd_data(ENDCOL); + + lcd_cmd(RAMWR); + for(j=0; j<4; j++){ + for(i=0; i<(ENDCOL+1)*80; i++){ + //lcd_data((unsigned char)(Color>>8)); + //lcd_data((unsigned char)Color); + lcd_data(Color); + } + } +} + +/*********************************** +* �P�s�N�Z���\���֐� +* ��W��(0,0)-(161,131) +***********************************/ +void REL225L01::lcd_pixel(short Xpos, short Ypos, unsigned short Color){ + + if((Xpos<=ENDCOL) && (Ypos<=ENDPAGE)){ + Xpos += 0x08; + Ypos += 0x0C; + lcd_cmd(PASET); // �s�iRAW)�A�h���X�Z�b�g + lcd_data(Ypos>>8); + lcd_data(Ypos); + lcd_data(Ypos>>8); + lcd_data(Ypos); + lcd_cmd(CASET); // ��iCOLUM)�A�h���X�Z�b�g + lcd_data((unsigned char)((Xpos)>>8)); + lcd_data((unsigned char)(Xpos)); + lcd_data((unsigned char)(Xpos>>8)); + lcd_data((unsigned char)(Xpos)); + lcd_cmd(RAMWR); // 1�s�N�Z���������� + //lcd_data(Color >> 8); // 16�r�b�g�J���[ + lcd_data(Color); + } +} + +/********************************************************* +* �C���[�W�\���֐� +*�@ �f�[�^�͏c���8���C������1�o�C�g�Ŋi�[����Ă��� +* 128�~128/8=2k�o�C�g/��� +* �O���t�B�b�N�F(Color1)�Ɣw�i�F(Color2)�����w�� +**********************************************************/ +void REL225L01::lcd_image(char line, const unsigned char *ptr, unsigned short Color1, unsigned Color2) +{ + unsigned char Mask; + short i, vline, colum; + + + for(vline=line; vline<line+8; vline++){ // �S�̂�8�s�~8=64���C�� + for(colum=0; colum<128; colum++){ // ����128�h�b�g�Ƃ��� + Mask = 0x01; // ���ʃr�b�g���㑤 + for(i=0; i<8; i++){ // 1�o�C�g������ + if(*ptr & Mask) // �r�b�g�`�F�b�N + lcd_pixel(colum+2, vline*8+i+1, Color1); + else + lcd_pixel(colum+2,vline*8+i+1, Color2); + Mask = Mask << 1; // �r�b�g�ʒu�V�t�g + } + ptr++; // ���̃f�[�^ + } + } +}
diff -r 000000000000 -r 0e2aded4edb0 REL225L01.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/REL225L01.h Fri Jan 21 12:51:26 2011 +0000 @@ -0,0 +1,78 @@ +// +// SG12864A Test Program +// +// + +#ifndef SG12864A_H +#define SG12864A_H + +#include "mbed.h" + +#define CS p19 +#define RS p18 +#define RD p17 +#define WR p16 +#define RST p15 +#define SCK p13 +#define SDA p12 + +/***************************************** +* Epson S1D15G10 Command Set +*****************************************/ +#define MODE 0x36 +#define CASET 0x2A +#define PASET 0x2B +#define COLMOD 0x3A +#define IFMOD 0xC2 +#define RAMWR 0x2C +#define SLPOUT 0x11 +#define DISON 0x29 + +#define ENDCOL 319 // X +#define ENDPAGE 239 // Y +#define XChar (short)((ENDCOL+1) / 12) +#define YLine (short)((ENDPAGE+1) / 14) + +/******************************************* +* 16bit Color Difinition +*******************************************/ +#define WHITE 0xFFFF +#define BLACK 0x0000 +#define RED 0xF800 +#define GREEN 0x07E0 +#define BLUE 0x001F +#define CYAN 0x07FF +#define MAGENTA 0xF81F +#define YELLOW 0xFFE0 +#define BROWN 0xA18A +#define ORANGE 0xFBC0 +#define PINK 0xF998 + +class REL225L01 { +public: + + REL225L01(); + void lcd_cmd(unsigned int comm); + void lcd_data(unsigned int data); + void lcd_init(void); + void lcd_clear(unsigned short Color); + void lcd_pixel(short Xpos, short Ypos, unsigned short Color); + void lcd_image(char line, const unsigned char *ptr, unsigned short Color1, unsigned Color2); + //void lcd_init(void); + //void lcd_Image(char *ptr); + + +private: + DigitalOut CS_OUT; + DigitalOut RS_OUT; + DigitalOut RD_OUT; + DigitalOut WR_OUT; + DigitalOut RST_OUT; + DigitalOut SCK_OUT; + DigitalOut SDA_OUT; + //Ticker t; + +}; + +#endif +
diff -r 000000000000 -r 0e2aded4edb0 SDHCFileSystem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDHCFileSystem.cpp Fri Jan 21 12:51:26 2011 +0000 @@ -0,0 +1,618 @@ +/* mbed SDFileSystem Library, for providing file access to SD cards + * Copyright (c) 2008-2010, sford + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +//* Introduction +// * ------------ +// * SD and MMC cards support a number of interfaces, but common to them all +// * is one based on SPI. This is the one I'm implmenting because it means +// * it is much more portable even though not so performant, and we already +// * have the mbed SPI Interface! +// * +// * The main reference I'm using is Chapter 7, "SPI Mode" of: +// * http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf +// * +// * SPI Startup +// * ----------- +// * The SD card powers up in SD mode. The SPI interface mode is selected by +// * asserting CS low and sending the reset command (CMD0). The card will +// * respond with a (R1) response. +// * +// * CMD8 is optionally sent to determine the voltage range supported, and +// * indirectly determine whether it is a version 1.x SD/non-SD card or +// * version 2.x. I'll just ignore this for now. +// * +// * ACMD41 is repeatedly issued to initialise the card, until "in idle" +// * (bit 0) of the R1 response goes to '0', indicating it is initialised. +// * +// * You should also indicate whether the host supports High Capicity cards, +// * and check whether the card is high capacity - i'll also ignore this +// * +// * SPI Protocol +// * ------------ +// * The SD SPI protocol is based on transactions made up of 8-bit words, with +//* the host starting every bus transaction by asserting the CS signal low. The +// * card always responds to commands, data blocks and errors. +// * +// * The protocol supports a CRC, but by default it is off (except for the +// * first reset CMD0, where the CRC can just be pre-calculated, and CMD8) +// * I'll leave the CRC off I think! +// * +// * Standard capacity cards have variable data block sizes, whereas High +// * Capacity cards fix the size of data block to 512 bytes. I'll therefore +// * just always use the Standard Capacity cards with a block size of 512 bytes. +// * This is set with CMD16. +// * +// * You can read and write single blocks (CMD17, CMD25) or multiple blocks +// * (CMD18, CMD25). For simplicity, I'll just use single block accesses. When +// * the card gets a read command, it responds with a response token, and then +// * a data token or an error. +// * +// * SPI Command Format +// * ------------------ +// * Commands are 6-bytes long, containing the command, 32-bit argument, and CRC. +// * +// * +---------------+------------+------------+-----------+----------+--------------+ +// * | 01 | cmd[5:0] | arg[31:24] | arg[23:16] | arg[15:8] | arg[7:0] | crc[6:0] | 1 | +// * +---------------+------------+------------+-----------+----------+--------------+ +// * +// * As I'm not using CRC, I can fix that byte to what is needed for CMD0 (0x95) +// * +// * All Application Specific commands shall be preceded with APP_CMD (CMD55). +// * +// * SPI Response Format +// * ------------------- +// * The main response format (R1) is a status byte (normally zero). Key flags: +// * idle - 1 if the card is in an idle state/initialising +// * cmd - 1 if an illegal command code was detected +// * +// * +-------------------------------------------------+ +// * R1 | 0 | arg | addr | seq | crc | cmd | erase | idle | +// * +-------------------------------------------------+ +// * +// * R1b is the same, except it is followed by a busy signal (zeros) until +// * the first non-zero byte when it is ready again. +// * +// * Data Response Token +// * ------------------- +// * Every data block written to the card is acknowledged by a byte +// * response token +// * +// * +----------------------+ +// * | xxx | 0 | status | 1 | +// * +----------------------+ +// * 010 - OK! +// * 101 - CRC Error +// * 110 - Write Error +// * +// * Single Block Read and Write +// * --------------------------- +// * +// * Block transfers have a byte header, followed by the data, followed +// * by a 16-bit CRC. In our case, the data will always be 512 bytes. +// * +// * +------+---------+---------+- - - -+---------+-----------+----------+ +// * | 0xFE | data[0] | data[1] | | data[n] | crc[15:8] | crc[7:0] | +// * +------+---------+---------+- - - -+---------+-----------+----------+ +// */ +// +//* +// * Comment: Changes for SDHC support till 32GB +// * Name: KB +// * Date: 07/24/2010 +// * Release: 0.1 +// */ + +/* mbed SDFileSystem Library, for providing file access to SD cards + * Copyright (c) 2008-2010, sford + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +//* Introduction +// * ------------ +// * SD and MMC cards support a number of interfaces, but common to them all +// * is one based on SPI. This is the one I'm implmenting because it means +// * it is much more portable even though not so performant, and we already +// * have the mbed SPI Interface! +// * +// * The main reference I'm using is Chapter 7, "SPI Mode" of: +// * http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf +// * +// * SPI Startup +// * ----------- +// * The SD card powers up in SD mode. The SPI interface mode is selected by +// * asserting CS low and sending the reset command (CMD0). The card will +// * respond with a (R1) response. +// * +// * CMD8 is optionally sent to determine the voltage range supported, and +// * indirectly determine whether it is a version 1.x SD/non-SD card or +// * version 2.x. I'll just ignore this for now. +// * +// * ACMD41 is repeatedly issued to initialise the card, until "in idle" +// * (bit 0) of the R1 response goes to '0', indicating it is initialised. +// * +// * You should also indicate whether the host supports High Capicity cards, +// * and check whether the card is high capacity - i'll also ignore this +// * +// * SPI Protocol +// * ------------ +// * The SD SPI protocol is based on transactions made up of 8-bit words, with +//* the host starting every bus transaction by asserting the CS signal low. The +// * card always responds to commands, data blocks and errors. +// * +// * The protocol supports a CRC, but by default it is off (except for the +// * first reset CMD0, where the CRC can just be pre-calculated, and CMD8) +// * I'll leave the CRC off I think! +// * +// * Standard capacity cards have variable data block sizes, whereas High +// * Capacity cards fix the size of data block to 512 bytes. I'll therefore +// * just always use the Standard Capacity cards with a block size of 512 bytes. +// * This is set with CMD16. +// * +// * You can read and write single blocks (CMD17, CMD25) or multiple blocks +// * (CMD18, CMD25). For simplicity, I'll just use single block accesses. When +// * the card gets a read command, it responds with a response token, and then +// * a data token or an error. +// * +// * SPI Command Format +// * ------------------ +// * Commands are 6-bytes long, containing the command, 32-bit argument, and CRC. +// * +// * +---------------+------------+------------+-----------+----------+--------------+ +// * | 01 | cmd[5:0] | arg[31:24] | arg[23:16] | arg[15:8] | arg[7:0] | crc[6:0] | 1 | +// * +---------------+------------+------------+-----------+----------+--------------+ +// * +// * As I'm not using CRC, I can fix that byte to what is needed for CMD0 (0x95) +// * +// * All Application Specific commands shall be preceded with APP_CMD (CMD55). +// * +// * SPI Response Format +// * ------------------- +// * The main response format (R1) is a status byte (normally zero). Key flags: +// * idle - 1 if the card is in an idle state/initialising +// * cmd - 1 if an illegal command code was detected +// * +// * +-------------------------------------------------+ +// * R1 | 0 | arg | addr | seq | crc | cmd | erase | idle | +// * +-------------------------------------------------+ +// * +// * R1b is the same, except it is followed by a busy signal (zeros) until +// * the first non-zero byte when it is ready again. +// * +// * Data Response Token +// * ------------------- +// * Every data block written to the card is acknowledged by a byte +// * response token +// * +// * +----------------------+ +// * | xxx | 0 | status | 1 | +// * +----------------------+ +// * 010 - OK! +// * 101 - CRC Error +// * 110 - Write Error +// * +// * Single Block Read and Write +// * --------------------------- +// * +// * Block transfers have a byte header, followed by the data, followed +// * by a 16-bit CRC. In our case, the data will always be 512 bytes. +// * +// * +------+---------+---------+- - - -+---------+-----------+----------+ +// * | 0xFE | data[0] | data[1] | | data[n] | crc[15:8] | crc[7:0] | +// * +------+---------+---------+- - - -+---------+-----------+----------+ +// */ +// +//* +// * Comment: Changes for SDHC support till 32GB +// * Name: KB +// * Date: 07/24/2010 +// * Release: 0.1 +// */ + +#include "SDHCFileSystem.h" + +#define DEBUG +#define SD_COMMAND_TIMEOUT 5000 + + +SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name) : + FATFileSystem(name), _spi(mosi, miso, sclk), _cs(cs) { + _cs = 1; +} + +#define R1_IDLE_STATE (1 << 0) +#define R1_ERASE_RESET (1 << 1) +#define R1_ILLEGAL_COMMAND (1 << 2) +#define R1_COM_CRC_ERROR (1 << 3) +#define R1_ERASE_SEQUENCE_ERROR (1 << 4) +#define R1_ADDRESS_ERROR (1 << 5) +#define R1_PARAMETER_ERROR (1 << 6) + +// Types +// - v1.x Standard Capacity +// - v2.x Standard Capacity +// - v2.x High Capacity +// - Not recognised as an SD Card + +#define SDCARD_FAIL 0 +#define SDCARD_V1 1 +#define SDCARD_V2 2 +#define SDCARD_V2HC 3 + +int SDFileSystem::initialise_card() { + // Set to 100kHz for initialisation, and clock card with cs = 1 + _spi.frequency(40000000); + _cs = 1; + for(int i=0; i<16; i++) { + _spi.write(0xFF); + } + + // send CMD0, should return with all zeros except IDLE STATE set (bit 0) + if(_cmd(0, 0) != R1_IDLE_STATE) { + fprintf(stderr, "No disk, or could not put SD card in to SPI idle state\n"); + return SDCARD_FAIL; + } + + // send CMD8 to determine whther it is ver 2.x + int r = _cmd8(); + if(r == R1_IDLE_STATE) { + return initialise_card_v2(); + } else if(r == (R1_IDLE_STATE | R1_ILLEGAL_COMMAND)) { + return initialise_card_v1(); + } else { + fprintf(stderr, "Not in idle state after sending CMD8 (not an SD card?)\n"); + return SDCARD_FAIL; + } +} + +int SDFileSystem::initialise_card_v1() { + for(int i=0; i<SD_COMMAND_TIMEOUT; i++) { + _cmd(55, 0); + if(_cmd(41, 0) == 0) { + cdv = 512; + #ifdef DEBUG + printf("\n\rInit: SEDCARD_V1\n\r"); + #endif + return SDCARD_V1; + } + } + + fprintf(stderr, "Timeout waiting for v1.x card\n"); + return SDCARD_FAIL; +} + +int SDFileSystem::initialise_card_v2() { + + for(int i=0; i<SD_COMMAND_TIMEOUT; i++) { + wait_ms(50); + _cmd58(); + _cmd(55, 0); + if(_cmd(41, 0x40000000) == 0) { + _cmd58(); + #ifdef DEBUG + printf("\n\rInit: SDCARD_V2\n\r"); + #endif + cdv = 1; + return SDCARD_V2; + } + } + + fprintf(stderr, "Timeout waiting for v2.x card\n"); + return SDCARD_FAIL; +} + +int SDFileSystem::disk_initialize() { + + int i = initialise_card(); + #ifdef DEBUG + printf("init card = %d\n", i); + #endif + _sectors = _sd_sectors(); + + // Set block length to 512 (CMD16) + if(_cmd(16, 512) != 0) { + fprintf(stderr, "Set 512-byte block timed out\n"); + return 1; + } + + _spi.frequency(40000000); // Set to 1MHz for data transfer + return 0; +} + +int SDFileSystem::disk_write(const char *buffer, int block_number) { + // set write address for single block (CMD24) + if(_cmd(24, block_number * cdv) != 0) { + return 1; + } + + // send the data block + _write(buffer, 512); + return 0; +} + +int SDFileSystem::disk_read(char *buffer, int block_number) { + // set read address for single block (CMD17) + if(_cmd(17, block_number * cdv) != 0) { + return 1; + } + + // receive the data + _read(buffer, 512); + return 0; +} + +int SDFileSystem::disk_status() { return 0; } +int SDFileSystem::disk_sync() { return 0; } +int SDFileSystem::disk_sectors() { return _sectors; } + +// PRIVATE FUNCTIONS + +int SDFileSystem::_cmd(int cmd, int arg) { + _cs = 0; + + // send a command + _spi.write(0x40 | cmd); + _spi.write(arg >> 24); + _spi.write(arg >> 16); + _spi.write(arg >> 8); + _spi.write(arg >> 0); + _spi.write(0x95); + + // wait for the repsonse (response[7] == 0) + for(int i=0; i<SD_COMMAND_TIMEOUT; i++) { + int response = _spi.write(0xFF); + if(!(response & 0x80)) { + _cs = 1; + _spi.write(0xFF); + return response; + } + } + _cs = 1; + _spi.write(0xFF); + return -1; // timeout +} +int SDFileSystem::_cmdx(int cmd, int arg) { + _cs = 0; + + // send a command + _spi.write(0x40 | cmd); + _spi.write(arg >> 24); + _spi.write(arg >> 16); + _spi.write(arg >> 8); + _spi.write(arg >> 0); + _spi.write(0x95); + + // wait for the repsonse (response[7] == 0) + for(int i=0; i<SD_COMMAND_TIMEOUT; i++) { + int response = _spi.write(0xFF); + if(!(response & 0x80)) { + return response; + } + } + _cs = 1; + _spi.write(0xFF); + return -1; // timeout +} + + +int SDFileSystem::_cmd58() { + _cs = 0; + int arg = 0; + + // send a command + _spi.write(0x40 | 58); + _spi.write(arg >> 24); + _spi.write(arg >> 16); + _spi.write(arg >> 8); + _spi.write(arg >> 0); + _spi.write(0x95); + + // wait for the repsonse (response[7] == 0) + for(int i=0; i<SD_COMMAND_TIMEOUT; i++) { + int response = _spi.write(0xFF); + if(!(response & 0x80)) { + int ocr = _spi.write(0xFF) << 24; + ocr |= _spi.write(0xFF) << 16; + ocr |= _spi.write(0xFF) << 8; + ocr |= _spi.write(0xFF) << 0; +// printf("OCR = 0x%08X\n", ocr); + _cs = 1; + _spi.write(0xFF); + return response; + } + } + _cs = 1; + _spi.write(0xFF); + return -1; // timeout +} + +int SDFileSystem::_cmd8() { + _cs = 0; + + // send a command + _spi.write(0x40 | 8); // CMD8 + _spi.write(0x00); // reserved + _spi.write(0x00); // reserved + _spi.write(0x01); // 3.3v + _spi.write(0xAA); // check pattern + _spi.write(0x87); // crc + + // wait for the repsonse (response[7] == 0) + for(int i=0; i<SD_COMMAND_TIMEOUT * 1000; i++) { + char response[5]; + response[0] = _spi.write(0xFF); + if(!(response[0] & 0x80)) { + for(int j=1; j<5; j++) { + response[i] = _spi.write(0xFF); + } + _cs = 1; + _spi.write(0xFF); + return response[0]; + } + } + _cs = 1; + _spi.write(0xFF); + return -1; // timeout +} + +int SDFileSystem::_read(char *buffer, int length) { + _cs = 0; + + // read until start byte (0xFF) + while(_spi.write(0xFF) != 0xFE); + + // read data + for(int i=0; i<length; i++) { + buffer[i] = _spi.write(0xFF); + } + _spi.write(0xFF); // checksum + _spi.write(0xFF); + + _cs = 1; + _spi.write(0xFF); + return 0; +} + +int SDFileSystem::_write(const char *buffer, int length) { + _cs = 0; + + // indicate start of block + _spi.write(0xFE); + + // write the data + for(int i=0; i<length; i++) { + _spi.write(buffer[i]); + } + + // write the checksum + _spi.write(0xFF); + _spi.write(0xFF); + + // check the repsonse token + if((_spi.write(0xFF) & 0x1F) != 0x05) { + _cs = 1; + _spi.write(0xFF); + return 1; + } + + // wait for write to finish + while(_spi.write(0xFF) == 0); + + _cs = 1; + _spi.write(0xFF); + return 0; +} + +static int ext_bits(char *data, int msb, int lsb) { + int bits = 0; + int size = 1 + msb - lsb; + for(int i=0; i<size; i++) { + int position = lsb + i; + int byte = 15 - (position >> 3); + int bit = position & 0x7; + int value = (data[byte] >> bit) & 1; + bits |= value << i; + } + return bits; +} + +int SDFileSystem::_sd_sectors() { + + int c_size, c_size_mult, read_bl_len; + int block_len, mult, blocknr, capacity; + int blocks, hc_c_size; + uint64_t hc_capacity; + + // CMD9, Response R2 (R1 byte + 16-byte block read) + if(_cmdx(9, 0) != 0) { + fprintf(stderr, "Didn't get a response from the disk\n"); + return 0; + } + + char csd[16]; + if(_read(csd, 16) != 0) { + fprintf(stderr, "Couldn't read csd response from disk\n"); + return 0; + } + + // csd_structure : csd[127:126] + // c_size : csd[73:62] + // c_size_mult : csd[49:47] + // read_bl_len : csd[83:80] - the *maximum* read block length + + int csd_structure = ext_bits(csd, 127, 126); + + #ifdef DEBUG + printf("\n\rCSD_STRUCT = %d\n", csd_structure); + #endif + + switch (csd_structure){ + case 0: + cdv = 512; + c_size = ext_bits(csd, 73, 62); + c_size_mult = ext_bits(csd, 49, 47); + read_bl_len = ext_bits(csd, 83, 80); + + block_len = 1 << read_bl_len; + mult = 1 << (c_size_mult + 2); + blocknr = (c_size + 1) * mult; + capacity = blocknr * block_len; + blocks = capacity / 512; + #ifdef DEBUG + printf("\n\rSDCard\n\rc_size: %.4X \n\rcapacity: %.ld \n\rsectors: %d\n\r", c_size, capacity, blocks); + #endif + break; + + case 1: + cdv = 1; + hc_c_size = ext_bits(csd, 63, 48); + int hc_read_bl_len = ext_bits(csd, 83, 80); + hc_capacity = hc_c_size+1; + blocks = (hc_c_size+1)*1024; + #ifdef DEBUG + printf("\n\rSDHC Card \n\rhc_c_size: %.4X \n\rcapacity: %.lld \n\rsectors: %d\n\r", hc_c_size, hc_capacity*512*1024, blocks); + #endif + break; + + default: + fprintf(stderr, "This disk tastes funny! I only know about type 0 CSD structures\n"); + return 0; + // break; + }; + return blocks; +}
diff -r 000000000000 -r 0e2aded4edb0 SDHCFileSystem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDHCFileSystem.h Fri Jan 21 12:51:26 2011 +0000 @@ -0,0 +1,87 @@ +/* mbed SDFileSystem Library, for providing file access to SD cards + * Copyright (c) 2008-2010, sford + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef MBED_SDHCFILESYSTEM_H +#define MBED_SDHCFILESYSTEM_H + +#include "mbed.h" +#include "FATFileSystem.h" + +/* Double Words */ +typedef unsigned long long uint64_t; +typedef long long sint64_t; + +/** Access the filesystem on an SD Card using SPI +// * +// * @code +// * #include "mbed.h" +// * #include "SDFileSystem.h" +// * +// * SDFileSystem sd(p5, p6, p7, p12, "sd"); // mosi, miso, sclk, cs +// * +// * int main() { +// * FILE *fp = fopen("/sd/myfile.txt", "w"); +// * fprintf(fp, "Hello World!\n"); +// * fclose(fp); +// * } +// */ +class SDFileSystem : public FATFileSystem { +public: + + /** Create the File System for accessing an SD Card using SPI + * + * @param mosi SPI mosi pin connected to SD Card + * @param miso SPI miso pin conencted to SD Card + * @param sclk SPI sclk pin connected to SD Card + * @param cs DigitalOut pin used as SD Card chip select + * @param name The name used to access the virtual filesystem + */ + SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name); + virtual int disk_initialize(); + virtual int disk_write(const char *buffer, int block_number); + virtual int disk_read(char *buffer, int block_number); + virtual int disk_status(); + virtual int disk_sync(); + virtual int disk_sectors(); + + +protected: + + int _cmd(int cmd, int arg); + int _cmdx(int cmd, int arg); + int _cmd8(); + int _cmd58(); + int initialise_card(); + int initialise_card_v1(); + int initialise_card_v2(); + + int _read(char *buffer, int length); + int _write(const char *buffer, int length); + int _sd_sectors(); + int _sectors; + + SPI _spi; + DigitalOut _cs; + int cdv; +}; + +#endif
diff -r 000000000000 -r 0e2aded4edb0 TextLCD.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Fri Jan 21 12:51:26 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#44f34c09bd37
diff -r 000000000000 -r 0e2aded4edb0 imagedata.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imagedata.h Fri Jan 21 12:51:26 2011 +0000 @@ -0,0 +1,136 @@ +/**************************** +* �C���[�W�f�[�^ +*****************************/ + +const unsigned char Header1[1024]={ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x80,0xC0,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE, +0xFE,0xFE,0xFE,0xFE,0xFC,0xFC,0xFC,0xFC,0xF8,0xF0,0xC0,0x00,0x60,0xF0,0xF8,0xF8, +0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFC, +0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x1F,0x0F,0x03,0x03,0x03,0x07,0x1F,0x7F,0xFF,0xFF, +0xFF,0xFF,0x7F,0x3F,0x0F,0x07,0x03,0x03,0x07,0x1F,0x7F,0xFF,0xFC,0xF0,0xC0,0x80, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF, +0x3F,0x1F,0x07,0x1F,0x3F,0xFF,0xFC,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x03, +0x0F,0x3F,0x7F,0xFC,0xF0,0xC0,0x80,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x3F,0xFF, +0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x03,0x00, +0x00,0x00,0x00,0x80,0xC0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,0xF0,0xC0,0x00,0x00, +0x00,0x00,0x80,0xC1,0xF7,0xFF,0xFF,0xFE,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00, +0x03,0x0F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x08,0x1E,0x1F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE, +0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x3C,0x10,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFC,0xF8, +0xF0,0xC0,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF8,0xFC,0xFC,0xF8,0x00,0x00,0x00,0x80, +0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, +0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x83,0x03,0x03,0x03,0x03,0x83, +0x83,0x83,0x83,0x83,0x83,0x81,0x81,0x81,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x80, +0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00, +0x80,0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80, +0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0x7F,0x7F, +0xFF,0xFF,0xFC,0xE0,0xF8,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0xFF, +0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x04, +0xFF,0xFF,0xFF,0xFF,0xC7,0xC7,0xC7,0xC7,0xC7,0xFF,0xFF,0xFF,0x78,0xFE,0xFF,0xFF, +0xFF,0x0F,0x07,0x07,0x07,0x07,0x0F,0xFF,0xFF,0xFF,0x00,0xFE,0xFF,0xFF,0xFF,0x07, +0x07,0x07,0x07,0x0F,0x0F,0x0F,0x0F,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0, +0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xC7,0xC7,0xC7, +0xC7,0xC7,0xEF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x3F,0x3F,0x3F,0x00,0x00, +0x03,0x0F,0x1F,0x1F,0x1F,0x1F,0x03,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3C,0x00,0x3F, +0x3F,0x3F,0x3F,0x0F,0x1F,0x1F,0x3F,0x3E,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x1C,0x0C, +0x3F,0x3F,0x3F,0x3F,0x03,0x03,0x03,0x03,0x03,0x3F,0x3F,0x3F,0x3E,0x0F,0x1F,0x3F, +0x3F,0x3E,0x3C,0x3C,0x3C,0x3C,0x3E,0x3F,0x1F,0x07,0x00,0x0F,0x1F,0x3F,0x3F,0x3C, +0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x1C,0x00,0x3F,0x3F,0x3F,0x3F,0x01,0x01,0x01,0x01, +0x3F,0x3F,0x3F,0x3F,0x00,0x3F,0x3F,0x3F,0x3F,0x00,0x3F,0x3F,0x3F,0x03,0x03,0x03, +0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 //1���ڏI�� +}; +const unsigned char Header2[1024]={ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xD0,0x90,0x90, +0x90,0x90,0x90,0x90,0xF0,0xF0,0xF0,0xF0,0x90,0x90,0x98,0x9C,0x9C,0x98,0xD0,0xC0, +0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, +0x10,0x10,0x90,0xD0,0xF0,0xFC,0x7C,0x78,0x30,0x20,0x00,0x00,0x00,0x00,0x00,0x00, +0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, +0xC0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0xFC,0xFC,0xFC,0x7C,0x08, +0x08,0xF0,0xFE,0xFE,0xFC,0x9C,0x8C,0x80,0x80,0x80,0x80,0xE0,0xE0,0xE0,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0F,0x2F,0x2F,0x24,0x24, +0x24,0x3F,0x3F,0x36,0xFF,0xFF,0xFF,0xFF,0x24,0x24,0x25,0x27,0x36,0x3E,0x3F,0x27, +0x03,0x01,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFE,0xFE, +0xFC,0xFE,0x47,0x41,0x41,0x40,0x40,0x60,0x70,0x70,0x60,0x40,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFF,0xFF,0xFF,0xFF,0xC4,0xF8, +0x3F,0x1F,0x07,0xFF,0xFF,0xFF,0xFF,0x40,0x40,0x40,0x70,0x70,0x60,0x40,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF, +0xFE,0x12,0x12,0x12,0xFE,0xFE,0xFE,0xFE,0x12,0x12,0x12,0xFE,0xFF,0xFF,0xFF,0x02, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF, +0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x01,0xFF,0xFF,0xFF,0xFF,0x00,0x00, +0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x20,0x20,0x20,0x20,0x38,0x38,0x38,0x30,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07, +0x03,0x01,0x01,0x01,0x3F,0x7F,0x7F,0x7F,0x71,0x71,0x71,0x73,0x73,0x73,0x7B,0x7F, +0x7F,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x18,0x78,0x7F,0x7F, +0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08, +0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0F,0x0F,0x0F,0x0F,0x08,0x08,0x08,0x08, +0x08,0x0C,0x0E,0x0E,0x0C,0x08,0x00,0x00,0x00,0x00,0x7F,0x7F,0x3F,0x3F,0x00,0x00, +0x00,0x00,0x00,0x7F,0x7F,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x20,0x20,0xE0,0xE0,0xE0,0x20,0x20,0x20,0x60,0xE0,0xC0,0x80,0x00,0x00, +0x20,0x20,0xE0,0xE0,0xE0,0x20,0x20,0x00,0x00,0x00,0x00,0xC0,0xE0,0x70,0x30,0x10, +0x10,0x30,0x70,0xF0,0xE0,0x00,0x00,0xC0,0xC0,0x80,0x00,0x00,0x00,0x80,0x80,0x80, +0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE8,0xF8,0xF8, +0xF0,0x60,0x40,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x80,0x80,0xC0,0xC0,0x80,0x00,0x00,0x00,0x20,0x60,0xE0,0xE0,0xC0,0xC0, +0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xC0,0xFF,0xFF,0x3F,0x00, +0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x03,0x00,0x00,0x00, +0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x03,0x0F,0x0F,0x07,0x87,0x83,0x03,0x03, +0x03,0x03,0x01,0x01,0xC1,0xF1,0xFD,0x7F,0x3F,0x1F,0x07,0x03,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0x70,0xF8,0xFC,0xFE,0xFF,0x3F,0x07,0x03,0x01, +0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x07,0x07,0x07,0x07,0x07,0x03, +0x03,0x03,0x03,0xE3,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F, +0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0x3C,0x0C,0x00,0x00, +0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xC0,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F, +0x1E,0x7C,0xFC,0xFF,0xE7,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, +0x06,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, +0x80,0xC0,0xE0,0xE0,0xF0,0xF8,0x7C,0x3E,0x1F,0x07,0x03,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x08,0x08,0x0F,0x0F,0x0F,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x08,0x08,0x0F,0x0F,0x0F,0x08,0x08,0x00,0x00,0x00,0x00,0x03,0x07,0x0E,0x0C,0x08, +0x08,0x0C,0x04,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x03,0x0F,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x7F,0x7F,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x03,0x03, +0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x03,0x07,0x0E,0x1F,0x1F,0x0F, +0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +};
diff -r 000000000000 -r 0e2aded4edb0 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Jan 21 12:51:26 2011 +0000 @@ -0,0 +1,136 @@ +// + +#include "mbed.h" + +#include "REL225L01.h" +REL225L01 tft; +#include "imagedata.h" + +//////////////////////////////////////// +//////// For SD_card //////// +//////////////////////////////////////// +#include "SDHCFileSystem.h" +SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sclk, cs, name (HW modification candidate) + +//////////////////////////////////////// +//////// For TextLCD //////// +//////////////////////////////////////// +#include "TextLCD.h" +#ifdef USE_TextLCD_20x4 +//TextLCD lcd( p24, p26, p27, p28, p29, p30, TextLCD::LCD20x4 ); // rs, e, d0-d3 +#else +TextLCD lcd( p24, p26, p27, p28, p29, p30 ); // rs, e, d0-d3 +#endif + +DigitalOut myled(LED1); + +void test_file_write( char *title, char *path ); +int position( void ); + +LocalFileSystem local("local"); + +int main() { + tft.lcd_init(); + printf("\r\n--------------- Starting -----------------\r\n"); + lcd.printf("----Starting----"); + lcd.locate(0,1); + wait(3); + test_file_write( "SD card", "/sd/star_bd.txt" ); + wait(2); + while(1){ + tft.lcd_clear(BLACK); + //wait(1); + tft.lcd_clear(WHITE); + // wait(1); + tft.lcd_clear(RED); + //wait(1); + tft.lcd_clear(GREEN); + // wait(1); + tft.lcd_clear(BLUE); + //tft.lcd_clear(BLACK); + //tft.lcd_image(0, Header1, MAGENTA, BLACK); + //tft.lcd_image(8, Header2, CYAN, BLACK); + FILE *fp = fopen("/sd/test1.bmp", "rb"); + if ( fp == NULL ) { + lcd.printf( "error" ); + error( "Could not open file for write\n" ); + } + int dat; + int Bdat,Gdat,Rdat; + int RGBdat; + for(int i=0;i<54;i++) + { + dat=fgetc(fp); //Header + } + tft.lcd_cmd(RAMWR); + for(int i=0;i<=320;i++) + { + for(int j=0;j<=240;j++) + { + Bdat=fgetc(fp); + Gdat=fgetc(fp); + Rdat=fgetc(fp); + RGBdat=((Rdat&0xF8)<<8)+((Gdat&0xFC)<<3)+((Bdat&0xF8)>>3); + tft.lcd_data(RGBdat); + } + } + fclose(fp); + wait(3); + + FILE *fp2 = fopen("/sd/test2.bmp", "rb"); + if ( fp2 == NULL ) { + lcd.printf( "error" ); + error( "Could not open file for write\n" ); + } + for(int i=0;i<54;i++) + { + dat=fgetc(fp2); //Header + } + tft.lcd_cmd(RAMWR); + for(int i=0;i<=320;i++) + { + for(int j=0;j<=240;j++) + { + Bdat=fgetc(fp2); + Gdat=fgetc(fp2); + Rdat=fgetc(fp2); + RGBdat=((Rdat&0xF8)<<8)+((Gdat&0xFC)<<3)+((Bdat&0xF8)>>3); + tft.lcd_data(RGBdat); + } + } + fclose(fp2); + wait(3); + + + wait(1); + } + + +} + + +void test_file_write( char *title, char *path ) { + // SD card test + lcd.locate( 0, position() ); + lcd.printf( "%s: ", title ); + + FILE *fp = fopen( path, "w" ); + if ( fp == NULL ) { + lcd.printf( "error" ); + error( "Could not open file for write\n" ); + } + fprintf( fp, "The mbed writing a file through the star board orange (%s)!", title ); + fclose( fp ); + + lcd.printf( "OK." ); +} + +int position( void ) { + static int p = 0; + +#ifdef USE_TextLCD_20x4 + return( ++p % 4 ); +#else + return( ++p % 2 ); +#endif +}
diff -r 000000000000 -r 0e2aded4edb0 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Jan 21 12:51:26 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e