Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
fwatch
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
8
Issues
8
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
fwatch
Commits
d1606e77
Commit
d1606e77
authored
Jul 23, 2014
by
Xavier Piroux
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
working on implementation of SD driver throug SPI
parent
44534990
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
82 additions
and
12 deletions
+82
-12
config_mdriver_sd.h
...n/freertos_blink_fat/src/media-drv/sd/config_mdriver_sd.h
+9
-1
sd_driver_f.c
...parison/freertos_blink_fat/src/media-drv/sd/sd_driver_f.c
+73
-11
No files found.
sw/os-comparison/freertos_blink_fat/src/media-drv/sd/config_mdriver_sd.h
View file @
d1606e77
...
...
@@ -10,17 +10,25 @@
#error Incompatible MDRIVER_SD version number!
#endif
#define PIN_UC_PC3 12
#define PIN_UC_PC3
PRS_GPIO_PIN
12
#define PIN_UC_PD0 28
#define PIN_UC_PD1 29
#define PIN_UC_PD2 30
#define PIN_UC_PD3 31
//SPI protocole
#define PIN_UC_SD_MOSI PIN_UC_PD0
#define PIN_UC_SD_MISO PIN_UC_PD1
#define PIN_UC_SD_CLK PIN_UC_PD2
#define PIN_UC_SD_CS_N PIN_UC_PD3
//checking if SD card is present
#define PIN_UC_SD_EN PIN_UC_PC3
/* usage : add those pins values to GPIO_BASE */
#define MDRIVER_SD_SECTOR_SIZE 512
/* Sector size */
#define MDRIVER_SD_VOLUME0_SIZE (32 * 1024)
/* definition for size of sddrive0 */
#endif
/* _CONFIG_MDRIVER_SD_H_ */
sw/os-comparison/freertos_blink_fat/src/media-drv/sd/sd_driver_f.c
View file @
d1606e77
...
...
@@ -3,9 +3,11 @@
*/
#include "../../api/api_mdriver_
ram
.h"
#include "../../api/api_mdriver_
sd
.h"
#include "config_mdriver_sd.h"
#include "../../psp/include/psp_string.h"
#include "em_gpio.h"
#include "em_cmu.h"
#if VER_MDRIVER_SD_MAJOR != 1 || VER_MDRIVER_SD_MINOR != 0
#error Incompatible MDRIVER_SD version number!
...
...
@@ -37,6 +39,24 @@
#error Incompatible MDRIVER_RAM version number!
#endif
static
int
sd_card_present
(
F_DRIVER
*
driver
);
typedef
struct
{
//TODO: we can improve and add the USART number here
unsigned
long
maxsector
;
int
use
;
F_DRIVER
*
driver
;
}
t_SdDrv
;
static
F_DRIVER
t_drivers
[
1
];
static
t_SdDrv
SdDrv
[
1
]
=
{
{
(
MDRIVER_SD_VOLUME0_SIZE
/
MDRIVER_SD_SECTOR_SIZE
),
0
,
&
t_drivers
[
0
]
}
};
static
int
sd_readsector
(
F_DRIVER
*
driver
,
void
*
data
,
unsigned
long
sector
)
{
//TODO:implement sd_readsector
return
-
1
;
...
...
@@ -46,17 +66,59 @@ static int sd_writesector ( F_DRIVER * driver, void * data, unsigned long sector
return
-
1
;
}
static
int
sd_getphy
(
F_DRIVER
*
driver
,
F_PHY
*
phy
)
{
//TODO:implement sd_getphy
return
-
1
;
t_SdDrv
*
p
=
(
t_SdDrv
*
)(
driver
->
user_ptr
);
if
(
sd_card_present
(
driver
)
!=
0
)
{
return
MDRIVER_SD_ERR_NOTAVAILABLE
;
}
phy
->
number_of_sectors
=
p
->
maxsector
;
phy
->
bytes_per_sector
=
MDRIVER_SD_SECTOR_SIZE
;
return
MDRIVER_SD_NO_ERROR
;
}
static
void
sd_release
(
F_DRIVER
*
driver
)
{
//TODO:implement sd_release
return
;
t_SdDrv
*
p
=
(
t_SdDrv
*
)(
driver
->
user_ptr
);
if
(
p
==
SdDrv
)
{
//TODO: check if SD protocol and disconnect properly the SD through SPI + SD protocol
p
->
use
=
0
;
}
}
F_DRIVER
*
sd_initfunc
(
unsigned
long
driver_param
)
{
//TODO:implement sd_initfunc
/* Enabling clock to USART 0*/
//CMU_ClockEnable(cmuClock_USART0, true);
//SPI_setup(USART0_NUM, GPIO_POS1, false);
return
NULL
;
static
int
sd_card_present
(
F_DRIVER
*
driver
)
{
return
(
GPIO_PortInGet
(
gpioPortC
)
&
0x8
);
//pin = PC3
}
F_DRIVER
*
sd_initfunc
(
unsigned
long
driver_param
)
{
t_SdDrv
*
p
;
p
=
SdDrv
+
driver_param
;
if
(
p
!=
SdDrv
)
{
return
0
;
}
if
(
p
->
use
)
{
return
0
;
}
{
GPIO_Mode_TypeDef
gpioModeSD_EN
=
gpioModeInput
;
GPIO_PinModeSet
(
gpioPortC
,
3
,
gpioModeSD_EN
,
0
);
/* init pin SD_EN to check if SD is plugged */
/* Enabling clock to USART 1*/
CMU_ClockEnable
(
cmuClock_USART1
,
true
);
SPI_setup
(
1
,
1
,
1
);
//init SD SPI
//TODO: check specif of SD protocol and init SD through SPI + SD protocol
(
void
)
psp_memset
(
p
->
driver
,
0
,
sizeof
(
F_DRIVER
)
);
p
->
driver
->
readsector
=
sd_readsector
;
p
->
driver
->
writesector
=
sd_writesector
;
p
->
driver
->
getphy
=
sd_getphy
;
p
->
driver
->
release
=
sd_release
;
p
->
driver
->
user_ptr
=
p
;
p
->
use
=
1
;
return
p
->
driver
;
}
}
/* ram_initfunc */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment