mirror of https://github.com/ARMmbed/mbed-os.git
Updated to match API changes in mbed OS
parent
ec88f7822f
commit
f3272ad5ba
|
|
@ -26,22 +26,20 @@ I2CEEBlockDevice::I2CEEBlockDevice(
|
||||||
_i2c.frequency(freq);
|
_i2c.frequency(freq);
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_error_t I2CEEBlockDevice::init()
|
int I2CEEBlockDevice::init()
|
||||||
{
|
{
|
||||||
return _sync();
|
return _sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_error_t I2CEEBlockDevice::deinit()
|
int I2CEEBlockDevice::deinit()
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_error_t I2CEEBlockDevice::read(void *buffer, bd_addr_t addr, bd_size_t size)
|
int I2CEEBlockDevice::read(void *buffer, bd_addr_t addr, bd_size_t size)
|
||||||
{
|
{
|
||||||
// Check the address and size fit onto the chip.
|
// Check the address and size fit onto the chip.
|
||||||
if (!is_valid_read(addr, size)) {
|
MBED_ASSERT(is_valid_read(addr, size));
|
||||||
return BD_ERROR_PARAMETER;
|
|
||||||
}
|
|
||||||
|
|
||||||
_i2c.start();
|
_i2c.start();
|
||||||
if (!_i2c.write(_i2c_addr | 0) ||
|
if (!_i2c.write(_i2c_addr | 0) ||
|
||||||
|
|
@ -58,12 +56,10 @@ bd_error_t I2CEEBlockDevice::read(void *buffer, bd_addr_t addr, bd_size_t size)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_error_t I2CEEBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size_t size)
|
int I2CEEBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size_t size)
|
||||||
{
|
{
|
||||||
// Check the addr and size fit onto the chip.
|
// Check the addr and size fit onto the chip.
|
||||||
if (!is_valid_program(addr, size)) {
|
MBED_ASSERT(is_valid_program(addr, size));
|
||||||
return BD_ERROR_PARAMETER;
|
|
||||||
}
|
|
||||||
|
|
||||||
// While we have some more data to write.
|
// While we have some more data to write.
|
||||||
while (size > 0) {
|
while (size > 0) {
|
||||||
|
|
@ -82,7 +78,7 @@ bd_error_t I2CEEBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size
|
||||||
}
|
}
|
||||||
_i2c.stop();
|
_i2c.stop();
|
||||||
|
|
||||||
bd_error_t err = _sync();
|
int err = _sync();
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
@ -95,13 +91,13 @@ bd_error_t I2CEEBlockDevice::program(const void *buffer, bd_addr_t addr, bd_size
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_error_t I2CEEBlockDevice::erase(bd_addr_t addr, bd_size_t size)
|
int I2CEEBlockDevice::erase(bd_addr_t addr, bd_size_t size)
|
||||||
{
|
{
|
||||||
// No erase needed
|
// No erase needed
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_error_t I2CEEBlockDevice::_sync()
|
int I2CEEBlockDevice::_sync()
|
||||||
{
|
{
|
||||||
// The chip doesn't ACK while writing to the actual EEPROM
|
// The chip doesn't ACK while writing to the actual EEPROM
|
||||||
// so loop trying to do a zero byte write until it is ACKed
|
// so loop trying to do a zero byte write until it is ACKed
|
||||||
|
|
@ -117,22 +113,22 @@ bd_error_t I2CEEBlockDevice::_sync()
|
||||||
return BD_ERROR_DEVICE_ERROR;
|
return BD_ERROR_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_size_t I2CEEBlockDevice::get_read_size()
|
bd_size_t I2CEEBlockDevice::get_read_size() const
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_size_t I2CEEBlockDevice::get_program_size()
|
bd_size_t I2CEEBlockDevice::get_program_size() const
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_size_t I2CEEBlockDevice::get_erase_size()
|
bd_size_t I2CEEBlockDevice::get_erase_size() const
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bd_size_t I2CEEBlockDevice::size()
|
bd_size_t I2CEEBlockDevice::size() const
|
||||||
{
|
{
|
||||||
return _size;
|
return _size;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,9 +15,6 @@
|
||||||
*/
|
*/
|
||||||
#ifndef MBED_I2CEEPROM_BLOCK_DEVICE_H
|
#ifndef MBED_I2CEEPROM_BLOCK_DEVICE_H
|
||||||
#define MBED_I2CEEPROM_BLOCK_DEVICE_H
|
#define MBED_I2CEEPROM_BLOCK_DEVICE_H
|
||||||
|
|
||||||
/* If the target has no I2C support then I2CEEPROM is not supported */
|
|
||||||
#ifdef DEVICE_I2C
|
|
||||||
|
|
||||||
#include <mbed.h>
|
#include <mbed.h>
|
||||||
#include "BlockDevice.h"
|
#include "BlockDevice.h"
|
||||||
|
|
@ -71,13 +68,13 @@ public:
|
||||||
*
|
*
|
||||||
* @return 0 on success or a negative error code on failure
|
* @return 0 on success or a negative error code on failure
|
||||||
*/
|
*/
|
||||||
virtual bd_error_t init();
|
virtual int init();
|
||||||
|
|
||||||
/** Deinitialize a block device
|
/** Deinitialize a block device
|
||||||
*
|
*
|
||||||
* @return 0 on success or a negative error code on failure
|
* @return 0 on success or a negative error code on failure
|
||||||
*/
|
*/
|
||||||
virtual bd_error_t deinit();
|
virtual int deinit();
|
||||||
|
|
||||||
/** Read blocks from a block device
|
/** Read blocks from a block device
|
||||||
*
|
*
|
||||||
|
|
@ -86,7 +83,7 @@ public:
|
||||||
* @param size Size to read in bytes, must be a multiple of read block size
|
* @param size Size to read in bytes, must be a multiple of read block size
|
||||||
* @return 0 on success, negative error code on failure
|
* @return 0 on success, negative error code on failure
|
||||||
*/
|
*/
|
||||||
virtual bd_error_t read(void *buffer, bd_addr_t addr, bd_size_t size);
|
virtual int read(void *buffer, bd_addr_t addr, bd_size_t size);
|
||||||
|
|
||||||
/** Program blocks to a block device
|
/** Program blocks to a block device
|
||||||
*
|
*
|
||||||
|
|
@ -97,7 +94,7 @@ public:
|
||||||
* @param size Size to write in bytes, must be a multiple of program block size
|
* @param size Size to write in bytes, must be a multiple of program block size
|
||||||
* @return 0 on success, negative error code on failure
|
* @return 0 on success, negative error code on failure
|
||||||
*/
|
*/
|
||||||
virtual bd_error_t program(const void *buffer, bd_addr_t addr, bd_size_t size);
|
virtual int program(const void *buffer, bd_addr_t addr, bd_size_t size);
|
||||||
|
|
||||||
/** Erase blocks on a block device
|
/** Erase blocks on a block device
|
||||||
*
|
*
|
||||||
|
|
@ -107,33 +104,33 @@ public:
|
||||||
* @param size Size to erase in bytes, must be a multiple of erase block size
|
* @param size Size to erase in bytes, must be a multiple of erase block size
|
||||||
* @return 0 on success, negative error code on failure
|
* @return 0 on success, negative error code on failure
|
||||||
*/
|
*/
|
||||||
virtual bd_error_t erase(bd_addr_t addr, bd_size_t size);
|
virtual int erase(bd_addr_t addr, bd_size_t size);
|
||||||
|
|
||||||
/** Get the size of a readable block
|
/** Get the size of a readable block
|
||||||
*
|
*
|
||||||
* @return Size of a readable block in bytes
|
* @return Size of a readable block in bytes
|
||||||
*/
|
*/
|
||||||
virtual bd_size_t get_read_size();
|
virtual bd_size_t get_read_size() const;
|
||||||
|
|
||||||
/** Get the size of a programable block
|
/** Get the size of a programable block
|
||||||
*
|
*
|
||||||
* @return Size of a programable block in bytes
|
* @return Size of a programable block in bytes
|
||||||
* @note Must be a multiple of the read size
|
* @note Must be a multiple of the read size
|
||||||
*/
|
*/
|
||||||
virtual bd_size_t get_program_size();
|
virtual bd_size_t get_program_size() const;
|
||||||
|
|
||||||
/** Get the size of a eraseable block
|
/** Get the size of a eraseable block
|
||||||
*
|
*
|
||||||
* @return Size of a eraseable block in bytes
|
* @return Size of a eraseable block in bytes
|
||||||
* @note Must be a multiple of the program size
|
* @note Must be a multiple of the program size
|
||||||
*/
|
*/
|
||||||
virtual bd_size_t get_erase_size();
|
virtual bd_size_t get_erase_size() const;
|
||||||
|
|
||||||
/** Get the total size of the underlying device
|
/** Get the total size of the underlying device
|
||||||
*
|
*
|
||||||
* @return Size of the underlying device in bytes
|
* @return Size of the underlying device in bytes
|
||||||
*/
|
*/
|
||||||
virtual bd_size_t size();
|
virtual bd_size_t size() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
I2C _i2c;
|
I2C _i2c;
|
||||||
|
|
@ -141,9 +138,8 @@ private:
|
||||||
uint32_t _size;
|
uint32_t _size;
|
||||||
uint32_t _block;
|
uint32_t _block;
|
||||||
|
|
||||||
bd_error_t _sync();
|
int _sync();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* DEVICE_SPI */
|
|
||||||
|
|
||||||
#endif /* MBED_SD_BLOCK_DEVICE_H */
|
#endif /* MBED_SD_BLOCK_DEVICE_H */
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,6 @@
|
||||||
|
|
||||||
using namespace utest::v1;
|
using namespace utest::v1;
|
||||||
|
|
||||||
//#if !I2CEE_INSTALLED
|
|
||||||
//#error [NOT_SUPPORTED] I2CEE Required
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
#define TEST_PINS D14, D15
|
#define TEST_PINS D14, D15
|
||||||
#define TEST_ADDR 0xa0
|
#define TEST_ADDR 0xa0
|
||||||
#define TEST_SIZE 32*1024
|
#define TEST_SIZE 32*1024
|
||||||
|
|
@ -22,7 +18,7 @@ using namespace utest::v1;
|
||||||
|
|
||||||
const struct {
|
const struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
bd_size_t (BlockDevice::*method)();
|
bd_size_t (BlockDevice::*method)() const;
|
||||||
} ATTRS[] = {
|
} ATTRS[] = {
|
||||||
{"read size", &BlockDevice::get_read_size},
|
{"read size", &BlockDevice::get_read_size},
|
||||||
{"program size", &BlockDevice::get_program_size},
|
{"program size", &BlockDevice::get_program_size},
|
||||||
|
|
@ -73,7 +69,10 @@ void test_read_write() {
|
||||||
// Write, sync, and read the block
|
// Write, sync, and read the block
|
||||||
printf("test %0*llx:%llu...\n", addrwidth, block, block_size);
|
printf("test %0*llx:%llu...\n", addrwidth, block, block_size);
|
||||||
|
|
||||||
err = bd.write(write_block, block, block_size);
|
err = bd.erase(block, block_size);
|
||||||
|
TEST_ASSERT_EQUAL(0, err);
|
||||||
|
|
||||||
|
err = bd.program(write_block, block, block_size);
|
||||||
TEST_ASSERT_EQUAL(0, err);
|
TEST_ASSERT_EQUAL(0, err);
|
||||||
|
|
||||||
printf("write %0*llx:%llu ", addrwidth, block, block_size);
|
printf("write %0*llx:%llu ", addrwidth, block, block_size);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue