|
|
@@ -47,6 +47,8 @@
|
|
|
#include "sfud.h"
|
|
|
#include "snfud.h"
|
|
|
|
|
|
+
|
|
|
+#if (DEVICE_TYPE_SELECT == SPI_NOR_FLASH) || (DEVICE_TYPE_SELECT == SPI_NAND_FLASH)
|
|
|
/* Misc definitions. */
|
|
|
#define sfSIGNATURE 0x41404342UL
|
|
|
#define sfHUNDRED_64_BIT ( 100ull )
|
|
|
@@ -67,7 +69,6 @@ static int32_t prvFFWrite( uint8_t *pucBuffer, uint32_t ulSectorNumber, uint32_t
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
|
|
/*_RB_ Variables require a comment block where appropriate. */
|
|
|
-static sfud_flash *sflash;
|
|
|
static SemaphoreHandle_t xPlusFATMutex;
|
|
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
@@ -78,17 +79,17 @@ static int32_t prvFFRead( uint8_t *pucBuffer, uint32_t ulSectorNumber, uint32_t
|
|
|
/*_RB_ Many of the comments in this file apply to other functions in the file. */
|
|
|
|
|
|
if( ( pxDisk != NULL ) &&
|
|
|
- ( sflash != NULL ) &&
|
|
|
+ ( pxDisk->pvTag != NULL ) &&
|
|
|
( pxDisk->ulSignature == sfSIGNATURE ) &&
|
|
|
( pxDisk->xStatus.bIsInitialised != pdFALSE ) &&
|
|
|
( ulSectorNumber < pxDisk->ulNumberOfSectors ) &&
|
|
|
( ( pxDisk->ulNumberOfSectors - ulSectorNumber ) >= ulSectorCount ) )
|
|
|
{
|
|
|
#if DEVICE_TYPE_SELECT == SPI_NOR_FLASH
|
|
|
- iReturn = sfud_read(sflash, sfDISK_MEDIA_OFFSET + ulSectorNumber * sfSECTOR_SIZE,
|
|
|
+ iReturn = sfud_read((sfud_flash *)pxDisk->pvTag, sfDISK_MEDIA_OFFSET + ulSectorNumber * sfSECTOR_SIZE,
|
|
|
ulSectorCount * sfSECTOR_SIZE, pucBuffer);
|
|
|
-#else //elif DEVICE_TYPE_SELECT == SPI_NAND_FLASH
|
|
|
- iReturn = snfud_read(sflash, sfDISK_MEDIA_OFFSET + ulSectorNumber * sfSECTOR_SIZE,
|
|
|
+#elif DEVICE_TYPE_SELECT == SPI_NAND_FLASH
|
|
|
+ iReturn = snfud_read((sfud_flash *)pxDisk->pvTag, sfDISK_MEDIA_OFFSET + ulSectorNumber * sfSECTOR_SIZE,
|
|
|
ulSectorCount * sfSECTOR_SIZE, pucBuffer);
|
|
|
#endif
|
|
|
/*_RB_ I'm guessing 4096 is a sector size, but that needs to be clear.
|
|
|
@@ -125,17 +126,17 @@ static int32_t prvFFWrite( uint8_t *pucBuffer, uint32_t ulSectorNumber, uint32_t
|
|
|
int32_t iReturn;
|
|
|
|
|
|
if( ( pxDisk != NULL ) &&
|
|
|
- ( sflash != NULL ) &&
|
|
|
+ ( pxDisk->pvTag != NULL ) &&
|
|
|
( pxDisk->ulSignature == sfSIGNATURE ) &&
|
|
|
( pxDisk->xStatus.bIsInitialised != pdFALSE ) &&
|
|
|
( ulSectorNumber < pxDisk->ulNumberOfSectors ) &&
|
|
|
( ( pxDisk->ulNumberOfSectors - ulSectorNumber ) >= ulSectorCount ) )
|
|
|
{
|
|
|
#if DEVICE_TYPE_SELECT == SPI_NOR_FLASH
|
|
|
- iReturn = sfud_erase_write(sflash, sfDISK_MEDIA_OFFSET + ulSectorNumber * sfSECTOR_SIZE,
|
|
|
+ iReturn = sfud_erase_write((sfud_flash *)pxDisk->pvTag, sfDISK_MEDIA_OFFSET + ulSectorNumber * sfSECTOR_SIZE,
|
|
|
ulSectorCount * sfSECTOR_SIZE, pucBuffer);
|
|
|
-#else //elif DEVICE_TYPE_SELECT == SPI_NAND_FLASH
|
|
|
- iReturn = snfud_erase_write(sflash, sfDISK_MEDIA_OFFSET + ulSectorNumber * sfSECTOR_SIZE,
|
|
|
+#elif DEVICE_TYPE_SELECT == SPI_NAND_FLASH
|
|
|
+ iReturn = snfud_erase_write((sfud_flash *)pxDisk->pvTag, sfDISK_MEDIA_OFFSET + ulSectorNumber * sfSECTOR_SIZE,
|
|
|
ulSectorCount * sfSECTOR_SIZE, pucBuffer);
|
|
|
#endif
|
|
|
if( iReturn == 0 ) /*_RB_ Signed/unsigned mismatch (twice!) */
|
|
|
@@ -164,17 +165,15 @@ static int32_t prvFFWrite( uint8_t *pucBuffer, uint32_t ulSectorNumber, uint32_t
|
|
|
#if DEVICE_TYPE_SELECT == SPI_NAND_FLASH
|
|
|
static void prvFFFlushCache( struct xFFDisk * pxDisk )
|
|
|
{
|
|
|
- if( sflash != NULL )
|
|
|
- {
|
|
|
- snfud_flush(sflash);
|
|
|
+ if(( pxDisk != NULL ) && ( pxDisk->pvTag != NULL )) {
|
|
|
+ snfud_flush((sfud_flash *)pxDisk->pvTag);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void prvFFFormat( struct xFFDisk * pxDisk )
|
|
|
{
|
|
|
- if( sflash != NULL )
|
|
|
- {
|
|
|
- snfud_fs_format(sflash);
|
|
|
+ if(( pxDisk != NULL ) && ( pxDisk->pvTag != NULL )) {
|
|
|
+ snfud_fs_format((sfud_flash *)pxDisk->pvTag);
|
|
|
}
|
|
|
}
|
|
|
#endif
|
|
|
@@ -232,14 +231,15 @@ static FF_Error_t PartitionAndFormatSFDisk( FF_Disk_t * pxDisk )
|
|
|
/* mount an spi-flash partition */
|
|
|
FF_Disk_t *FF_SFDiskInit( const char *pcName )
|
|
|
{
|
|
|
-FF_Error_t xFFError;
|
|
|
-BaseType_t xPartitionNumber = 0;
|
|
|
-FF_CreationParameters_t xParameters;
|
|
|
-FF_Disk_t * pxDisk;
|
|
|
+ FF_Error_t xFFError;
|
|
|
+ BaseType_t xPartitionNumber = 0;
|
|
|
+ FF_CreationParameters_t xParameters;
|
|
|
+ FF_Disk_t * pxDisk;
|
|
|
+ sfud_flash * sflash;
|
|
|
|
|
|
#if DEVICE_TYPE_SELECT == SPI_NOR_FLASH
|
|
|
sflash = sfud_get_device(0);
|
|
|
-#else //elif DEVICE_TYPE_SELECT == SPI_NAND_FLASH
|
|
|
+#elif DEVICE_TYPE_SELECT == SPI_NAND_FLASH
|
|
|
sflash = snfud_get_device(0);
|
|
|
#endif
|
|
|
|
|
|
@@ -253,14 +253,13 @@ FF_Disk_t * pxDisk;
|
|
|
/* Initialise the created disk structure. */
|
|
|
memset( pxDisk, '\0', sizeof( *pxDisk ) );
|
|
|
|
|
|
-
|
|
|
if( xPlusFATMutex == NULL)
|
|
|
{
|
|
|
xPlusFATMutex = xSemaphoreCreateRecursiveMutex();
|
|
|
}
|
|
|
- //pxDisk->ulNumberOfSectors = sflash->chip.capacity / sfSECTOR_SIZE;
|
|
|
pxDisk->ulNumberOfSectors = OTA_MEDIA_SIZE / sfSECTOR_SIZE;
|
|
|
pxDisk->ulSignature = sfSIGNATURE;
|
|
|
+ pxDisk->pvTag = sflash;
|
|
|
#if DEVICE_TYPE_SELECT == SPI_NAND_FLASH
|
|
|
pxDisk->fnFlushApplicationHook = prvFFFlushCache;
|
|
|
#endif
|
|
|
@@ -406,6 +405,7 @@ BaseType_t xReturn = pdFAIL;
|
|
|
}
|
|
|
FF_FS_Add( pcName, pxDisk );
|
|
|
FF_PRINTF( "FF_SDDiskFormatRemount: Mount SPI nor/nand Flash as root \"%s\"\n", pcName );
|
|
|
+ xReturn = pdPASS;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -523,4 +523,5 @@ BaseType_t xReturn = pdPASS;
|
|
|
|
|
|
return xReturn;
|
|
|
}
|
|
|
+#endif
|
|
|
/*-----------------------------------------------------------*/
|