Initial commit
Diff: MemoryController.h
- Revision:
- 0:bb348c97df44
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MemoryController.h Wed Sep 16 01:11:49 2020 +0000 @@ -0,0 +1,127 @@ +#ifndef __MemoryController_H_ +#define __MemoryController_H_ + +#include "mbed.h" + +class MemoryController +{ + +public: + + enum Commands_e + { + RESET = 0xFF, + READADDRINIT = 0x00, + READADDREND = 0x30, + WRITEPAGEINIT = 0x80, + WRITEPAGEEND = 0x10, + ERASEBLOCKINIT = 0x60, + ERASEBLOCKEND = 0xD1 + }; + + union Data{ + uint8_t all; + struct BitField_s + { + uint8_t dq1 : 1; + uint8_t dq2 : 1; + uint8_t dq3 : 1; + uint8_t dq4 : 1; + uint8_t dq5 : 1; + uint8_t dq6 : 1; + uint8_t dq7 : 1; + uint8_t dq8 : 1; + }bits; + }; + + struct DataAddress { + char col1; + char col2; + char page; + char block1; + char block2; + } Address; + + MemoryController(DigitalOut CE,DigitalOut CLE,DigitalOut ALE,DigitalOut WE,DigitalOut RE,DigitalOut WP,PinName *DQ, DigitalIn RDY); + + /** @brief Destructor */ + ~MemoryController(void); + + /** + * @brief Set Dq Bus to char value (8 bits) used for command writes and address writes + * @param[IN] set - Value to set DQ array to + * @param[OUT] values - Array where values are held (8 bits of 1's and 0's to set DQ) + */ + void setDQ(const char set, bool *values); + + /** + * @brief Used at initialization of Device + */ + void ResetDevice(); + + void startPageRead(DataAddress &address); + + void endPageRead(); + + void ReadData(char *DataOut); + + void sendPageData(char *DataIn); + + void startPageWrite(DataAddress &address); + + void endPageWrite(); + + + /** + * @brief Used to send address for block erase (3 bytes) + */ + void MemoryController::WriteAddressBlock(DataAddress &address); + + /** + * @brief Used to send address data for read/write page (5 bytes) + */ + void MemoryController::WriteAddressPage(DataAddress &address); + + + /** + * @brief Read Page of Data (4320 bytes) + * @param[IN] address - address to read data from + * @param[OUT] DataOut - Array to write data into + */ + void ReadPage(DataAddress &address, char *DataOut); + + /** + * @brief Program 1 page (4320 bytes) + * @param[IN] adderess - address to program data to + * @param[IN] DataIn - Array pointer to data being written into page + */ + void ProgramPage(DataAddress &address, char *DataIn); + + /** + * @brief Earse 1 block (128 pages) + * @param[IN] address - Only row address characters for erasing block, no collumn needed + * @return 0 on success, 1 on failure + */ + void EraseBlock(DataAddress &address); + + void setLogicStandby(); + + void setLogicBusIdle(); + + void setLogicCommandInput(); + + void setLogicAddressInput(); + + void setLogicDataInput(); + + void setLogicDataOut(); + + void setLogicWriteProtect(); + +private: + PinName *m_DQ; + DigitalOut m_CE, m_CLE, m_ALE, m_WE, m_RE, m_WP; + DigitalIn m_RDY; +}; + +#endif /* __MemoryController_H_ */ \ No newline at end of file