source: soft/giet_vm/giet_drivers/sdc_driver.h @ 530

Last change on this file since 530 was 529, checked in by alain, 10 years ago

1) Removing the IOC driver (integrated in the FAT library).
2) Simplifying the BDV, HBA, SDC, RDK drivers: they support
only two modes (synchronous => polling / descheduling => IRQ),
and only one access function (for both read/write).

File size: 4.7 KB
RevLine 
[284]1///////////////////////////////////////////////////////////////////////////////////
2// File     : sdc_driver.h
3// Date     : 31/08/2012
4// Author   : cesar fuguet
5// Copyright (c) UPMC-LIP6
6///////////////////////////////////////////////////////////////////////////////////
[437]7
[284]8#ifndef _GIET_SDC_DRIVER_H_
9#define _GIET_SDC_DRIVER_H_
[283]10
11#include <ioc_driver.h>
12#include <spi_driver.h>
13#include <mapping_info.h>
14
[284]15///////////////////////////////////////////////////////////////////////////////
16// SD card structure definition
17///////////////////////////////////////////////////////////////////////////////
[283]18struct sdcard_dev
19{ 
[284]20    // SPI controller pointer
[283]21    struct spi_dev * spi;
22
[284]23    // block length of the SDCARD
[283]24    unsigned int block_length;
25
[284]26    // access pointer representing the offset in bytes used to read or write in
27    // the SDCARD. This driver is for cards SDSD, therefore this offset must be
28    // multiple of the block length
[283]29    unsigned int access_pointer;
30
[284]31    // slave ID. This ID represents the number of the slave select signal used
32    // in the hardware platform (SPI channel)
33    int slave_id;
[283]34
[284]35    // is the card high capacity ?
[283]36    int sdhc;
37};
38
[437]39///////////////////////////////////////////////////////////////////////////////
40// This function initializes the SPI controller and call sdc_open to
41// initialize  the SD card
42// - channel: channel to initialize (only channel 0 supported)
43// Returns 0 if success, other value if failure
44///////////////////////////////////////////////////////////////////////////////
[295]45unsigned int _sdc_init();
[283]46
[437]47///////////////////////////////////////////////////////////////////////////////
[529]48// Transfer data between the block device and a memory buffer.
49// - use_irq   : not used, as DMA is not supported yet
50// - to_mem    : to memory if non zero
51// - lba       : first block index on the block device
52// - buf_vaddr : base address of the memory buffer
53// - count     : number of blocks to be transfered.
[437]54// Returns 0 if success, > 0 if error.
55///////////////////////////////////////////////////////////////////////////////
[529]56unsigned int _sdc_access( unsigned int       use_irq, 
57                          unsigned int       to_mem,
58                          unsigned int       lba,
59                          unsigned long long buf_vaddr,
60                          unsigned int       count);
[283]61
[437]62///////////////////////////////////////////////////////////////////////////////
[284]63// SD card constants
64///////////////////////////////////////////////////////////////////////////////
[283]65
[284]66// Number of retries after an unacknowledge command
67#define SDCARD_COMMAND_TIMEOUT  100
[283]68
[284]69// This command is a simple SD commmand
70#define SDCARD_CMD              0
[283]71
[284]72// This is an application specific command
73#define SDCARD_ACMD             1
[283]74
[284]75// The transmition is done in the negative edge of the clock
76#define SDCARD_TX_NEGEDGE       0
[283]77
[284]78// The transmition is done in the positive edge of the clock
79#define SDCARD_TX_POSEDGE       1
[283]80
[284]81// The reception is done in the negative edge of the clock
82#define SDCARD_RX_NEGEDGE       0
[283]83
[284]84// The reception is done in the positive edge of the clock
85#define SDCARD_RX_POSEDGE       1
[283]86
[284]87///////////////////////////////////////////////////////////////////////////////
88// SD card macros
89///////////////////////////////////////////////////////////////////////////////
[283]90
[284]91///////////////////////////////////////////////////////////////////////////////
92//   SDCARD_CHECK_R1_VALID()
93// This macro checks if the SD card response is valid
94// - x: SD card response
95// Returns 1 if valid and 0 otherwise
96///////////////////////////////////////////////////////////////////////////////
[283]97#define SDCARD_CHECK_R1_VALID(x)    (~x & SDCARD_R1_RSP_VALID) ? 1 : 0
98
[284]99///////////////////////////////////////////////////////////////////////////////
100//   SDCARD_CHECK_R1_ERROR()
101// This macro checks if there is an error in SD card response
102// - x: SD card response
103// Returns 1 if error and 0 otherwise
104///////////////////////////////////////////////////////////////////////////////
[283]105#define SDCARD_CHECK_R1_ERROR(x)    ( x & 0x7E)                ? 1 : 0
106
[284]107// SD card response 1 (R1) format constants
108#define SDCARD_R1_IN_IDLE_STATE     ( 1 << 0 ) // R1 bit 0
109#define SDCARD_R1_ERASE_RESET       ( 1 << 1 ) // R1 bit 1
110#define SDCARD_R1_ILLEGAL_CMD       ( 1 << 2 ) // R1 bit 2
111#define SDCARD_R1_COM_CRC_ERR       ( 1 << 3 ) // R1 bit 3
112#define SDCARD_R1_ERASE_SEQ_ERR     ( 1 << 4 ) // R1 bit 4
113#define SDCARD_R1_ADDRESS_ERR       ( 1 << 5 ) // R1 bit 5
114#define SDCARD_R1_PARAMETER_ERR     ( 1 << 6 ) // R1 bit 6
115#define SDCARD_R1_RSP_VALID         ( 1 << 7 ) // R1 bit 7
[283]116
117#endif
118
[284]119// Local Variables:
120// tab-width: 4
121// c-basic-offset: 4
122// c-file-offsets:((innamespace . 0)(inline-open . 0))
123// indent-tabs-mode: nil
124// End:
125// vim: filetype=c:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Note: See TracBrowser for help on using the repository browser.