EEPROM Multiplexer test

Dependencies:   mbed EEPROM_lib

Committer:
imadaemi
Date:
Wed Jun 02 17:07:20 2021 +0000
Revision:
2:bd7fad3dc62e
Parent:
1:de11b189ee57
Multiplexer EEPROM 4ver

Who changed what in which revision?

UserRevisionLine numberNew contents of line
imadaemi 0:659448bed797 1 #include "mbed.h"
imadaemi 0:659448bed797 2 #include "EEPROM_lib.h"
imadaemi 0:659448bed797 3
imadaemi 0:659448bed797 4 Serial pc(USBTX, USBRX, 230400);
imadaemi 0:659448bed797 5 I2C i2c_bus(p28, p27);
imadaemi 0:659448bed797 6 EEPROM_lib EEPROM(i2c_bus, 1);
imadaemi 0:659448bed797 7 DigitalOut pinA(p21);
imadaemi 0:659448bed797 8 DigitalOut pinB(p22);
imadaemi 0:659448bed797 9 DigitalOut pinC(p23);
imadaemi 0:659448bed797 10
imadaemi 0:659448bed797 11 void setEEPROMGroup(int group_num);
imadaemi 0:659448bed797 12
imadaemi 0:659448bed797 13 int main() {
imadaemi 0:659448bed797 14
Sigma884 1:de11b189ee57 15 pc.printf("Please Input '7' to Start Progeam\r\n");
Sigma884 1:de11b189ee57 16
imadaemi 0:659448bed797 17 while(1) {
imadaemi 0:659448bed797 18 if(pc.readable()){
imadaemi 0:659448bed797 19 int c = pc.getc();
imadaemi 0:659448bed797 20 pc.printf("Input: %c\r\n", c);
imadaemi 0:659448bed797 21 if(c == '7'){
imadaemi 0:659448bed797 22 break;
imadaemi 0:659448bed797 23 }
imadaemi 0:659448bed797 24 }
imadaemi 0:659448bed797 25 }
imadaemi 0:659448bed797 26
imadaemi 0:659448bed797 27 int ptr, n = 0;
Sigma884 1:de11b189ee57 28 int eeprom_ptr = 0;
Sigma884 1:de11b189ee57 29 /*
imadaemi 2:bd7fad3dc62e 30 // ***************************************************
imadaemi 2:bd7fad3dc62e 31 **Write:buff_ptrとptrを混同してるからうまくいかないプログラム
imadaemi 2:bd7fad3dc62e 32 // ***************************************************
imadaemi 0:659448bed797 33 for(int ii = 0; ii < 2; ii ++){
imadaemi 0:659448bed797 34 pc.printf("Start to write %d EEPROM\r\n",ii);
imadaemi 0:659448bed797 35 setEEPROMGroup(ii);
imadaemi 0:659448bed797 36 EEPROM.setWriteAddr(1, 0, 0x00, 0x00);
imadaemi 0:659448bed797 37 while(1){
imadaemi 0:659448bed797 38 while(1){
imadaemi 0:659448bed797 39 ptr = EEPROM.chargeBuff((int)n++);
imadaemi 0:659448bed797 40 if(ptr == 128){
imadaemi 0:659448bed797 41 EEPROM.writeBuff();
imadaemi 0:659448bed797 42 ptr = EEPROM.setNextPage();
imadaemi 0:659448bed797 43 break;
imadaemi 0:659448bed797 44 }
imadaemi 0:659448bed797 45 }
imadaemi 0:659448bed797 46 if(ptr == 0x01000000){
imadaemi 0:659448bed797 47 ptr = 0;
imadaemi 0:659448bed797 48 break;
imadaemi 0:659448bed797 49 }
imadaemi 0:659448bed797 50 }
imadaemi 0:659448bed797 51 }
Sigma884 1:de11b189ee57 52 */
imadaemi 2:bd7fad3dc62e 53
imadaemi 2:bd7fad3dc62e 54 // ***************************************************
imadaemi 2:bd7fad3dc62e 55 // Write:buff_ptrとptrの混同問題を解決したあとのプログラム
imadaemi 2:bd7fad3dc62e 56 // ***************************************************
imadaemi 2:bd7fad3dc62e 57
imadaemi 2:bd7fad3dc62e 58 for(int i = 0; i < 4; i++){
Sigma884 1:de11b189ee57 59 pc.printf("Start to write %d EEPROM\r\n", i);
Sigma884 1:de11b189ee57 60 setEEPROMGroup(i);
Sigma884 1:de11b189ee57 61 EEPROM.setWriteAddr(1, 0, 0x00, 0x00);
Sigma884 1:de11b189ee57 62
Sigma884 1:de11b189ee57 63 while(1){
Sigma884 1:de11b189ee57 64 ptr = EEPROM.chargeBuff((int)n++);
Sigma884 1:de11b189ee57 65 //ptr = EEPROM.chargeBuff((char)0xff);
Sigma884 1:de11b189ee57 66 if(ptr == 128){
Sigma884 1:de11b189ee57 67 EEPROM.writeBuff();
Sigma884 1:de11b189ee57 68 //ptr = EEPROM.setNextPage();
Sigma884 1:de11b189ee57 69 eeprom_ptr = EEPROM.setNextPage();
Sigma884 1:de11b189ee57 70 //pc.printf("eeprom_ptr: %08x\r\n", eeprom_ptr);
Sigma884 1:de11b189ee57 71 }
Sigma884 1:de11b189ee57 72
Sigma884 1:de11b189ee57 73 if(eeprom_ptr == 0x01000000){
Sigma884 1:de11b189ee57 74 ptr = 0;
Sigma884 1:de11b189ee57 75 eeprom_ptr = 0;
Sigma884 1:de11b189ee57 76 break;
Sigma884 1:de11b189ee57 77 }
Sigma884 1:de11b189ee57 78 }
Sigma884 1:de11b189ee57 79 }
imadaemi 0:659448bed797 80
imadaemi 2:bd7fad3dc62e 81 // ***************************************************
imadaemi 2:bd7fad3dc62e 82 // Read
imadaemi 2:bd7fad3dc62e 83 // ***************************************************
imadaemi 0:659448bed797 84
imadaemi 0:659448bed797 85 char data[128];
imadaemi 0:659448bed797 86 int num, block;
imadaemi 0:659448bed797 87 char ADDR_H, ADDR_L;
imadaemi 0:659448bed797 88
imadaemi 0:659448bed797 89 num = 1;
Sigma884 1:de11b189ee57 90 //block = 0;
Sigma884 1:de11b189ee57 91 //ADDR_H = ADDR_L = 0x00;
imadaemi 0:659448bed797 92
Sigma884 1:de11b189ee57 93 //setEEPROMGroup(0);
imadaemi 2:bd7fad3dc62e 94 for(int j = 0; j < 4; j ++){
imadaemi 0:659448bed797 95 pc.printf("Start to read %d EEPROM\r\n",j);
Sigma884 1:de11b189ee57 96
imadaemi 0:659448bed797 97 setEEPROMGroup(j);
Sigma884 1:de11b189ee57 98 block = 0;
Sigma884 1:de11b189ee57 99 ADDR_H = ADDR_L = 0x00;
Sigma884 1:de11b189ee57 100
imadaemi 0:659448bed797 101 for(int i = 0; i < 1024; i ++){
imadaemi 0:659448bed797 102 switch(i){
imadaemi 0:659448bed797 103 case 512:
imadaemi 0:659448bed797 104 num = 1;
imadaemi 0:659448bed797 105 block = 1;
imadaemi 0:659448bed797 106 break;
imadaemi 0:659448bed797 107
imadaemi 0:659448bed797 108 case 1024:
imadaemi 0:659448bed797 109 num = 2;
imadaemi 0:659448bed797 110 block = 0;
imadaemi 0:659448bed797 111 break;
imadaemi 0:659448bed797 112 }
imadaemi 0:659448bed797 113
imadaemi 0:659448bed797 114 EEPROM.readMultiByte(num, block, ADDR_H, ADDR_L, data, 128);
imadaemi 0:659448bed797 115 for(int x = 0; x < 128; x ++){
imadaemi 0:659448bed797 116 pc.printf("%02x ", data[x]);
imadaemi 0:659448bed797 117 }
imadaemi 0:659448bed797 118 pc.printf("\r\n");
imadaemi 0:659448bed797 119
imadaemi 0:659448bed797 120 if(ADDR_L == 0x00){
imadaemi 0:659448bed797 121 ADDR_L = 0x80;
imadaemi 0:659448bed797 122 }
imadaemi 0:659448bed797 123 else{
imadaemi 0:659448bed797 124 ADDR_L = 0x00;
imadaemi 0:659448bed797 125 ADDR_H ++;
imadaemi 0:659448bed797 126 }
imadaemi 0:659448bed797 127 }
imadaemi 0:659448bed797 128 }
imadaemi 2:bd7fad3dc62e 129
imadaemi 2:bd7fad3dc62e 130 // ***************************************************
imadaemi 2:bd7fad3dc62e 131 // 入力した数字の文字列をint型として受け取る
imadaemi 2:bd7fad3dc62e 132 // ***************************************************
imadaemi 2:bd7fad3dc62e 133
imadaemi 0:659448bed797 134 /*
imadaemi 0:659448bed797 135 while(1) {
imadaemi 0:659448bed797 136 if(pc.readable()){
imadaemi 0:659448bed797 137 int c = pc.getc();
imadaemi 0:659448bed797 138 pc.printf("Input: %c\r\n", c);
imadaemi 0:659448bed797 139 setEEPROMGroup(c-48);
imadaemi 0:659448bed797 140 }
imadaemi 0:659448bed797 141 }
imadaemi 0:659448bed797 142 */
imadaemi 0:659448bed797 143 }
imadaemi 0:659448bed797 144
imadaemi 2:bd7fad3dc62e 145 // ***************************************************
imadaemi 2:bd7fad3dc62e 146 // マルチプレクサで使うEEPROMを変更する
imadaemi 2:bd7fad3dc62e 147 // ***************************************************
imadaemi 0:659448bed797 148 void setEEPROMGroup(int group_num){
imadaemi 0:659448bed797 149 switch(group_num){
imadaemi 0:659448bed797 150 case 0:
imadaemi 0:659448bed797 151 pinA = 0;
imadaemi 0:659448bed797 152 pinB = 0;
imadaemi 0:659448bed797 153 pinC = 0;
imadaemi 0:659448bed797 154 break;
imadaemi 0:659448bed797 155
imadaemi 0:659448bed797 156 case 1:
imadaemi 0:659448bed797 157 pinA = 1;
imadaemi 0:659448bed797 158 pinB = 0;
imadaemi 0:659448bed797 159 pinC = 0;
imadaemi 0:659448bed797 160 break;
imadaemi 0:659448bed797 161
imadaemi 0:659448bed797 162 case 2:
imadaemi 0:659448bed797 163 pinA = 0;
imadaemi 0:659448bed797 164 pinB = 1;
imadaemi 0:659448bed797 165 pinC = 0;
imadaemi 0:659448bed797 166 break;
imadaemi 0:659448bed797 167
imadaemi 0:659448bed797 168 case 3:
imadaemi 0:659448bed797 169 pinA = 1;
imadaemi 0:659448bed797 170 pinB = 1;
imadaemi 0:659448bed797 171 pinC = 0;
imadaemi 0:659448bed797 172 break;
imadaemi 0:659448bed797 173 }
imadaemi 0:659448bed797 174 }