USBMSD SD card Hello World for Mbed platforms

Dependencies:   mbed USBMSD_SD USBDevice

USBDevice/USBMSD/AT45.h

Committer:
samux
Date:
2011-11-11
Revision:
2:27a7e7f8d399

File content as of revision 2:27a7e7f8d399:

/* mbed Library - AT45
 * Copyright (c) 2008, cstyles


Class to make the AT45 SPI flash parts from ATMEL appear as SRAM or 512 byte block devices

This class supports 011,021,041,081,161,321,641 variants of the AT45DBxxx family

|| Code || Density  || Page size || Pages || Package ||
|| 011  || 1        || 256       || 512   || 8 SOIC  ||
|| 021  || 2        || 256       || 1024  || 8 SOIC  ||
|| 041  || 4        || 256       || 2048  || 8 SOIC  ||
|| 081  || 8        || 256       || 4096  || 8 SOIC  ||
|| 161  || 16       || 512       || 4096  || 8 SOIC  ||
|| 321  || 32       || 512       || 8192  || 8 SOIC  ||
|| 641  || 64       || 1024      || 8192  || 28 TSOP ||

To do :

 - Check for current status on Erase Chip command not working.

 */

#ifndef MBED_AT45_H
#define MBED_AT45_H
 
#include "mbed.h"

class AT45 {
    
    // Public functions
    public:        

        AT45(PinName mosi = p5, PinName miso = p6, PinName clk = p7, PinName ncs = p8);

        void erase (void);

        // Integer RAM access
        char read (int address);  // read int from address. Automatically word-aligns address
        void write (int address, char data); // Write int to address. Automatically world-aligns address

        // Block device access
        int blocks (void);  // returns the number of 512 byte blocks
        int blockread (char* data, int block);  // read a block
        int blockwrite (char* data, int block); // write a block
        int blockerase (int block); // erase a block
    
        // Part interrogation
        int size (void);      // Device size in bytes
        int pages (void);      // Device size in bytes
        int pagesize (void);      // Device size in bytes
 
        int id (void);        // ID of part
        int status (void);    // Status register
        void pollbusy (void); // Wait until Flash is not busy

    // Private variables
    private :    
   
        SPI _spi;
        DigitalOut _ncs;    

        int _pages;            // Integer number of pages
        int _pagesize;         // page size, in bytes 
        int _devicesize;       // device size in bytes
        int _blocks;           // Number of 512 byte blocks
    
        // Some flags for buffering
        int _buffer1address;
        int _buffer2address;
        int _lru;
    
        // Helper routunes
        void _reset();
        void _select();
        void _deselect();
        void _pollbusy (void);               
    
        // accessing SRAM buffers
        void _sramwrite (int buffer, int address, int data);
        int _sramread (int buffer, int address);
    
        // Transferring SRAM buffers to/from FLASH
        void _flashwrite (int buffer, int paddr);
        void _flashread (int buffer, int paddr);

        // Allocate buffer
        int _allocatebuffer(int address);
        void _flushbuffer(int buffer);

        // Reading FLASH directly
        int _memread (int address);
    
        // Calculate page/subpage addresses
        int _getpaddr (int);
        int _getbaddr (int);
    
        // Send 3 byte address
        void _sendaddr (int address);
        
};

#endif