Finished EEPROM reader/writer.

This commit is contained in:
2022-07-29 20:58:38 +02:00
parent 157fb199b7
commit 190f1b5876
3 changed files with 79 additions and 21 deletions

View File

@@ -2,6 +2,8 @@
#include "at28c256.h" #include "at28c256.h"
#include "../ard/pins.h" #include "../ard/pins.h"
#include "../ard/serial.h"
unsigned char _ck, _addr, _oe, _we, _io0, _io1, _io2, _io3, _io4, _io5, _io6, _io7; unsigned char _ck, _addr, _oe, _we, _io0, _io1, _io2, _io3, _io4, _io5, _io6, _io7;
void at28c256_init(unsigned char ck, unsigned char addr, unsigned char oe, unsigned char we, unsigned char io0, unsigned char io1, unsigned char io2, unsigned char io3, unsigned char io4, unsigned char io5, unsigned char io6, unsigned char io7) { void at28c256_init(unsigned char ck, unsigned char addr, unsigned char oe, unsigned char we, unsigned char io0, unsigned char io1, unsigned char io2, unsigned char io3, unsigned char io4, unsigned char io5, unsigned char io6, unsigned char io7) {
@@ -28,11 +30,7 @@ void at28c256_init(unsigned char ck, unsigned char addr, unsigned char oe, unsig
_io7 = io7; _io7 = io7;
} }
void at28c256_write(unsigned short addr, unsigned char data) { void set_addr(unsigned short addr) {
// just to be safe, disable output
digital_write(_oe, HIGH);
// set the address
unsigned int i; unsigned int i;
for(i = 0; i < 16; i++) { for(i = 0; i < 16; i++) {
@@ -47,17 +45,67 @@ void at28c256_write(unsigned short addr, unsigned char data) {
} }
digital_write(_addr, LOW); digital_write(_addr, LOW);
}
void at28c256_write(unsigned short addr, unsigned char data) {
// just to be safe, disable output
digital_write(_oe, HIGH);
// set the output address
set_addr(addr);
// write data // write data
digital_write(_io0, data & 1); pin_mode(_io0, OUTPUT);
digital_write(_io1, data & 1<<1); pin_mode(_io1, OUTPUT);
digital_write(_io2, data & 1<<2); pin_mode(_io2, OUTPUT);
digital_write(_io3, data & 1<<3); pin_mode(_io3, OUTPUT);
digital_write(_io4, data & 1<<4); pin_mode(_io4, OUTPUT);
digital_write(_io5, data & 1<<5); pin_mode(_io5, OUTPUT);
digital_write(_io6, data & 1<<6); pin_mode(_io6, OUTPUT);
digital_write(_io7, data & 1<<7); pin_mode(_io7, OUTPUT);
digital_write(_we, data);
digital_write(_io0, data & 1 ? HIGH : LOW);
digital_write(_io1, data & (1<<1) ? HIGH : LOW);
digital_write(_io2, data & (1<<2) ? HIGH : LOW);
digital_write(_io3, data & (1<<3) ? HIGH : LOW);
digital_write(_io4, data & (1<<4) ? HIGH : LOW);
digital_write(_io5, data & (1<<5) ? HIGH : LOW);
digital_write(_io6, data & (1<<6) ? HIGH : LOW);
digital_write(_io7, data & (1<<7) ? HIGH : LOW);
digital_write(_we, LOW);
_delay_us(1); // min 100ns _delay_us(1); // min 100ns
digital_write(_we, HIGH); digital_write(_we, HIGH);
} }
unsigned char at28c256_read(unsigned short addr) {
// just to be safe, disable write
digital_write(_we, HIGH);
// set the output address
set_addr(addr);
// read data
pin_mode(_io0, INPUT);
pin_mode(_io1, INPUT);
pin_mode(_io2, INPUT);
pin_mode(_io3, INPUT);
pin_mode(_io4, INPUT);
pin_mode(_io5, INPUT);
pin_mode(_io6, INPUT);
pin_mode(_io7, INPUT);
unsigned char data = 0;
digital_write(_oe, LOW);
data |= digital_read(_io0);
data |= digital_read(_io1)<<1;
data |= digital_read(_io2)<<2;
data |= digital_read(_io3)<<3;
data |= digital_read(_io4)<<4;
data |= digital_read(_io5)<<5;
data |= digital_read(_io6)<<6;
data |= digital_read(_io7)<<7;
digital_write(_oe, HIGH);
return data;
}

View File

@@ -3,6 +3,6 @@
void at28c256_init(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char); void at28c256_init(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char);
void at28c256_write(unsigned short, unsigned char); void at28c256_write(unsigned short, unsigned char);
//unsigned char at28c256_read(unsigned short); TODO unsigned char at28c256_read(unsigned short);
#endif #endif

22
main.c
View File

@@ -20,11 +20,21 @@ void prepare() {
serial_init(9600); serial_init(9600);
at28c256_init(2, 13, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12); at28c256_init(2, 13, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12);
at28c256_write(0x0000, 0x7B); // 123 serial_write("Writing data\n\r", 14);
at28c256_write(0x0001, 0x2A); // 42 at28c256_write(0, 0x7D);
at28c256_write(1, 0x12);
at28c256_write(2, 0x9F);
at28c256_write(3, 0x5A);
serial_write("Reading data\n\r", 14);
int i;
char out[20];
for(i = 0; i < 4; i++) {
unsigned char value = at28c256_read(i);
const int n = sprintf(out, "0x%x\n\r", value);
serial_write(out, n);
}
} }
void loop() { void loop() {}
serial_write("Test\n\r", 6);
_delay_ms(1000);
}