Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: DISCO-F746NG_SDRAMBlockDevice
Fork of SDRAM_DISCO_F746NG by
Revision 1:36b940e6b8d2, committed 2018-03-08
- Comitter:
- tapiov
- Date:
- Thu Mar 08 20:14:42 2018 +0000
- Parent:
- 0:370f402a2219
- Commit message:
- First commit to publish
Changed in this revision
--- 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);
-}
--- 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
-
--- /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;
+}
--- /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
