This commit is contained in:
Mario Hüttel 2017-03-31 13:25:42 +02:00
parent 266acb48c8
commit 70aa56497f
25 changed files with 154 additions and 25 deletions

View File

@ -3,9 +3,9 @@
#Compiler: arm-none-eabi
#####################################################################################
#Add Files and Folders below#########################################################
CFILES = main.c syscalls.c UART/uart.c cmsis_boot/system_stm32f4xx.c
CFILES = main.c syscalls/syscalls.c uart/uart.c startup/system_stm32f4xx.c
ASFILES = boot/startup_stm32f4xx.S
INCLUDEPATH = -Iboot -Imathlib -Icmsis -Icmsis_boot -IUART
INCLUDEPATH = -Iinclude
target = stm32f4sdio
@ -19,8 +19,7 @@ mapfile = dafuqishappening
#TODO
CFILES += FATFS/option/syscall.c FATFS/option/ccsbcs.c FATFS/diskio.c FATFS/ff.c FATFS/shimatta_sdio_driver/shimatta_sdio-driver.c
INCLUDEPATH += -IFATFS -IFATFS/shimatta_sdio_driver
CFILES += fatfs/option/syscall.c fatfs/option/ccsbcs.c fatfs/diskio.c fatfs/ff.c fatfs/shimatta_sdio_driver/shimatta_sdio-driver.c
###################################################################################
CC=arm-none-eabi-gcc

View File

@ -8,9 +8,8 @@
/*-----------------------------------------------------------------------*/
//Only ONE device with ONE partition!!!
#include "diskio.h" /* FatFs lower layer API */
#include <shimatta_sdio-driver.h>
#include <fatfs/diskio.h> /* FatFs lower layer API */
#include "shimatta_sdio_driver/shimatta_sdio-driver.h"
/* Definitions of physical drive number for each drive */
#define SDCARD 0 /* Example: Map ATA harddisk to physical drive 0 */

View File

@ -16,8 +16,8 @@
/----------------------------------------------------------------------------*/
#include "ff.h" /* Declarations of FatFs API */
#include "diskio.h" /* Declarations of disk I/O functions */
#include <fatfs/ff.h> /* Declarations of FatFs API */
#include <fatfs/diskio.h> /* Declarations of disk I/O functions */
//For get_fattime:
//#include <shimatta_sdio-driver.h>

View File

@ -25,7 +25,7 @@
/ 1258 Vietnam (OEM, Windows)
*/
#include "../ff.h"
#include <fatfs/ff.h>
#if _CODE_PAGE == 437

View File

@ -4,7 +4,7 @@
/*------------------------------------------------------------------------*/
#include "../ff.h"
#include <fatfs/ff.h>
#if _FS_REENTRANT

View File

@ -5,7 +5,7 @@
* Mario Hüttel
*/
#include <shimatta_sdio-driver.h>
#include "shimatta_sdio-driver.h"
#define SETAF(PORT,PIN,AF) PORT->AFR[(PIN < 8 ? 0 : 1)] |= AF << ((PIN < 8 ? PIN : (PIN - 8)) * 4)

View File

@ -0,0 +1,133 @@
/*
* shimatta_sdio-driver.h
*
* Created on: Apr 26, 2015
* Mario Hüttel
*/
#ifndef FATFS_SHIMATTA_SDIO_DRIVER_SHIMATTA_SDIO_DRIVER_H_
#define FATFS_SHIMATTA_SDIO_DRIVER_SHIMATTA_SDIO_DRIVER_H_
#include <fatfs/diskio.h>
#include <stm32f4xx.h>
DSTATUS SDIO_status();
DSTATUS SDIO_initialize();
DRESULT SDIO_disk_read(BYTE *buff, DWORD sector, UINT count);
DRESULT SDIO_disk_write(const BYTE *buff, DWORD sector, UINT count);
DRESULT SDIO_disk_ioctl(BYTE cmd, void* buff);
DWORD get_fattime();
//Defines for Card Status in struct _CardStatus
#define CURRENT_STATE_IDLE 0
#define CURRENT_STATE_READY 1
#define CURRENT_STATE_IDENT 2
#define CURRENT_STATE_STBY 3
#define CURRENT_STATE_TRAN 4
#define CURRENT_STATE_DATA 5
#define CURRENT_STATE_RCV 6
#define CURRENT_STATE_PRG 7
#define CURRENT_STATE_DIS 8
typedef struct _CardStatus {
uint32_t reserved : 3;
uint32_t AKE_SEQ_ERROR : 1;
uint32_t reserved_2 : 1;
uint32_t APP_CMD : 1;
uint32_t reserved_3 : 2;
uint32_t READY_FOR_DATA : 1;
uint32_t CURRENT_STATE : 4;
uint32_t ERASE_RESET : 1;
uint32_t CARD_ECC_DIABLED : 1;
uint32_t WP_ERASE_SKIP : 1;
uint32_t CSD_OVERWRITE : 1;
uint32_t reserved17 : 1;
uint32_t reserved18 : 1;
uint32_t ERROR : 1;
uint32_t CC_ERROR : 1;
uint32_t CARD_ECC_FAILED : 1;
uint32_t ILLEGAL_COMMAND : 1;
uint32_t COM_CRC_ERROR : 1;
uint32_t LOCK_UNLOCK_FAILED : 1;
uint32_t CARD_IS_LOCKED : 1;
uint32_t WP_VIOLATION : 1;
uint32_t ERASE_PARAM : 1;
uint32_t ERASE_SEQ_ERROR : 1;
uint32_t BLOCK_LEN_ERROR : 1;
uint32_t ADDRESS_ERROR : 1;
uint32_t OUT_OF_RANGE : 1;
}CardStatus_t;
typedef enum {CARD_NONE = 0, MMC, SD_V1, SD_V2_SC, SD_V2_HC} card_type_t;
// MMC not supported
typedef struct _SDInfo {
uint16_t rca;
card_type_t type;
}SDInfo_t;
typedef union _StatusConv {
CardStatus_t statusstruct;
uint32_t value;
}StatusConv_t;
//General Definitions
//Blocksize: 512 = 2^9 => 9
#define BLOCKSIZE 9 //9
//Hardware Flow: Prevents over- and underruns.
#define HW_FLOW 0 //0
//1 bit: 0
//4 bit: 1
#define BUSWIDTH 1 //1
//Initial Transfer CLK (ca. 400kHz)
#define INITCLK 120 //120
//Working CLK (Maximum)
#define WORKCLK 0 //0
//Data Timeout in CLK Cycles
#define DTIMEOUT 150 //150
//DMA Stream used for TX and RX DMA2 Stream 3 or 6 possible
#define DMASTREAM DMA2_Stream3
//Port Definitions
#define PORTCLKMASK (RCC_AHB1ENR_GPIODEN | RCC_AHB1ENR_GPIOCEN)
#define ALTFUNC 12
#define CLKPORT GPIOC
#define D0PORT GPIOC
#define D1PORT GPIOC
#define D2PORT GPIOC
#define D3PORT GPIOC
#define CMDPORT GPIOD
#define CLKPIN 12
#define D0PIN 8
#define D1PIN 9
#define D2PIN 10
#define D3PIN 11
#define CMDPIN 2
// Write Protection
#define SDIO_ENABLE_WRITEPROT 0
#define WRITEPROT_PORT GPIOD // Add this port to port clock mask!
#define WRITEPROT_PIN 0
#define WRITEPROT_PULLUP 0
#define WRITEPROT_ACTIVE_LEVEL 0
// Card inserted pin
#define SDIO_ENABLE_INS 0
#define INS_PORT GPIOD // Add this port to port clock mask!
#define INS_PIN 0
#define INS_PULLUP 0
#define INS_ACTIVE_LEVEL 0
#endif /* FATFS_SHIMATTA_SDIO_DRIVER_SHIMATTA_SDIO_DRIVER_H_ */

View File

@ -151,9 +151,9 @@
#endif
#include <stdint.h> /* standard types definitions */
#include <core_cmInstr.h> /* Core Instruction Access */
#include <core_cmFunc.h> /* Core Function Access */
#include <core_cm4_simd.h> /* Compiler specific SIMD Intrinsics */
#include "core_cmInstr.h" /* Core Instruction Access */
#include "core_cmFunc.h" /* Core Function Access */
#include "core_cm4_simd.h" /* Compiler specific SIMD Intrinsics */
#endif /* __CORE_CM4_H_GENERIC */

View File

@ -181,8 +181,8 @@ typedef enum
* @}
*/
#include "core_cm4.h" /* Cortex-M4 processor and core peripherals */
#include "system_stm32f4xx.h"
#include <cmsis/core_cm4.h> /* Cortex-M4 processor and core peripherals */
#include <startup/system_stm32f4xx.h>
#include <stdint.h>
/** @addtogroup Peripheral_registers_structures

6
main.c
View File

@ -5,10 +5,8 @@
* Author: mari
*/
#include <stm32f4xx.h>
#include <arm_math.h>
#include <system_stm32f4xx.h>
#include <ff.h>
#include <cmsis/arm_math.h>
#include <fatfs/ff.h>
#define OUTPUT(pin) (0b01 << (pin * 2))

View File

@ -114,7 +114,7 @@
* @{
*/
#include "stm32f4xx.h"
#include <stm32f4xx.h>
/**
* @}

View File

@ -2,10 +2,10 @@
* syscalls.c
*
* Created on: Dec 14, 2014
* Author: shino-chan
* Author: Mario Huettel <mario.huettel@gmx.net>
*/
#include "uart.h"
#include <uart/uart.h>
char* _sbrk(int incr) {
extern char heap_low; // Defined by the linker

View File

@ -8,7 +8,7 @@
//PA2 => TX
//PA3 => RX
//Alternate Function 7
#include "uart.h"
#include <uart/uart.h>
#include <stm32f4xx.h>
void initUART() {