SD-Card corrections on ersky9x board

Status line
FatFs on simu
This commit is contained in:
bsongis
2012-06-21 18:40:55 +00:00
parent 476eb4c2d5
commit fb493b5415
13 changed files with 168 additions and 44 deletions
+2 -2
View File
@@ -57,7 +57,7 @@
/ Locale and Namespace Configurations
/----------------------------------------------------------------------------*/
#define _CODE_PAGE 932
#define _CODE_PAGE 1252
/* The _CODE_PAGE specifies the OEM code page to be used on the target system.
/ Incorrect setting of the code page can cause a file open failure.
/
@@ -90,7 +90,7 @@
*/
#define _USE_LFN 0 /* 0 to 3 */
#define _USE_LFN 1 /* 0 to 3 */
#define _MAX_LFN 255 /* Maximum LFN length to handle (12 to 255) */
/* The _USE_LFN option switches the LFN support.
/
+7 -6
View File
@@ -332,9 +332,9 @@ ifeq ($(PCB), ARM)
CPPDEFS += -DPCBARM -DAUDIO -DHAPTIC -DPXX -DDSM2 -DDSM2_PPM
EXTRAINCDIRS += ersky9x CoOS/kernel CoOS/portable
BOARDSRC = board_ersky9x.cpp
SRC += ersky9x/core_cm3.c ersky9x/board_lowlevel.c ersky9x/crt.c ersky9x/vectors_sam3s.c
SRC += ersky9x/core_cm3.c ersky9x/board_lowlevel.c ersky9x/crt.c ersky9x/vectors_sam3s.c
SRC += CoOS/kernel/core.c CoOS/kernel/hook.c CoOS/kernel/task.c CoOS/kernel/event.c CoOS/kernel/time.c CoOS/kernel/timer.c CoOS/kernel/serviceReq.c CoOS/portable/GCC/port.c CoOS/portable/arch.c
SRC += FatFs/ff.c FatFs/fattime.c ersky9x/diskio.c
SRC += FatFs/ff.c FatFs/fattime.c FatFs/option/ccsbcs.c ersky9x/diskio.c
EEPROMSRC = eeprom_arm.cpp
PULSESSRC = pulses_arm.cpp
CPPSRC += ersky9x/audio.cpp haptic.cpp
@@ -345,14 +345,14 @@ ifeq ($(PCB), V4)
# V4 PCB, so ...
OPT = 2
CPPDEFS += -DPCBV4 -DAUDIO -DHAPTIC -DROTARY_ENCODERS
EXTRAINCDIRS += gruvin9x stock FatFs
EXTRAINCDIRS += gruvin9x stock FatFs FatFs/option
BOARDSRC += board_gruvin9x.cpp
EEPROMSRC = eeprom_avr.cpp
PULSESSRC = pulses_avr.cpp
CPPSRC += stock/audio.cpp haptic.cpp
ifeq ($(SDCARD), YES)
CPPSRC += gruvin9x/logs.cpp FatFs/fattime.c gruvin9x/rtc.cpp FatFs/ff.c gruvin9x/diskio.cpp
CPPSRC += gruvin9x/logs.cpp FatFs/fattime.c gruvin9x/rtc.cpp FatFs/ff.c FatFs/option/ccsbcs.c gruvin9x/diskio.cpp
MODS:=${MODS}S
endif
@@ -630,8 +630,8 @@ FOXLIB=-L/usr/local/lib \
-lFOX-1.6 \
-Wl,-rpath,$(FOXPATH)/src/.libs
simu: stamp_header $(BOARDSRC) $(CPPSRC) $(SRC) Makefile simu.cpp simpgmspace.cpp *.h *.lbm eeprom.bin
g++ simu.cpp $(CPPFLAGS) $(BOARDSRC) $(CPPSRC) $(SRC) simpgmspace.cpp $(ARCH) -MD -DSIMU -o simu $(FOXINC) $(FOXLIB) -pthread
simu: stamp_header $(BOARDSRC) $(CPPSRC) Makefile simu.cpp simpgmspace.cpp *.h *.lbm eeprom.bin
g++ simu.cpp $(CPPFLAGS) $(BOARDSRC) $(CPPSRC) simpgmspace.cpp $(ARCH) -MD -DSIMU -o simu $(FOXINC) $(FOXLIB) -pthread
eeprom.bin:
dd if=/dev/zero of=$@ bs=1 count=2048
@@ -717,6 +717,7 @@ clean_list :
$(REMOVE) $(TARGET).lst
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) *.o
$(REMOVE) */*.o
$(REMOVE) *.d
$(REMOVE) *.lst
$(REMOVE) allsrc.cpp
+4
View File
@@ -982,6 +982,10 @@ const pm_char * eeBackupModel(uint8_t i_fileSrc)
f_close(&archiveFile);
strcpy(statusLineMsg, PSTR("File "));
strcpy(statusLineMsg+5, &buf[sizeof(MODELS_PATH)]);
showStatusLine();
return NULL;
}
+2 -8
View File
@@ -47,11 +47,6 @@
#include "core_cm3.h"
#endif
#define BOARD_MCK 64000000
#define CardIsConnected() ( (PIOB->PIO_PDSR & PIO_PB7) == 0 )
//------------------------------------------------------------------------------
// Definitions
//------------------------------------------------------------------------------
@@ -91,7 +86,6 @@
#define BOARD_MAINOSC 12000000
/// Master clock frequency (when using board_lowlevel.c).
//#define BOARD_MCK 48000000
#define BOARD_MCK 64000000
//------------------------------------------------------------------------------
@@ -353,8 +347,6 @@
#define PIN_USART1_RTS {0x1 << 24, PIOA, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
#define PIN_USART1_EN {0x1 << 23, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT}
/// USB VBus monitoring pin definition.
#ifdef BOARD_REV_A
#define PIN_USB_VBUS {1 << 23, PIOC, ID_PIOC, PIO_INPUT, PIO_DEFAULT}
@@ -500,6 +492,8 @@
///// MCI Card Detect pin.
#define BOARD_SD_PIN_CD PIN_MCI_CD
#define CardIsConnected() ( (PIOB->PIO_PDSR & PIO_PB7) == 0 )
/*
#define BOARD_PSRAM_PINS PIN_EBI_DATA_BUS, PIN_EBI_NCS0, PIN_EBI_NRD, PIN_EBI_NWE, \
PIN_EBI_PSRAM_ADDR_BUS, PIN_EBI_PSRAM_NBS, PIN_EBI_A1
+5 -5
View File
@@ -86,7 +86,7 @@ extern uint32_t Master_frequency ;
/***************************************************************************/
void ResetHandler (void)
{
{
{
register uint32_t *pSrc;
register uint32_t *pDest;
register uint32_t m_freq ;
@@ -125,10 +125,10 @@ void ResetHandler (void)
pDest = &_sbss;
while(pDest < &_ebss)
{
*pDest++ = 0;
}
Master_frequency = m_freq ;
}
*pDest++ = 0;
}
Master_frequency = m_freq ;
}
/*
* And now the main function can be called.
+20 -10
View File
@@ -589,6 +589,7 @@ uint32_t sd_card_ready( void )
uint32_t sd_cmd16()
{
#if 0
Hsmci *phsmci = HSMCI;
if (CardIsConnected()) {
@@ -606,20 +607,24 @@ uint32_t sd_cmd16()
else {
return 0;
}
#else
return 0;
#endif
}
uint32_t sd_read_block(uint32_t block_no, uint32_t *data)
{
uint32_t result = 0;
Hsmci *phsmci = HSMCI;
if (Card_state == SD_ST_DATA) {
Hsmci *phsmci = HSMCI;
if (CardIsConnected()) {
//sd_cmd16();
sd_cmd16();
// Block size = 512, nblocks = 1
phsmci->HSMCI_BLKR = ((512) << 16) | 1;
phsmci->HSMCI_MR = (phsmci->HSMCI_MR & (~(HSMCI_MR_BLKLEN_Msk|HSMCI_MR_FBYTE))) | (HSMCI_MR_PDCMODE|HSMCI_MR_WRPROOF|HSMCI_MR_RDPROOF) | (512 << 16);
phsmci->HSMCI_RPR = (uint32_t)data;
phsmci->HSMCI_RCR = 512 / 4;
phsmci->HSMCI_RNCR = 0;
phsmci->HSMCI_PTCR = HSMCI_PTCR_RXTEN;
phsmci->HSMCI_ARGR = block_no << 9;
phsmci->HSMCI_CMDR = SD_READ_SINGLE_BLOCK;
@@ -628,28 +633,31 @@ uint32_t sd_read_block(uint32_t block_no, uint32_t *data)
while (retry-- > 0) {
CoTickDelay(1); // 2ms
if (phsmci->HSMCI_SR & HSMCI_SR_ENDRX) {
return 1;
result = 1;
break;
}
}
}
}
return 0;
phsmci->HSMCI_MR &= ~HSMCI_MR_PDCMODE;
return result;
}
uint32_t sd_write_block( uint32_t block_no, uint32_t *data )
{
uint32_t result = 0;
Hsmci *phsmci = HSMCI;
if (Card_state == SD_ST_DATA) {
Hsmci *phsmci = HSMCI;
if (CardIsConnected()) {
//sd_cmd16();
sd_cmd16();
// Block size = 512, nblocks = 1
phsmci->HSMCI_BLKR = ((512) << 16) | 1;
phsmci->HSMCI_MR = (phsmci->HSMCI_MR & (~(HSMCI_MR_BLKLEN_Msk|HSMCI_MR_FBYTE))) | (HSMCI_MR_PDCMODE|HSMCI_MR_WRPROOF|HSMCI_MR_RDPROOF) | (512 << 16);
phsmci->HSMCI_TPR = (uint32_t)data;
phsmci->HSMCI_TCR = 512 / 4;
phsmci->HSMCI_TNCR = 0;
phsmci->HSMCI_ARGR = block_no << 9;
phsmci->HSMCI_CMDR = SD_WRITE_SINGLE_BLOCK;
phsmci->HSMCI_PTCR = HSMCI_PTCR_TXTEN;
@@ -658,14 +666,16 @@ uint32_t sd_write_block( uint32_t block_no, uint32_t *data )
while (retry-- > 0) {
CoTickDelay(1); // 2ms
if (phsmci->HSMCI_SR & HSMCI_SR_NOTBUSY) {
return 1;
result = 1;
break;
}
}
}
}
return 0;
phsmci->HSMCI_MR &= ~HSMCI_MR_PDCMODE;
return result;
}
/*
+1 -1
View File
@@ -45,7 +45,7 @@
#define LOGS_PATH "/9XLOGS" // no trailing slash = important
#define LOGS_EXT ".CSV"
#define MODELS_PATH "/9XMODELS"
#define MODELS_EXT ".BIN"
#define MODELS_EXT ".bin"
extern char g_logFilename[21]; // "/9XLOGS/M00_000.CSV\0" max required length = 21
extern FATFS g_FATFS_Obj;
+1 -1
View File
@@ -778,11 +778,11 @@ void lcdSetRefVolt(uint8_t val)
#else
pioptr->PIO_ODR = 0x0000003CL ; // Set bits 2, 3, 4, 5 input
pioptr->PIO_PUER = 0x0000003CL ; // Set bits 2, 3, 4, 5 with pullups
#endif
#endif
pioptr->PIO_ODSR = lcdInputs; // Drive D0 low
lcdLock = 0 ;
#endif
}
#ifndef SIMU
+29
View File
@@ -604,6 +604,34 @@ const char * displayMenu(uint8_t event)
return result;
}
char statusLineMsg[STATUS_LINE_LENGTH];
uint16_t statusLineTimeout = 0;
uint8_t statusLineHeight = 0;
void showStatusLine()
{
statusLineHeight = 0;
statusLineTimeout = get_tmr10ms() + 3*100; /* 3 seconds */
}
void drawStatusLine()
{
if (get_tmr10ms() < statusLineTimeout) {
if (statusLineHeight < 8) statusLineHeight++;
}
else if (statusLineHeight) {
statusLineHeight--;
}
else {
return;
}
lcd_filled_rect(0, 7*FH+8-statusLineHeight, DISPLAY_W, 8, SOLID, WHITE);
lcd_putsAtt(5, 7*FH+1+8-statusLineHeight, statusLineMsg, BSS);
lcd_filled_rect(0, 7*FH+8-statusLineHeight, DISPLAY_W, 8, SOLID);
}
#endif
#if defined(ROTARY_ENCODERS)
@@ -632,6 +660,7 @@ void checkInFlightIncDecModel(uint8_t event, int8_t *value, int8_t i_min, int8_t
}
}
}
#endif
+5
View File
@@ -205,9 +205,14 @@ extern uint8_t s_menu_offset;
extern bool s_menu_more;
const char * displayMenu(uint8_t event);
extern const pm_char * s_sdcard_error;
#define STATUS_LINE_LENGTH 22
extern char statusLineMsg[STATUS_LINE_LENGTH];
void showStatusLine();
void drawStatusLine();
#else
#define s_menu_count 0
#define s_sdcard_error 0
#define displayStatusLine()
#endif
#endif
+5 -5
View File
@@ -132,9 +132,9 @@ bool listSDcardModels()
DIR dir;
char *fn; /* This function is assuming non-Unicode cfg. */
#if _USE_LFN
static char lfn[_MAX_LFN + 1];
TCHAR lfn[_MAX_LFN + 1];
fno.lfname = lfn;
fno.lfsize = sizeof lfn;
fno.lfsize = sizeof(lfn);
#endif
s_menu_count = 0;
@@ -321,16 +321,16 @@ void menuProcModelSelect(uint8_t event)
s_menu[s_menu_count++] = STR_SELECT_MODEL;
s_menu[s_menu_count++] = STR_BACKUP_MODEL;
s_menu[s_menu_count++] = STR_RESTORE_MODEL;
s_menu[s_menu_count++] = STR_DELETE_MODEL;;
s_menu[s_menu_count++] = STR_DELETE_MODEL;
}
else {
s_menu[s_menu_count++] = STR_CREATE_MODEL;
s_menu[s_menu_count++] = STR_RESTORE_MODEL;;
s_menu[s_menu_count++] = STR_RESTORE_MODEL;
}
}
else {
s_menu[s_menu_count++] = STR_BACKUP_MODEL;
s_menu[s_menu_count++] = STR_RESTORE_MODEL;;
s_menu[s_menu_count++] = STR_RESTORE_MODEL;
}
#else
if (g_eeGeneral.currModel != sub) {
+35 -6
View File
@@ -2311,7 +2311,6 @@ void perMain()
// Write the raw byte out to log file, if open
if (testLogOpen && (g_oLogFile.fs != 0))
f_putc(userDataRxBuffer[byt], &g_oLogFile);
}
#endif
@@ -2338,6 +2337,7 @@ void perMain()
#endif
g_menuStack[g_menuStackPtr](evt);
drawStatusLine();
refreshDisplay();
#if defined(PCBARM)
@@ -2816,11 +2816,41 @@ void mixerTask(void * pdata)
}
}
extern "C" {
void usbMassStorage()
{
}
}
void menusTask(void * pdata)
{
register uint32_t shutdown_state = 0;
while ((shutdown_state=check_soft_power()) <= e_power_trainer) {
while (1) {
shutdown_state = check_soft_power();
#if 0
if (shutdown_state == e_power_off)
break;
else if (shutdown_state == e_power_usb) {
const char STR_SDCARD[] = "SD Card";
const char STR_BOOTLOADER[] = "Bootloader";
s_menu[s_menu_count++] = STR_SDCARD;
s_menu[s_menu_count++] = STR_BOOTLOADER;
uint8_t event = getEvent(false);
const char * result = displayMenu(event);
if (result) {
if (result == STR_BOOTLOADER)
break;
else {
usbMassStorage();
s_menu_count = 0;
}
}
}
#else
if (shutdown_state >= e_power_usb)
break;
#endif
perMain();
CoTickDelay(5); // 10ms for now
@@ -2829,10 +2859,6 @@ void menusTask(void * pdata)
SysTick->CTRL = 0; // turn off systick
#if defined(HAPTIC)
hapticOff();
#endif
lcd_clear() ;
displayPopup(STR_SHUTDOWN);
g_eeGeneral.unexpectedShutdown=0;
@@ -2843,6 +2869,9 @@ void menusTask(void * pdata)
#endif
lcd_clear() ;
refreshDisplay() ;
#if defined(HAPTIC)
hapticOff();
#endif
soft_power_off(); // Only turn power off if necessary
if (shutdown_state == e_power_usb) {
+52
View File
@@ -271,3 +271,55 @@ static void EeFsDump(){
puts("");
}
#endif
#if defined(SDCARD)
#include "FatFs/ff.h"
FRESULT f_mount (BYTE, FATFS*)
{
return FR_OK;
}
FRESULT f_open (FIL* fil, const TCHAR*name, BYTE)
{
//fil->fs = (FATFS*)fopen(name);
return FR_OK;
}
FRESULT f_read (FIL*, void*, UINT, UINT*)
{
return FR_OK;
}
FRESULT f_write (FIL*, const void*, UINT, UINT*)
{
return FR_OK;
}
FRESULT f_lseek (FIL*, DWORD)
{
return FR_OK;
}
FRESULT f_close (FIL*)
{
return FR_OK;
}
FRESULT f_opendir (DIR*, const TCHAR*)
{
return FR_OK;
}
FRESULT f_readdir (DIR*, FILINFO*)
{
return FR_OK;
}
FRESULT f_mkdir (const TCHAR*)
{
return FR_OK;
}
uint32_t Card_state = 8;
#endif