first publish
Dependents: eeprom_test eeprom_test MCP3204_test
24LC1025.cpp@1:41cf2e3bb7f3, 2020-08-05 (annotated)
- Committer:
- sashida_h
- Date:
- Wed Aug 05 10:15:46 2020 +0000
- Revision:
- 1:41cf2e3bb7f3
- Parent:
- 0:8047024a08c2
initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sashida_h | 0:8047024a08c2 | 1 | #include "24LC1025.h" |
sashida_h | 1:41cf2e3bb7f3 | 2 | |
sashida_h | 1:41cf2e3bb7f3 | 3 | /* |
sashida_h | 1:41cf2e3bb7f3 | 4 | ref.http://akizukidenshi.com/download/I-02525_24lc1025.pdf |
sashida_h | 1:41cf2e3bb7f3 | 5 | Created by sassy,CORE |
sashida_h | 1:41cf2e3bb7f3 | 6 | |
sashida_h | 1:41cf2e3bb7f3 | 7 | */ |
sashida_h | 0:8047024a08c2 | 8 | |
sashida_h | 1:41cf2e3bb7f3 | 9 | //****************************************************************************** |
sashida_h | 1:41cf2e3bb7f3 | 10 | LC1025::LC1025(PinName sda, PinName scl) |
sashida_h | 1:41cf2e3bb7f3 | 11 | { |
sashida_h | 1:41cf2e3bb7f3 | 12 | i2c_ = new I2C(sda, scl); |
sashida_h | 1:41cf2e3bb7f3 | 13 | i2c_->frequency(400000); |
sashida_h | 1:41cf2e3bb7f3 | 14 | } |
sashida_h | 0:8047024a08c2 | 15 | |
sashida_h | 1:41cf2e3bb7f3 | 16 | //****************************************************************************** |
sashida_h | 1:41cf2e3bb7f3 | 17 | LC1025::LC1025(I2C *i2c):i2c_(i2c){} |
sashida_h | 1:41cf2e3bb7f3 | 18 | |
sashida_h | 1:41cf2e3bb7f3 | 19 | //****************************************************************************** |
sashida_h | 1:41cf2e3bb7f3 | 20 | LC1025::~LC1025() |
sashida_h | 1:41cf2e3bb7f3 | 21 | { |
sashida_h | 1:41cf2e3bb7f3 | 22 | delete i2c_; |
sashida_h | 0:8047024a08c2 | 23 | } |
sashida_h | 1:41cf2e3bb7f3 | 24 | |
sashida_h | 1:41cf2e3bb7f3 | 25 | void LC1025::writeByte(uint8_t address, uint16_t subAddress, uint8_t data) |
sashida_h | 0:8047024a08c2 | 26 | { |
sashida_h | 1:41cf2e3bb7f3 | 27 | char data_write[3]; |
sashida_h | 1:41cf2e3bb7f3 | 28 | data_write[0] = (subAddress >> 8) & 0xff ; |
sashida_h | 1:41cf2e3bb7f3 | 29 | data_write[1] = (subAddress) & 0xff ; |
sashida_h | 1:41cf2e3bb7f3 | 30 | data_write[2] = data; |
sashida_h | 1:41cf2e3bb7f3 | 31 | i2c_->write(address, data_write, 3); |
sashida_h | 0:8047024a08c2 | 32 | } |
sashida_h | 0:8047024a08c2 | 33 | |
sashida_h | 1:41cf2e3bb7f3 | 34 | void LC1025::PageWrite(uint8_t address, uint16_t subAddress, char *data, int num) |
sashida_h | 0:8047024a08c2 | 35 | { |
sashida_h | 1:41cf2e3bb7f3 | 36 | char data_write[num+2]; |
sashida_h | 1:41cf2e3bb7f3 | 37 | data_write[0] = (subAddress >> 8) & 0xff ; |
sashida_h | 1:41cf2e3bb7f3 | 38 | data_write[1] = (subAddress) & 0xff ; |
sashida_h | 1:41cf2e3bb7f3 | 39 | for(int i = 0; i < num; i++){ |
sashida_h | 1:41cf2e3bb7f3 | 40 | data_write[i+2] = data[i]; |
sashida_h | 1:41cf2e3bb7f3 | 41 | } |
sashida_h | 1:41cf2e3bb7f3 | 42 | i2c_->write(address, data_write, num+2); |
sashida_h | 1:41cf2e3bb7f3 | 43 | } |
sashida_h | 1:41cf2e3bb7f3 | 44 | |
sashida_h | 1:41cf2e3bb7f3 | 45 | char LC1025::RandomRead(uint8_t address, uint16_t subAddress) |
sashida_h | 1:41cf2e3bb7f3 | 46 | { |
sashida_h | 1:41cf2e3bb7f3 | 47 | char data[1]; // `data` will store the register data |
sashida_h | 1:41cf2e3bb7f3 | 48 | char data_write[2]; |
sashida_h | 1:41cf2e3bb7f3 | 49 | data_write[0] = (subAddress>>8) & 0xff; |
sashida_h | 1:41cf2e3bb7f3 | 50 | data_write[1] = subAddress & 0xff; |
sashida_h | 1:41cf2e3bb7f3 | 51 | i2c_->write(address, data_write, 2, true); |
sashida_h | 1:41cf2e3bb7f3 | 52 | i2c_->read(address+1, data, 1, true); |
sashida_h | 1:41cf2e3bb7f3 | 53 | i2c_->stop(); |
sashida_h | 1:41cf2e3bb7f3 | 54 | return data[0]; |
sashida_h | 0:8047024a08c2 | 55 | } |
sashida_h | 0:8047024a08c2 | 56 | |
sashida_h | 1:41cf2e3bb7f3 | 57 | char LC1025::SequentialRead(uint8_t address, uint16_t subAddress) |
sashida_h | 0:8047024a08c2 | 58 | { |
sashida_h | 1:41cf2e3bb7f3 | 59 | char data[1]; // `data` will store the register data |
sashida_h | 1:41cf2e3bb7f3 | 60 | char data_write[2]; |
sashida_h | 1:41cf2e3bb7f3 | 61 | data_write[0] = (subAddress>>8) & 0xff; |
sashida_h | 1:41cf2e3bb7f3 | 62 | data_write[1] = subAddress & 0xff; |
sashida_h | 1:41cf2e3bb7f3 | 63 | i2c_->write(address, data_write, 2, true); |
sashida_h | 1:41cf2e3bb7f3 | 64 | i2c_->read(address+1, data, 0xffff, true); |
sashida_h | 1:41cf2e3bb7f3 | 65 | i2c_->stop(); |
sashida_h | 1:41cf2e3bb7f3 | 66 | return data[0]; |
sashida_h | 1:41cf2e3bb7f3 | 67 | } |
sashida_h | 1:41cf2e3bb7f3 | 68 | |
sashida_h | 1:41cf2e3bb7f3 | 69 | void LC1025::readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest) |
sashida_h | 1:41cf2e3bb7f3 | 70 | { |
sashida_h | 1:41cf2e3bb7f3 | 71 | char data[14]; |
sashida_h | 1:41cf2e3bb7f3 | 72 | char data_write[1]; |
sashida_h | 1:41cf2e3bb7f3 | 73 | data_write[0] = subAddress; |
sashida_h | 1:41cf2e3bb7f3 | 74 | i2c_->write(address, data_write, 1, true); // no stop |
sashida_h | 1:41cf2e3bb7f3 | 75 | i2c_->read(address, data, count, 0); |
sashida_h | 1:41cf2e3bb7f3 | 76 | for(int ii = 0; ii < count; ii++) { |
sashida_h | 1:41cf2e3bb7f3 | 77 | dest[ii] = data[ii]; |
sashida_h | 1:41cf2e3bb7f3 | 78 | } |
sashida_h | 1:41cf2e3bb7f3 | 79 | } |