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

Last change on this file since 374 was 295, checked in by alain, 11 years ago

Introducing a major release, to suppoort the tsar_generic_leti platform
and the various (external or internal) peripherals configurations.
The map.xml format has been modified, in order to support the new
vci_iopic componentand a new policy for peripherals initialisation.
The IRQs are nom described in the XICU and IOPIC components
(and not anymore in the processors).
To enforce this major change, the map.xml file signature changed:
The signature value must be: 0xDACE2014

This new release has been tested on the tsar_generic_leti platform
for the following mappings:

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