SDRAM_DISCO_F746NG_BlockDevice
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
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