A first try to write a block device wrapper for the BSP_DISCO_F746NG. I can read and write blocks, but I haven't gotten it to work with FATFileSystem yet.
I'm trying to get Block Device to work with the DISCO_F746NG boards built in SD-card-reader using the BSP_DISCO_F746NG library.
I used the HeapBlockDevice as template, and I have gotten read and program to work when I just try to read or program one block and read it back, but I haven't gotten FATFileSystem to work with this class yet. I'm kind of stuck here right now, so any help would be very much appreciated!
BD_DISCO_F746NG.h
- Committer:
- Lightsource
- Date:
- 2017-12-14
- Revision:
- 0:3f8692709f00
File content as of revision 0:3f8692709f00:
#include "BlockDevice.h" #include "stm32746g_discovery_sd.h" #include "mbed.h" class BD_DISCO_F746NG : public BlockDevice { public: BD_DISCO_F746NG(bd_size_t block=512); /** Lifetime of the memory block device * * @param size Size of the Block Device in bytes * @param read Minimum read size required in bytes * @param program Minimum program size required in bytes * @param erase Minimum erase size required in bytes */ BD_DISCO_F746NG(bd_size_t read, bd_size_t program, bd_size_t erase); virtual ~BD_DISCO_F746NG(); /** Initialize a block device * * @return 0 on success or a negative error code on failure */ virtual int init(); /** Deinitialize a block device * * @return 0 on success or a negative error code on failure */ virtual int deinit(); /** Read blocks from a block device * * @param buffer Buffer to read blocks into * @param addr Address of block to begin reading from * @param size Size to read in bytes, must be a multiple of read block size * @return 0 on success, negative error code on failure */ virtual int read(void *buffer, bd_addr_t addr, bd_size_t size); /** Program blocks to a block device * * The blocks must have been erased prior to being programmed * * @param buffer Buffer of data to write to blocks * @param addr Address of block to begin writing to * @param size Size to write in bytes, must be a multiple of program block size * @return 0 on success, negative error code on failure */ virtual int program(const void *buffer, bd_addr_t addr, bd_size_t size); /** Erase blocks on a block device * * The state of an erased block is undefined until it has been programmed * * @param addr Address of block to begin erasing * @param size Size to erase in bytes, must be a multiple of erase block size * @return 0 on success, negative error code on failure */ virtual int erase(bd_addr_t addr, bd_size_t size); /** Get the size of a readable block * * @return Size of a readable block in bytes */ virtual bd_size_t get_read_size() const; /** Get the size of a programable block * * @return Size of a programable block in bytes */ virtual bd_size_t get_program_size() const; /** Get the size of a eraseable block * * @return Size of a eraseable block in bytes */ virtual bd_size_t get_erase_size() const; /** Get the total size of the underlying device * * @return Size of the underlying device in bytes */ virtual bd_size_t size() const; private: uint32_t Timeout; bd_size_t _read_size; bd_size_t _program_size; bd_size_t _erase_size; bd_size_t _count; bd_size_t _blocksize; bd_size_t _size; BSP_SD_CardInfo _currentCardInfo; uint8_t _SD_state; uint8_t **_blocks; };