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.cpp
- Committer:
- Lightsource
- Date:
- 2017-12-14
- Revision:
- 0:3f8692709f00
File content as of revision 0:3f8692709f00:
#include "BD_DISCO_F746NG.h" BD_DISCO_F746NG::BD_DISCO_F746NG(bd_size_t block) : _read_size(block), _program_size(block), _erase_size(block) , _blocks(0) { //MBED_ASSERT(_count * _erase_size == size); } BD_DISCO_F746NG::BD_DISCO_F746NG(bd_size_t read, bd_size_t program, bd_size_t erase) : _read_size(read), _program_size(program), _erase_size(erase) , _blocks(0) { //MBED_ASSERT(_count * _erase_size == size); Timeout = 100; } BD_DISCO_F746NG::~BD_DISCO_F746NG() { BSP_SD_DeInit(); /* if (_blocks) { for (size_t i = 0; i < _count; i++) { free(_blocks[i]); } delete[] _blocks; _blocks = 0; } */ } int BD_DISCO_F746NG::init() { Timeout = 100; bool result; _SD_state = BSP_SD_Init(); if(_SD_state != MSD_OK){ if(_SD_state == MSD_ERROR_SD_NOT_PRESENT){ return BD_ERROR_DEVICE_ERROR; } else { return BD_ERROR_DEVICE_ERROR; } } else { BSP_SD_GetCardInfo(&_currentCardInfo); //_blocksize = _currentCardInfo.BlockSize; _blocksize = 512; return BD_ERROR_OK; } /* if (!_blocks) { _blocks = new uint8_t*[_count]; for (size_t i = 0; i < _count; i++) { _blocks[i] = 0; } } */ // return BD_ERROR_OK; } int BD_DISCO_F746NG::deinit() { return BSP_SD_DeInit(); /* MBED_ASSERT(_blocks != NULL); // Memory is lazily cleaned up in destructor to allow // data to live across de/reinitialization */ // return BD_ERROR_OK; } bd_size_t BD_DISCO_F746NG::get_read_size() const { //MBED_ASSERT(_blocks != NULL); return _read_size; } bd_size_t BD_DISCO_F746NG::get_program_size() const { //MBED_ASSERT(_blocks != NULL); return _program_size; } bd_size_t BD_DISCO_F746NG::get_erase_size() const { //MBED_ASSERT(_blocks != NULL); return _erase_size; } bd_size_t BD_DISCO_F746NG::size() const { //MBED_ASSERT(_blocks != NULL); //return (_currentCardInfo.BlockNbr*2) * _blocksize; return 128 * _blocksize; } int BD_DISCO_F746NG::read(void *b, bd_addr_t addr, bd_size_t size) { int result; uint32_t nblocks = (uint32_t)size / _blocksize; result = BSP_SD_ReadBlocks((uint32_t *)b, (uint32_t)addr, nblocks, Timeout); return result; } int BD_DISCO_F746NG::program(const void *b, bd_addr_t addr, bd_size_t size) { int result; uint32_t nblocks = (uint32_t)size / _blocksize; result = BSP_SD_WriteBlocks((uint32_t *)b, (uint32_t)addr, nblocks, Timeout); return result; } int BD_DISCO_F746NG::erase(bd_addr_t addr, bd_size_t size) { int result; uint32_t StartAddr = addr; uint32_t EndAddr = StartAddr + size; result = BSP_SD_Erase(StartAddr, EndAddr); return result; }