SDRAM_DISCO_F746NG_BlockDevice

Dependents:   DISCO-F746NG_SDRAMBlockDevice

Fork of SDRAM_DISCO_F746NG by ST

Files at this revision

API Documentation at this revision

Comitter:
tapiov
Date:
Thu Mar 08 20:14:42 2018 +0000
Parent:
0:370f402a2219
Commit message:
First commit to publish

Changed in this revision

SDRAM_DISCO_F746NG.cpp Show diff for this revision Revisions of this file
SDRAM_DISCO_F746NG.h Show diff for this revision Revisions of this file
SDRAM_DISCO_F746NG_BlockDevice.cpp Show annotated file Show diff for this revision Revisions of this file
SDRAM_DISCO_F746NG_BlockDevice.h Show annotated file Show diff for this revision Revisions of this file
diff -r 370f402a2219 -r 36b940e6b8d2 SDRAM_DISCO_F746NG.cpp
--- a/SDRAM_DISCO_F746NG.cpp	Mon Mar 21 12:16:24 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/* Copyright (c) 2010-2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#include "SDRAM_DISCO_F746NG.h"
-
-// Constructor
-SDRAM_DISCO_F746NG::SDRAM_DISCO_F746NG()
-{
-  BSP_SDRAM_Init();
-}
-
-// Destructor
-SDRAM_DISCO_F746NG::~SDRAM_DISCO_F746NG()
-{
-  BSP_SDRAM_DeInit();
-
-}
-
-//=================================================================================================================
-// Public methods
-//=================================================================================================================
-
-
-uint8_t SDRAM_DISCO_F746NG::Init(void)
-{
-  return BSP_SDRAM_Init();
-}
-
-uint8_t SDRAM_DISCO_F746NG::DeInit(void)
-{
-  return BSP_SDRAM_DeInit();
-}
-
-void SDRAM_DISCO_F746NG::Initialization_sequence(uint32_t RefreshCount)
-{
-  BSP_SDRAM_Initialization_sequence(RefreshCount);
-}
-
-uint8_t SDRAM_DISCO_F746NG::ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
-{
-  return BSP_SDRAM_ReadData(uwStartAddress, pData, uwDataSize);
-}
-
-uint8_t SDRAM_DISCO_F746NG::ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
-{
-  return BSP_SDRAM_ReadData_DMA(uwStartAddress, pData, uwDataSize);
-}
-
-uint8_t SDRAM_DISCO_F746NG::WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) 
-{
-  return BSP_SDRAM_WriteData(uwStartAddress, pData, uwDataSize);
-}
-
-uint8_t SDRAM_DISCO_F746NG::WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) 
-{
-  return BSP_SDRAM_WriteData_DMA(uwStartAddress, pData, uwDataSize);
-}
-
-uint8_t SDRAM_DISCO_F746NG::Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd)
-{
-  return BSP_SDRAM_Sendcmd(SdramCmd);
-}
diff -r 370f402a2219 -r 36b940e6b8d2 SDRAM_DISCO_F746NG.h
--- a/SDRAM_DISCO_F746NG.h	Mon Mar 21 12:16:24 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/* Copyright (c) 2010-2016 mbed.org, MIT License
-*
-* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
-* and associated documentation files (the "Software"), to deal in the Software without
-* restriction, including without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
-* Software is furnished to do so, subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or
-* substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
-* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#ifndef __SDRAM_DISCO_F746NG_H
-#define __SDRAM_DISCO_F746NG_H
-
-#ifdef TARGET_DISCO_F746NG
-
-#include "mbed.h"
-#include "stm32746g_discovery_sdram.h"
-
-/*
-  This class drives the SDRAM driver (MT48LC4M32B2B5-7) present on DISCO_F746NG board.
-
-  Usage:
-
-  #include "mbed.h"
-  #include "SDRAM_DISCO_F746NG.h"
-
-  int main()
-  {
-	  sdram.WriteData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR, WriteBuffer, BUFFER_SIZE);
-	  SDRAMCommandStructure.CommandMode            = FMC_SDRAM_CMD_SELFREFRESH_MODE;
-      SDRAMCommandStructure.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK2;
-      SDRAMCommandStructure.AutoRefreshNumber      = 1;
-      SDRAMCommandStructure.ModeRegisterDefinition = 0;
-      sdram.Sendcmd(&SDRAMCommandStructure);
-      SDRAMCommandStructure.CommandMode = FMC_SDRAM_CMD_NORMAL_MODE;
-      sdram.Sendcmd(&SDRAMCommandStructure);
-      sdram.ReadData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR, ReadBuffer, BUFFER_SIZE);
-      CompareBuffer(WriteBuffer, ReadBuffer, BUFFER_SIZE);
-      while(1) {
-      }
-  }
-
-*/
-class SDRAM_DISCO_F746NG
-{
-  
-public:
-  //! Constructor
-  SDRAM_DISCO_F746NG();
-
-  //! Destructor
-  ~SDRAM_DISCO_F746NG();
-
-
-  /**
-    * @brief  Initializes the SDRAM device.
-    * @retval SDRAM status
-    */
-  uint8_t Init(void);
-
-  /**
-    * @brief  DeInitializes the SDRAM device.
-    * @retval SDRAM status
-    */
-  uint8_t DeInit(void);
-
-  /**
-    * @brief  Programs the SDRAM device.
-    * @param  RefreshCount: SDRAM refresh counter value 
-    * @retval None
-    */
-  void Initialization_sequence(uint32_t RefreshCount);
-
-  /**
-    * @brief  Reads an amount of data from the SDRAM memory in polling mode.
-    * @param  uwStartAddress: Read start address
-    * @param  pData: Pointer to data to be read  
-    * @param  uwDataSize: Size of read data from the memory
-    * @retval SDRAM status
-    */
-  uint8_t ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
-
-  /**
-    * @brief  Reads an amount of data from the SDRAM memory in DMA mode.
-    * @param  uwStartAddress: Read start address
-    * @param  pData: Pointer to data to be read  
-    * @param  uwDataSize: Size of read data from the memory
-    * @retval SDRAM status
-    */
-  uint8_t ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
-
-  /**
-    * @brief  Writes an amount of data to the SDRAM memory in polling mode.
-    * @param  uwStartAddress: Write start address
-    * @param  pData: Pointer to data to be written  
-    * @param  uwDataSize: Size of written data from the memory
-    * @retval SDRAM status
-    */
-  uint8_t WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); 
-
-  /**
-    * @brief  Writes an amount of data to the SDRAM memory in DMA mode.
-    * @param  uwStartAddress: Write start address
-    * @param  pData: Pointer to data to be written  
-    * @param  uwDataSize: Size of written data from the memory
-    * @retval SDRAM status
-    */
-  uint8_t WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); 
-
-  /**
-    * @brief  Sends command to the SDRAM bank.
-    * @param  SdramCmd: Pointer to SDRAM command structure 
-    * @retval SDRAM status
-    */  
-  uint8_t Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd);
-
-private:
-
-};
-
-#else
-#error "This class must be used with DISCO_F746NG board only."
-#endif // TARGET_DISCO_F746NG
-
-#endif
-
diff -r 370f402a2219 -r 36b940e6b8d2 SDRAM_DISCO_F746NG_BlockDevice.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDRAM_DISCO_F746NG_BlockDevice.cpp	Thu Mar 08 20:14:42 2018 +0000
@@ -0,0 +1,139 @@
+/* Copyright (c) 2010-2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include <inttypes.h>
+#include "SDRAM_DISCO_F746NG_BlockDevice.h"
+
+// Constructor
+//SDRAM_DISCO_F746NG_BlockDevice::SDRAM_DISCO_F746NG_BlockDevice()
+//{
+//  BSP_SDRAM_Init();
+//}
+
+// Destructor
+//SDRAM_DISCO_F746NG_BlockDevice::~SDRAM_DISCO_F746NG_BlockDevice()
+//{
+//  BSP_SDRAM_DeInit();
+
+//}
+
+//=================================================================================================================
+// Public methods
+//=================================================================================================================
+
+int SDRAM_DISCO_F746NG_BlockDevice::init()
+//uint8_t SDRAM_DISCO_F746NG::Init(void)
+{
+  return BSP_SDRAM_Init();
+}
+
+int SDRAM_DISCO_F746NG_BlockDevice::deinit()
+{
+  return BSP_SDRAM_DeInit();
+}
+
+void SDRAM_DISCO_F746NG_BlockDevice::Initialization_sequence(uint32_t RefreshCount)
+{
+  BSP_SDRAM_Initialization_sequence(RefreshCount);
+}
+
+int SDRAM_DISCO_F746NG_BlockDevice::read(void * pData, bd_addr_t uwStartAddress, bd_size_t uwDataSize)
+//uint8_t SDRAM_DISCO_F746NG::ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
+{
+  return BSP_SDRAM_ReadData(uwStartAddress,(uint32_t *) pData, uwDataSize);
+}
+
+uint8_t SDRAM_DISCO_F746NG_BlockDevice::ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
+{
+  return BSP_SDRAM_ReadData_DMA(uwStartAddress, pData, uwDataSize);
+}
+
+int SDRAM_DISCO_F746NG_BlockDevice::program(const void *pData, bd_addr_t uwStartAddress, bd_size_t uwDataSize)
+//uint8_t SDRAM_DISCO_F746NG::WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) 
+{
+  return BSP_SDRAM_WriteData(uwStartAddress, (uint32_t *) pData, uwDataSize);
+}
+
+uint8_t SDRAM_DISCO_F746NG_BlockDevice::WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) 
+{
+  return BSP_SDRAM_WriteData_DMA(uwStartAddress, pData, uwDataSize);
+}
+
+uint8_t SDRAM_DISCO_F746NG_BlockDevice::Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd)
+{
+  return BSP_SDRAM_Sendcmd(SdramCmd);
+}
+
+int SDRAM_DISCO_F746NG_BlockDevice::erase(bd_addr_t addr, bd_size_t size)
+{
+  uint32_t tmpIndex;
+  uint32_t Value = 0;
+  uint64_t PSize = SDRAM_DISCO_F746NG_BlockDevice::get_program_size();
+  uint64_t DSize = SDRAM_DISCO_F746NG_BlockDevice::size();
+  
+  uint32_t UDSize=(uint32_t) DSize;
+  uint32_t UPSize=(uint32_t) PSize;  
+  uint32_t UAddr=(uint32_t) addr; 
+  
+  uint32_t *pBuffer = (uint32_t *)malloc(UPSize * sizeof(uint32_t));;
+
+  printf("Erase starting ");
+  
+  printf("pBuffer mallocated ");
+
+  // Fill buffer with zeroes
+  for (tmpIndex = 0; tmpIndex<UPSize; tmpIndex++ ) {
+    pBuffer[tmpIndex] = Value;  
+  }
+  
+  printf("pBuffer written\n");
+
+  printf("DSize %lu ", UDSize);
+  printf("PSize %lu\n", UPSize); 
+  
+  // Write the buffer to fill whole device
+  for (tmpIndex = 0; tmpIndex<(UDSize/UPSize); tmpIndex++ ) {
+    // printf("Index %lu WAddr %#032x% %#032x% %lu EndIndex %lu \n", tmpIndex,(SDRAM_DEVICE_ADDR + UAddr+(tmpIndex*UPSize)),&pBuffer,(UDSize/UPSize));
+    // wait(1);
+    BSP_SDRAM_WriteData((SDRAM_DEVICE_ADDR + UAddr+(tmpIndex*UPSize)),pBuffer,UPSize);
+  }
+  
+  free(pBuffer);
+  pBuffer=NULL;
+  return 0;
+}
+     
+bd_size_t SDRAM_DISCO_F746NG_BlockDevice::get_read_size() const
+{
+  return 1024;
+}
+
+bd_size_t SDRAM_DISCO_F746NG_BlockDevice::get_program_size() const
+{
+  return 1024;
+}
+
+bd_size_t SDRAM_DISCO_F746NG_BlockDevice::get_erase_size() const
+{
+  return 1048576;
+}
+
+bd_size_t SDRAM_DISCO_F746NG_BlockDevice::size() const
+{
+  return 1048576;
+}
diff -r 370f402a2219 -r 36b940e6b8d2 SDRAM_DISCO_F746NG_BlockDevice.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDRAM_DISCO_F746NG_BlockDevice.h	Thu Mar 08 20:14:42 2018 +0000
@@ -0,0 +1,150 @@
+/* Copyright (c) 2010-2016 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef __SDRAM_DISCO_F746NG_H
+#define __SDRAM_DISCO_F746NG_H
+
+#ifdef TARGET_DISCO_F746NG
+
+#include "mbed.h"
+#include "stm32746g_discovery_sdram.h"
+#include "BlockDevice.h"
+
+/*
+  This class drives the SDRAM driver (MT48LC4M32B2B5-7) present on DISCO_F746NG board.
+
+  Usage:
+
+  #include "mbed.h"
+  #include "SDRAM_DISCO_F746NG.h"
+
+  int main()
+  {
+	  sdram.WriteData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR, WriteBuffer, BUFFER_SIZE);
+	  SDRAMCommandStructure.CommandMode            = FMC_SDRAM_CMD_SELFREFRESH_MODE;
+      SDRAMCommandStructure.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK2;
+      SDRAMCommandStructure.AutoRefreshNumber      = 1;
+      SDRAMCommandStructure.ModeRegisterDefinition = 0;
+      sdram.Sendcmd(&SDRAMCommandStructure);
+      SDRAMCommandStructure.CommandMode = FMC_SDRAM_CMD_NORMAL_MODE;
+      sdram.Sendcmd(&SDRAMCommandStructure);
+      sdram.ReadData(SDRAM_DEVICE_ADDR + WRITE_READ_ADDR, ReadBuffer, BUFFER_SIZE);
+      CompareBuffer(WriteBuffer, ReadBuffer, BUFFER_SIZE);
+      while(1) {
+      }
+  }
+
+*/
+class SDRAM_DISCO_F746NG_BlockDevice : public BlockDevice
+{
+  
+public:
+  //! Constructor
+  //SDRAM_DISCO_F746NG_BlockDevice();
+
+  //! Destructor
+  //~SDRAM_DISCO_F746NG_BlockDevice();
+
+
+  /**
+    * @brief  Initializes the SDRAM device.
+    * @retval SDRAM status
+    */
+    
+  virtual int init();	
+  //virtual uint8_t Init(void);
+
+  /**
+    * @brief  DeInitializes the SDRAM device.
+    * @retval SDRAM status
+    */
+    
+  virtual int deinit();
+  //virtual uint8_t DeInit(void);
+
+  /**
+    * @brief  Programs the SDRAM device.
+    * @param  RefreshCount: SDRAM refresh counter value 
+    * @retval None
+    */
+  
+  void Initialization_sequence(uint32_t RefreshCount);
+
+  /**
+    * @brief  Reads an amount of data from the SDRAM memory in polling mode.
+    * @param  uwStartAddress: Read start address
+    * @param  pData: Pointer to data to be read  
+    * @param  uwDataSize: Size of read data from the memory
+    * @retval SDRAM status
+    */
+    
+  virtual int read(void *buffer, bd_addr_t addr, bd_size_t size);
+  //uint8_t ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
+
+  /**
+    * @brief  Reads an amount of data from the SDRAM memory in DMA mode.
+    * @param  uwStartAddress: Read start address
+    * @param  pData: Pointer to data to be read  
+    * @param  uwDataSize: Size of read data from the memory
+    * @retval SDRAM status
+    */
+
+  uint8_t ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
+
+  /**
+    * @brief  Writes an amount of data to the SDRAM memory in polling mode.
+    * @param  uwStartAddress: Write start address
+    * @param  pData: Pointer to data to be written  
+    * @param  uwDataSize: Size of written data from the memory
+    * @retval SDRAM status
+    */
+
+  virtual int program(const void *buffer, bd_addr_t addr, bd_size_t size);
+  //uint8_t WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); 
+
+  /**
+    * @brief  Writes an amount of data to the SDRAM memory in DMA mode.
+    * @param  uwStartAddress: Write start address
+    * @param  pData: Pointer to data to be written  
+    * @param  uwDataSize: Size of written data from the memory
+    * @retval SDRAM status
+    */
+  uint8_t WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize); 
+
+  /**
+    * @brief  Sends command to the SDRAM bank.
+    * @param  SdramCmd: Pointer to SDRAM command structure 
+    * @retval SDRAM status
+    */  
+  uint8_t Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd);
+  
+  virtual int erase(bd_addr_t addr, bd_size_t size);
+  virtual bd_size_t get_read_size() const;
+  virtual bd_size_t get_program_size() const;
+  virtual bd_size_t get_erase_size() const;
+  virtual bd_size_t size() const;  
+
+private:
+
+};
+
+#else
+#error "This class must be used with DISCO_F746NG board only."
+#endif // TARGET_DISCO_F746NG
+
+#endif