mille-feuille module MCU program

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Info
Date:
Tue Sep 06 04:45:08 2022 +0000
Commit message:
open

Changed in this revision

EEPROM24LC01.cpp Show annotated file Show diff for this revision Revisions of this file
EEPROM24LC01.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EEPROM24LC01.cpp	Tue Sep 06 04:45:08 2022 +0000
@@ -0,0 +1,58 @@
+/*
+ ***************************************************************************
+ * File Name    : EEPROM24LC01.cpp
+ *
+ * Revision     : 1.0
+ * Notes        :
+ * Target Board : mbed LPC824
+ *
+ * Revision History:
+ ***************************************************************************
+ */
+#include "EEPROM24LC01.h"
+#include "mbed.h"
+
+EEPROM24LC01::EEPROM24LC01(I2C *i2c, const int address):
+    _i2c_address(address<<1), _i2c(i2c)
+{
+}
+
+int EEPROM24LC01::byte8_write(char *data)
+{
+    int res;
+    char buf[9];
+    int i = 0;
+
+    buf[0] = 0;        // Address
+
+    for(i=0;i<8;++i){
+        buf[i+1] = data[i];
+    }
+/*    buf[1] = data[0];
+    buf[2] = data[1];
+    buf[3] = data[2];
+    buf[4] = data[3];
+    buf[5] = data[4];
+    buf[6] = data[5];
+    buf[7] = data[6];
+    buf[8] = data[7];
+*/
+    res = _i2c->write(_i2c_address, buf, sizeof(buf), false);
+
+    wait_ms(5);         // 5mS
+
+    return res;
+}
+
+
+int EEPROM24LC01::readAll( char *data, int size )
+{
+    int res;
+    char buf[1];
+
+    buf[0] = 0;        // Read Address High byte set
+    res = _i2c->write(_i2c_address, buf, sizeof(buf), true);
+    res = _i2c->read(_i2c_address, (char *)data, size, false);
+
+    return res;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EEPROM24LC01.h	Tue Sep 06 04:45:08 2022 +0000
@@ -0,0 +1,31 @@
+/*
+ ***************************************************************************
+ * File Name    : EEPROM24LC01.h
+ *
+ * Revision     : 1.0
+ * Notes        :
+ * Target Board : mbed LPC824
+ *
+ * Revision History:
+ ***************************************************************************
+ */
+
+#ifndef _EEPROM24LC01_H_
+#define _EEPROM24LC01_H_
+
+#include "mbed.h"
+#define     I2C_ADDR_EEPROM24LC01        0x50
+
+class EEPROM24LC01
+{
+private:
+    int _i2c_address;
+    I2C *_i2c;
+
+public:
+    EEPROM24LC01(I2C *i2c, const int address=I2C_ADDR_EEPROM24LC01 );
+    int byte8_write( char *data );
+    int readAll( char *data, int size );
+};
+
+#endif /* _EEPROM24LC01_H_ */
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Sep 06 04:45:08 2022 +0000
@@ -0,0 +1,834 @@
+#include "mbed.h"
+#include "EEPROM24LC01.h"
+
+//#define def_myAddress 0x8001
+
+//Bus switch
+//TC7MBL3125 nOE
+//#define GateClose 1
+//#define GateOpen 0
+
+//TC7MBL3126 OE
+#define GateClose 0
+#define GateOpen 1
+
+
+#define OffFET 0
+#define OnFET 1
+#define HOLD 0xff
+#define ALL_HOLD 0xff
+#define NOTHOLD 0
+
+//#define test 1
+//#define ROMtest 1
+//#define debug 1
+
+//#define SPIfreq 2000000
+#define SPIfreq 17000000
+
+I2C i2c(I2C_SDA,I2C_SCL);        // sda, scl
+EEPROM24LC01 eeprom(&i2c, 0x50);
+
+//DigitalOut myGate(P0_21,0);
+DigitalOut Gate1_1(P0_14,1);
+DigitalOut Gate1_2(P0_23,1);
+DigitalOut Gate1_3(P0_21,1);
+DigitalOut Gate1_4(P0_22,1);
+DigitalOut Gate2_MISO(P0_20,1);
+DigitalOut Gate2_MOSI(P0_19,1);
+DigitalOut Gate2_SCK(P0_17,1);
+DigitalOut Gate2_4(P0_13,1);
+
+DigitalInOut myIO1(P0_1);//ng
+DigitalInOut myIO2(P0_28);
+DigitalInOut myIO3(P0_27);
+DigitalInOut myIO4(P0_26);
+
+DigitalOut myFET(P0_6,0);
+
+DigitalIn iAddress1(P0_8);
+DigitalIn iAddress2(P0_9);
+
+DigitalOut myled(LED2,0);
+
+#ifdef debug
+Serial pc(USBTX, USBRX); // tx, rx
+#endif
+
+//SPISlave device(P0_26, P0_25, P0_24, P0_15); // mosi, miso, sclk, ssel
+//SPISlave device(P0_25, P0_26, P0_24, P0_15); // mosi, miso, sclk, ssel
+SPISlave device(P0_25, P0_18, P0_24, P0_15); // mosi, miso, sclk, ssel
+
+uint8_t address[4];
+uint8_t exData[3];
+uint8_t gateData;
+uint32_t def_myAddress;
+uint32_t def_searchAddress;
+
+void closeAllGate(void);
+
+#ifdef test
+void spiTest(void){
+    device.reply(0x00);              // Prime SPI with first reply
+    printf("SPI slave test\r\n");
+    while(1) {
+        if(device.receive()) {
+            int v = device.read();   // Read byte from master
+            printf("Recieve = %d\r\n",v);
+            //v = (v + 1) % 0x100;     // Add one to it, modulo 256
+            device.reply(v+1);         // Make this the next reply
+            printf("reply = %d\r\n",v);
+        }
+    }
+}
+
+void IoTest(void){
+    int inData[4];
+    int inAddr1,inAddr2;
+    
+    myIO1.input();
+    myIO2.input();
+    myIO3.input();
+    myIO4.input();
+    
+    printf("IoTest\r\n");
+    
+    while(1){
+        
+        inAddr1 = iAddress1;
+        inAddr2 = iAddress2;
+        if(inAddr1 == 0){
+            myIO1.input();
+            myIO2.input();
+            myIO3.input();
+            myIO4.input();
+            myIO1.mode(PullNone);
+            myIO2.mode(PullNone);
+            myIO3.mode(PullNone);
+            myIO4.mode(PullNone);
+            inData[0] = myIO1;
+            inData[1] = myIO2;
+            inData[2] = myIO3;
+            inData[3] = myIO4;
+            printf("inData[0] = %d\r\n",inData[0]);
+            printf("inData[1] = %d\r\n",inData[1]);
+            printf("inData[2] = %d\r\n",inData[2]);
+            printf("inData[3] = %d\r\n\r\n",inData[3]);
+        }else{
+            printf("myIOs output\r\n");
+            myIO1.output();
+            myIO2.output();
+            myIO3.output();
+            myIO4.output();
+            myIO1.mode(PullUp);
+            myIO2.mode(PullUp);
+            myIO3.mode(PullUp);
+            myIO4.mode(PullUp);
+            myIO1 = 1;
+            myIO2 = 1;
+            myIO3 = 1;
+            myIO4 = 1;
+        }
+        printf("inAddr1 = %d\r\n",inAddr1);
+        printf("inAddr2 = %d\r\n",inAddr2);
+        
+        
+        Gate1_1 = 1;
+        Gate1_2 = 1;
+        Gate1_3 = 1;
+        Gate1_4 = 1;
+        Gate2_MISO = 1;
+        Gate2_MOSI = 1;
+        Gate2_SCK = 1;
+        //Gate2_4 = 1;
+        myFET = 1;
+        myled = 1;
+        
+        
+        wait(1);
+        
+        if(inAddr1==1){
+            myIO1 = 0;
+            myIO2 = 0;
+            myIO3 = 0;
+            myIO4 = 0;
+        }
+        
+        Gate1_1 = 0;
+        Gate1_2 = 0;
+        Gate1_3 = 0;
+        Gate1_4 = 0;
+        Gate2_MISO = 0;
+        Gate2_MOSI = 0;
+        Gate2_SCK = 0;
+        //Gate2_4 = 0;
+        myFET = 0;
+        myled = 0;
+        
+        wait(1);
+        
+    }
+    
+}
+
+#endif
+
+
+#ifdef ROMtest
+void EEPROMtest(void){
+    char bufData[10];
+    
+    printf("write test\n\r");
+    
+    bufData[0]=0x80;//address1
+    bufData[1]=0x00;//address2
+    bufData[2]=0x00;//address3
+    bufData[3]=0x0D;//address4
+    bufData[4]=0x04;//extra data
+    bufData[5]=0x05;//extra data
+    bufData[6]=0x06;//extra data
+    bufData[7]=0x07;//gate open pattern number
+    eeprom.byte8_write( bufData);
+    
+    bufData[0]=0xAA;
+    
+    printf("end\n\r");
+    
+    
+    bufData[0]=0;
+    bufData[1]=0;
+    bufData[2]=0;
+    bufData[3]=0;
+    bufData[4]=0;
+    bufData[5]=0;
+    bufData[6]=0;
+    bufData[7]=0;
+    
+    
+    eeprom.readAll( bufData, 8 );
+    
+    printf("0:%02x\n\r",bufData[0]);
+    printf("1:%02x\n\r",bufData[1]);
+    printf("2:%02x\n\r",bufData[2]);
+    printf("3:%02x\n\r",bufData[3]);
+    printf("4:%02x\n\r",bufData[4]);
+    printf("5:%02x\n\r",bufData[5]);
+    printf("6:%02x\n\r",bufData[6]);
+    printf("7:%02x\n\r",bufData[7]);
+    
+    printf("\n\r Read again! \n\r\n\r");
+    
+    
+    eeprom.readAll( bufData, 8 );
+    
+    printf("0:%02x\n\r",bufData[0]);
+    printf("1:%02x\n\r",bufData[1]);
+    printf("2:%02x\n\r",bufData[2]);
+    printf("3:%02x\n\r",bufData[3]);
+    printf("4:%02x\n\r",bufData[4]);
+    printf("5:%02x\n\r",bufData[5]);
+    printf("6:%02x\n\r",bufData[6]);
+    printf("7:%02x\n\r",bufData[7]);
+    
+    printf("\nend\n\r");   
+    
+
+    while(1);
+}
+#endif
+
+void ReadDataFromEEPROM(void){
+    int i;
+    char bufData[8];
+    char buf;
+    char buf1,buf2;
+    
+    eeprom.readAll( bufData, 8 );
+#ifdef debug    
+    printf("0:%02x\n\r",bufData[0]);
+    printf("1:%02x\n\r",bufData[1]);
+    printf("2:%02x\n\r",bufData[2]);
+    printf("3:%02x\n\r",bufData[3]);
+    printf("4:%02x\n\r",bufData[4]);
+    printf("5:%02x\n\r",bufData[5]);
+    printf("6:%02x\n\r",bufData[6]);
+    printf("7:%02x\n\r",bufData[7]);
+#endif
+    
+    for(i=0;i<4;++i){
+        address[i] = bufData[i];
+        def_myAddress = (def_myAddress<<8) + bufData[i];
+#ifdef debug    
+        printf("address%d : %02x\n\r",i,address[i]);
+#endif
+    }
+#ifdef debug    
+    printf("def_myAddress %08x\n\r",def_myAddress);
+#endif
+
+    buf = 0;
+    buf1 = iAddress1.read();
+    if(buf1==0){
+        buf1 = 1;
+    }else if(buf1==1){
+        buf1 = 0;
+    }
+    buf = buf1;
+
+//    buf = iAddress1.read();
+
+    
+    buf2 = iAddress2.read();
+    if(buf2==0){
+        buf2 = 1;
+    }else if(buf2==1){
+        buf2 = 0;
+    }
+    
+    buf = (buf<<1) + buf2;
+
+//    buf = (buf<<1) + iAddress2.read();
+    
+    def_myAddress += buf;
+
+#ifdef debug    
+    printf("def_myAddress %08x\n\r",def_myAddress);
+#endif
+    
+    for(i=4;i<7;++i){
+        exData[i-4] = bufData[i];
+#ifdef debug    
+        printf("exData%d : %02x\n\r",i-4,exData[i-4]);
+#endif
+    }
+    
+    gateData = bufData[7];
+#ifdef debug    
+    printf("gateData : %02x\n\r",gateData);
+#endif
+
+    def_searchAddress = (def_myAddress & 0x3FFFFFFF) + 0x40000000;
+
+    
+}
+
+/*
+void holdMode(int data){
+    int inData[4];
+    
+    myIO1.input();
+    myIO2.input();
+    myIO3.input();
+    myIO4.input();
+    
+    if(data == NOTHOLD){
+        myIO1.mode(PullNone);
+        myIO2.mode(PullNone);
+        myIO3.mode(PullNone);
+        myIO4.mode(PullNone);
+        
+        myled = 0;
+    
+    }else if(data == HOLD){
+        
+        myIO1.mode(PullDown);
+        myIO2.mode(PullDown);
+        myIO3.mode(PullDown);
+        myIO4.mode(PullDown);
+        
+        //read
+        inData[0] = myIO1;
+        inData[1] = myIO2;
+        inData[2] = myIO3;
+        inData[3] = myIO4;
+        //printf("inData[1]=%d\r\n",inData[1]);
+        
+        //closeAllGate();
+        
+        //hold
+        myIO1.output();
+        myIO2.output();
+        myIO3.output();
+        myIO4.output();
+        
+        myIO1.mode(PullUp);
+        myIO2.mode(PullUp);
+        myIO3.mode(PullUp);
+        myIO4.mode(PullUp);
+        
+        myIO1 = inData[0];
+        myIO2 = inData[1];
+        myIO3 = inData[2];
+        myIO4 = inData[3];
+        
+        myled = 1;
+        
+    }
+}
+*/
+
+void holdIOs(int select, int readData){
+        
+        if(select == 1){
+            myIO1.mode(PullDown);
+            //hold
+            myIO1.output();
+            myIO1.mode(PullUp);
+            myIO1 = readData;
+            
+        }else if(select == 2){
+            myIO2.mode(PullDown);
+            //hold
+            myIO2.output();
+            myIO2.mode(PullUp);
+            myIO2 = readData;
+            
+        }else if(select == 3){
+            myIO3.mode(PullDown);
+            //hold
+            myIO3.output();
+            myIO3.mode(PullUp);
+            myIO3 = readData;
+            
+        }else if(select == 4){
+            myIO4.mode(PullDown);
+            //hold
+            myIO4.output();
+            myIO4.mode(PullUp);
+            myIO4 = readData;
+            
+        }
+    
+}
+
+void holdMode(uint16_t data){
+    int inData[4];
+    uint8_t data8,dataBuf;
+    data8 = data;
+    //printf("data = %d, data8 = %d\r\n",data,data8);
+    
+    myIO1.input();
+    myIO2.input();
+    myIO3.input();
+    myIO4.input();
+    //read
+    inData[0] = myIO1;
+    inData[1] = myIO2;
+    inData[2] = myIO3;
+    inData[3] = myIO4;
+    //printf("inData[0]=%d\r\n",inData[0]);
+    //printf("inData[1]=%d\r\n",inData[1]);
+    
+    if(data == NOTHOLD){
+        //printf("NOTHOLD\r\n");
+        myIO1.mode(PullNone);
+        myIO2.mode(PullNone);
+        myIO3.mode(PullNone);
+        myIO4.mode(PullNone);
+        
+        myled = 0;
+        
+    }else if(data == ALL_HOLD){
+        //printf("ALL_HOLD\r\n");
+        holdIOs(1,inData[0]);
+        holdIOs(2,inData[1]);
+        holdIOs(3,inData[2]);
+        holdIOs(4,inData[3]);
+        
+        myled = 1;
+    }else{
+        dataBuf = data8 & 0b00000001;
+        if(dataBuf == 1){
+            //printf("data 1\r\n");
+            holdIOs(1,inData[0]);
+        }
+        
+        dataBuf = (data8>>1) & 0b00000001;
+        if(dataBuf == 1){
+            //printf("data 2\r\n");
+            holdIOs(2,inData[1]);
+        }
+        
+        dataBuf = (data8>>2) & 0b00000001;
+        if(dataBuf == 1){
+            //printf("data 3\r\n");
+            holdIOs(3,inData[2]);
+        }
+        
+        dataBuf = (data8>>3) & 0b00000001;
+        if(dataBuf == 1){
+            //printf("data 4\r\n");
+            holdIOs(4,inData[3]);
+        }
+    }
+}
+
+
+
+
+
+void closeAllGate(void){
+    
+            Gate1_1 = GateClose;
+            Gate1_2 = GateClose;
+            Gate1_3 = GateClose;
+            Gate1_4 = GateClose;
+            Gate2_MISO = GateClose;
+            Gate2_MOSI = GateClose;
+            Gate2_SCK = GateClose;
+            Gate2_4 = GateClose;
+            myFET = OffFET;
+}
+
+void writeMode1(uint16_t mode1, uint16_t mode2){
+    
+    switch(mode1){
+        case 0x01:
+            holdMode(NOTHOLD);
+            //close all gate
+            myFET = OffFET;
+            //myGate = GateClose;
+            closeAllGate();
+            myled = 0;
+#ifdef debug
+            printf("close gate\r\n");
+#endif
+            break;
+            
+        case 0x02:
+            //open gate normal IOs
+            closeAllGate();
+            myFET = OffFET;
+            //myGate = GateOpen;
+            Gate1_1 = GateOpen;
+            Gate1_2 = GateOpen;
+            Gate1_3 = GateOpen;
+            Gate1_4 = GateOpen;
+            holdMode(NOTHOLD);
+            myled = 1;
+#ifdef debug
+            printf("open gate\r\n");
+#endif
+            break;
+            
+        case 0x03:
+            //Detect mode ON
+            //myGate = GateClose;
+            closeAllGate();
+            wait_ms(0.01);
+            myFET = OnFET;
+            myled = 1;
+#ifdef debug
+            printf("Detect mode ON\r\n");
+#endif
+            break;
+            
+        case 0x04:
+            //Detect mode OFF
+            //myGate = GateClose;
+            closeAllGate();
+            wait_ms(0.01);
+            myFET = OffFET;
+            myled = 0;
+#ifdef debug
+            printf("Detect mode OFF\r\n");
+#endif
+            break;
+            
+        case 0x05://LED on
+            myled = 1;
+#ifdef debug
+            printf("LED ON\r\n");
+#endif
+            break;
+            
+        case 0x06://LED off
+            myled = 0;
+#ifdef debug
+            printf("LED OFF\r\n");
+#endif
+            break;
+            
+        case 0x07://SPI gate : MOSI MISO SCK CS
+            closeAllGate();
+            Gate2_MOSI = GateOpen;
+            Gate2_MISO = GateOpen;
+            Gate2_SCK = GateOpen;
+            Gate1_4 = GateOpen;
+            holdMode(NOTHOLD);
+            myled = 1;
+            break;
+            
+        case 0x08://One way SPI gate : MOSI SCK CS EXtra IO
+            closeAllGate();
+            Gate2_MOSI = GateOpen;
+            Gate1_2 = GateOpen;
+            Gate2_SCK = GateOpen;
+            Gate1_4 = GateOpen;
+            holdMode(NOTHOLD);
+            myled = 1;
+            
+            break;
+            
+        case 0x09://SCK as a clock : SCK Extra IOs
+            closeAllGate();        
+            Gate1_1 = GateOpen;
+            Gate1_2 = GateOpen;
+            Gate2_SCK = GateOpen;
+            Gate1_4 = GateOpen;
+            holdMode(NOTHOLD);
+            myled = 1;
+        
+            break;
+            
+        case 0x0A://SPI gate : MISO SCK CS
+            closeAllGate();        
+            Gate1_1 = GateOpen;
+            Gate2_MISO = GateOpen;
+            Gate2_SCK = GateOpen;
+            Gate1_4 = GateOpen;
+            holdMode(NOTHOLD);
+            myled = 1;
+        
+            break;
+            
+        case 0x0B://hold mode ON
+            //holdMode(HOLD);
+            holdMode(mode2);
+            closeAllGate();
+            break;
+            
+        case 0x0C://hold mode OFF
+            holdMode(NOTHOLD);
+            //closeAllGate();
+            break;
+            
+        default:
+            myFET = OffFET;
+            //myGate = GateClose;
+            closeAllGate();
+            holdMode(NOTHOLD);
+#ifdef debug
+            printf("default\r\n");
+#endif
+            myled = 0;
+            break;
+    }
+}
+
+
+void writeMode2(uint16_t mode2){
+    //not yet
+    
+}
+
+void resetAll(void){
+    myFET = OffFET;
+    //myGate = GateClose;
+    closeAllGate();
+    myled = 0;
+}
+
+int main() {
+    uint8_t flg_mode = 0;
+    uint16_t SpiRdata = 0;
+    //uint16_t SpiAddr = 0;
+    uint32_t SpiAddr = 0;
+    uint16_t SpiIoNo = 0;
+    uint16_t SpiWrite = 0;
+    uint8_t resetCounter = 0;
+    uint8_t flg_ResetMode = 0;
+
+#ifdef ROMtest
+    EEPROMtest();
+    while(1){
+        ;
+    }
+#endif
+
+#ifdef test
+    while(1){
+        holdMode(0b00001001);
+        wait(1);
+        holdMode(0b00000110);
+        wait(1);
+        holdMode(0b00000101);
+        wait(1);
+        holdMode(0b00001010);
+        wait(1);
+    }
+    spiTest();
+    IoTest();
+#endif
+    
+    myIO1.input();
+    myIO2.input();
+    myIO3.input();
+    myIO4.input();
+    myIO1.mode(PullNone);
+    myIO2.mode(PullNone);
+    myIO3.mode(PullNone);
+    myIO4.mode(PullNone);
+    
+    myled = 1;
+    wait(0.1);
+    myled = 0;
+    wait(0.1);
+    myled = 1;
+    wait(0.1);
+    myled = 0;
+    wait(0.1);
+    
+    //myUart.printf("test OK /r/n");
+    //EEPROMtest();
+    
+    ReadDataFromEEPROM();
+    
+    //def_myAddress=0x80000001;
+    //while(1);
+    
+    myFET = OffFET;
+    //myGate = GateClose;
+    closeAllGate();
+    
+    myled = 0;
+    device.format(8,0);
+    device.frequency(SPIfreq);
+    
+    device.reply(0x00);              // Prime SPI with first reply
+    
+/*
+holdMode(HOLD);
+while(1){
+    ;
+    }
+*/  
+  
+    while(1) {
+        flg_ResetMode = 0;
+        if(device.receive()) {
+            SpiRdata = device.read();
+#ifdef debug
+            printf("device.receive() SpiRdata = %d\r\n",SpiRdata);
+            printf("flg_mode = %d\r\n",flg_mode);
+#endif
+            //myled = 1;
+            if(SpiRdata == 0x00){
+                ++resetCounter;
+                if(resetCounter >= 6){
+            //if((SpiRdata == 0x00)&&(flg_mode != 1)){//reset
+                    flg_mode = 0;
+                    SpiAddr = 0;
+                    SpiIoNo = 0;
+                    SpiWrite = 0;
+                    resetCounter = 0;
+                    flg_ResetMode = 1;
+                    
+                    //resetAll();
+                    myled = 1;
+                    wait(0.1);
+                    myled = 0;
+                    wait(0.1);
+                    myled = 1;
+                    wait(0.1);
+                    myled = 0;
+                    wait(0.1);
+#ifdef debug
+                    printf("reset\r\n");
+#endif
+                }
+                
+            }else{
+                resetCounter = 0;
+            }
+                
+            //}else{//select mode
+                
+                if((flg_mode == 0) && (flg_ResetMode == 0)) {//read address data
+                    SpiAddr = SpiRdata;
+                    flg_mode = 1;
+#ifdef debug
+                    printf("0 flg_mode = %d\r\n",flg_mode);
+#endif
+                }else if(flg_mode == 1) {//read address data
+                    SpiAddr = (SpiAddr<<8) + SpiRdata;
+                    flg_mode = 11;
+#ifdef debug
+                    printf("1 flg_mode = %d\r\n",flg_mode);
+#endif
+                }else if(flg_mode == 11) {//read address data
+                    SpiAddr = (SpiAddr<<8) + SpiRdata;
+                    flg_mode = 12;
+#ifdef debug
+                    printf("11 flg_mode = %d\r\n",flg_mode);
+#endif
+                }else if(flg_mode == 12) {//read address data
+                    SpiAddr = (SpiAddr<<8) + SpiRdata;
+                    flg_mode = 2;
+#ifdef debug
+                    printf("12 flg_mode = %d\r\n",flg_mode);
+#endif
+                }else if(flg_mode == 2) {//read address data
+                    SpiIoNo = SpiRdata;
+                    flg_mode = 3;
+#ifdef debug
+                    printf("2 flg_mode = %d\r\n",flg_mode);
+#endif
+                }else if(flg_mode == 3) {//read fpga write data
+                    SpiWrite = SpiRdata;
+                    flg_mode = 0;
+#ifdef debug
+                    printf("3 flg_mode = %d\r\n",flg_mode);
+                    printf("SpiAddr = %d\r\n",SpiAddr);
+                    printf("SpiAddr = %08x\r\n",SpiAddr);
+                    printf("SpiIoNo = %d\r\n",SpiIoNo);
+                    printf("SpiWrite = %d\r\n",SpiWrite);
+#endif
+                    
+                    //Select mode
+                    if(SpiAddr == def_myAddress){
+#ifdef debug
+                        printf("Select mode\r\n");
+#endif
+                        writeMode1(SpiIoNo,SpiWrite);
+                        //writeMode2(SpiWrite);
+                        //myled = 1;
+                        
+                        /*while(1) {
+                            for(int i=0;i<SpiIoNo;++i){
+                                myled = 1;
+                                wait(0.2);
+                                myled = 0;
+                                wait(0.2);
+                            }
+                            myled = 1;
+                            wait(1);
+                            myled = 0;
+                            wait(1);
+                        }*/
+                        
+                        flg_mode = 0;
+                        SpiAddr = 0;
+                        SpiIoNo = 0;
+                        SpiWrite = 0;
+                        
+                    }else if((SpiAddr < 0x80000000)&&(SpiAddr <= def_searchAddress)){
+                        writeMode1(SpiIoNo,SpiWrite);
+                        //writeMode2(SpiWrite);
+                    }else{//not this address
+                        //flug reset
+                        flg_mode = 0;
+                        SpiAddr = 0;
+                        SpiIoNo = 0;
+                        SpiWrite = 0;
+                        myled = 0;
+#ifdef debug
+                        printf("Not me\r\n");
+#endif
+                     
+                    }
+                }
+            
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Sep 06 04:45:08 2022 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/25aea2a3f4e3
\ No newline at end of file