simple, stable version

Dependencies:   mbed

Committer:
open4416
Date:
Tue May 18 15:35:19 2021 +0000
Revision:
1:ec8b98cf0bed
Parent:
0:d35231825f42
Change shits for newer A1333 sensor and add macro handling A1333/A1339 difference

Who changed what in which revision?

UserRevisionLine numberNew contents of line
open4416 0:d35231825f42 1 #include "mbed.h"
open4416 0:d35231825f42 2 #include "A1333_PoOPoO.h"
open4416 0:d35231825f42 3
open4416 0:d35231825f42 4 #define pi 3.141592f
open4416 0:d35231825f42 5 #define d2r 0.01745329f
open4416 0:d35231825f42 6 #define NN 1
open4416 1:ec8b98cf0bed 7 #define Rms 1000000 // TT rate
open4416 1:ec8b98cf0bed 8
open4416 1:ec8b98cf0bed 9 //choose if write in configurations
open4416 1:ec8b98cf0bed 10 #define WRCONFIG 1 // 1 to write in configurations
open4416 1:ec8b98cf0bed 11
open4416 1:ec8b98cf0bed 12 //choose if A1339 extended settings
open4416 1:ec8b98cf0bed 13 #define A1339EXT 0 // 1 to enable A1339 extended settings
open4416 0:d35231825f42 14
open4416 0:d35231825f42 15 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓GPIO registor↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 0:d35231825f42 16 //~~~structure~~~//
open4416 0:d35231825f42 17 DigitalOut led(D13); //detection
open4416 0:d35231825f42 18 DigitalOut TT_ext(D12);
open4416 0:d35231825f42 19
open4416 0:d35231825f42 20 //~~~SPI~~~//
open4416 0:d35231825f42 21 DigitalOut spi_CS(D6,1); //low for ACC/MAG enable
open4416 0:d35231825f42 22 SPI spi(D4, D5, D3); //MOSI MISO SCLK
open4416 0:d35231825f42 23
open4416 0:d35231825f42 24 //~~~Serial~~~//
open4416 0:d35231825f42 25 Serial pc(D1, D0); //Serial reg(TX RX)
open4416 0:d35231825f42 26 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of GPIO registor↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 0:d35231825f42 27
open4416 0:d35231825f42 28
open4416 0:d35231825f42 29
open4416 0:d35231825f42 30 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓Varible registor↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 0:d35231825f42 31 //~~~globle~~~//
open4416 0:d35231825f42 32 Ticker TT; //call a timer
open4416 0:d35231825f42 33 int Count = 0; //one second counter for extrenal led blink
open4416 0:d35231825f42 34
open4416 0:d35231825f42 35 //~~~A1333_data~~~//
open4416 0:d35231825f42 36
open4416 0:d35231825f42 37 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of Varible registor↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 0:d35231825f42 38
open4416 0:d35231825f42 39
open4416 0:d35231825f42 40
open4416 0:d35231825f42 41 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓Function registor↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 0:d35231825f42 42 void init_TIMER(); //set TT_main() rate
open4416 0:d35231825f42 43 void TT_main(); //timebase function rated by TT
open4416 0:d35231825f42 44 void init_IO(); //initialize IO state
open4416 1:ec8b98cf0bed 45 void A1333_init(); //initialize shit
open4416 1:ec8b98cf0bed 46 void A1333_reset(); //restart target
open4416 0:d35231825f42 47 void A1333_getstate(); //get current state & errors
open4416 0:d35231825f42 48 void A1333_ulkEEPROM(); //unlock protection of EEPROM
open4416 0:d35231825f42 49 void A1333_getEEP(int X_E); //read EEPROM of X_E
open4416 0:d35231825f42 50 void A1333_writeEEP(int X_E, int32_t DataH, int32_t DataL); //write EEPROM of X_E
open4416 0:d35231825f42 51
open4416 0:d35231825f42 52 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑end of Function registor↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//
open4416 0:d35231825f42 53
open4416 0:d35231825f42 54
open4416 0:d35231825f42 55
open4416 0:d35231825f42 56 //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓main funtion↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//
open4416 0:d35231825f42 57 int main()
open4416 0:d35231825f42 58 {
open4416 0:d35231825f42 59 init_IO(); //initialized value
open4416 0:d35231825f42 60 A1333_init();
open4416 1:ec8b98cf0bed 61
open4416 1:ec8b98cf0bed 62 pc.printf("\n\n");
open4416 0:d35231825f42 63 pc.printf("Welcome to A1333/A1339 configurator\n");
open4416 1:ec8b98cf0bed 64 pc.printf("Resetting target...\n");
open4416 1:ec8b98cf0bed 65 A1333_reset();
open4416 1:ec8b98cf0bed 66 wait_ms(200);
open4416 0:d35231825f42 67
open4416 1:ec8b98cf0bed 68 #if A1339EXT
open4416 1:ec8b98cf0bed 69 pc.printf("A1339 extended settings are enable!\n");
open4416 1:ec8b98cf0bed 70 #endif
open4416 0:d35231825f42 71
open4416 0:d35231825f42 72 A1333_getstate();
open4416 0:d35231825f42 73 pc.printf("\n");
open4416 0:d35231825f42 74
open4416 0:d35231825f42 75 pc.printf("Read PWE_E\n"); //Doesnt matter for us
open4416 0:d35231825f42 76 A1333_getEEP(PWE_E);
open4416 0:d35231825f42 77 pc.printf("\n");
open4416 0:d35231825f42 78
open4416 0:d35231825f42 79 pc.printf("Read ABI_E\n"); //Need to be set for application!!
open4416 0:d35231825f42 80 A1333_getEEP(ABI_E);
open4416 0:d35231825f42 81 pc.printf("\n");
open4416 0:d35231825f42 82
open4416 0:d35231825f42 83 pc.printf("Read MSK_E\n"); //Doesnt matter for us
open4416 0:d35231825f42 84 A1333_getEEP(MSK_E);
open4416 0:d35231825f42 85 pc.printf("\n");
open4416 0:d35231825f42 86
open4416 0:d35231825f42 87 pc.printf("Read PWI_E\n"); //Doesnt matter for us
open4416 0:d35231825f42 88 A1333_getEEP(PWI_E);
open4416 0:d35231825f42 89 pc.printf("\n");
open4416 0:d35231825f42 90
open4416 0:d35231825f42 91 pc.printf("Read ANG_E\n");
open4416 0:d35231825f42 92 A1333_getEEP(ANG_E);
open4416 0:d35231825f42 93 pc.printf("\n");
open4416 0:d35231825f42 94
open4416 0:d35231825f42 95 pc.printf("Read LPC_E\n");
open4416 0:d35231825f42 96 A1333_getEEP(LPC_E);
open4416 0:d35231825f42 97 pc.printf("\n");
open4416 0:d35231825f42 98
open4416 0:d35231825f42 99 pc.printf("Read COM_E\n");
open4416 0:d35231825f42 100 A1333_getEEP(COM_E);
open4416 0:d35231825f42 101 pc.printf("\n");
open4416 0:d35231825f42 102
open4416 0:d35231825f42 103 // A1333/A1339 require unlock before eeprom access
open4416 0:d35231825f42 104 A1333_ulkEEPROM();
open4416 0:d35231825f42 105 pc.printf("\n");
open4416 0:d35231825f42 106
open4416 1:ec8b98cf0bed 107 #if WRCONFIG
open4416 1:ec8b98cf0bed 108 pc.printf("Start writting configurations!\n");
open4416 1:ec8b98cf0bed 109
open4416 0:d35231825f42 110 /* Configuration sectionfor ABI_EEPROM settings "A1333/A1339"
open4416 0:d35231825f42 111 ABI_SLEW_TIME, INV, AHE, INDEX_MODE, WDH, PLH, IOE, UVW, RESOLUTION_PAIRS,
open4416 0:d35231825f42 112 [21:16], [15], [12], [9:8], [7], [6], [5], [4], [3:0],
open4416 1:ec8b98cf0bed 113 00000001, 0, 1, 0, 1, 1, 1, 0, 0100,
open4416 1:ec8b98cf0bed 114 250ns no, yes, 0+R, yes, yes, yes, ABI, 1024pulse/mechRev,(Notice ABx4 res is *4 at last)
open4416 1:ec8b98cf0bed 115 result to 0x0001, 0x10E4
open4416 0:d35231825f42 116 Run follow to write in */
open4416 1:ec8b98cf0bed 117 A1333_writeEEP(ABI_E, 0x01, 0x10E4);
open4416 1:ec8b98cf0bed 118 pc.printf("ABI_E write done\n");
open4416 1:ec8b98cf0bed 119 pc.printf("\n");
open4416 1:ec8b98cf0bed 120
open4416 1:ec8b98cf0bed 121 /* Configuration sectionfor PWI_EEPROM settings "A1333/A1339"
open4416 1:ec8b98cf0bed 122 PEN, BAND, FREQ, PHE, PEO, PES, DM, S17, SC,
open4416 1:ec8b98cf0bed 123 [23], [22:20], [19:16], [14], [13], [12], [3], [1], [0],
open4416 1:ec8b98cf0bed 124 1, 0, 0, 0, 0, 0, 0, 0, 0,
open4416 1:ec8b98cf0bed 125 yes, 3125Hz, no, no, no, no, no, no,
open4416 1:ec8b98cf0bed 126 result to 0x0080, 0x0000
open4416 1:ec8b98cf0bed 127 Run follow to write in */
open4416 1:ec8b98cf0bed 128 A1333_writeEEP(PWI_E, 0x80, 0x0000);
open4416 1:ec8b98cf0bed 129 pc.printf("PWI_E write done\n");
open4416 1:ec8b98cf0bed 130 pc.printf("\n");
open4416 0:d35231825f42 131
open4416 0:d35231825f42 132 /* Configuration sectionfor ANG_EEPROM settings "A1333/A1339"
open4416 0:d35231825f42 133 ORATE, RD, RO, HYSTERESIS, ZERO_OFFSET,
open4416 0:d35231825f42 134 [23:20], [19], [18], [17:12], [11:0],
open4416 0:d35231825f42 135 0000, 0, 0, 101000, 0x000-0x3FF,
open4416 0:d35231825f42 136 1us, no, direction, 20/16383rev, Calibrate in DSM instead,
open4416 0:d35231825f42 137 result to 0x0002, 0x8000
open4416 0:d35231825f42 138 Run follow to write in */
open4416 1:ec8b98cf0bed 139 A1333_writeEEP(ANG_E, 0x02, 0x8000);
open4416 1:ec8b98cf0bed 140 pc.printf("ANG_E write done\n");
open4416 1:ec8b98cf0bed 141 pc.printf("\n");
open4416 0:d35231825f42 142
open4416 1:ec8b98cf0bed 143 #if A1339EXT
open4416 0:d35231825f42 144 /* Configuration sectionfor LPC_EEPROM settings "A1339 only"
open4416 0:d35231825f42 145 T45, TPMD, LPMD, LPM_CYCLE_TIME, LPM_WAKE_THRESHOLD,
open4416 0:d35231825f42 146 [23], [21], [20], [17:12], [10:0],
open4416 0:d35231825f42 147 1, 1, 1, 001011, 01010011111,
open4416 0:d35231825f42 148 default, no, no, default, default,
open4416 0:d35231825f42 149 result to 0x00B0, 0xB29F
open4416 0:d35231825f42 150 Run follow to write in */
open4416 1:ec8b98cf0bed 151 A1333_writeEEP(LPC_E, 0xB0, 0xB29F); //A1339 only
open4416 1:ec8b98cf0bed 152 pc.printf("LPC_E write done\n");
open4416 1:ec8b98cf0bed 153 pc.printf("\n");
open4416 1:ec8b98cf0bed 154 #endif //A1339EXT
open4416 0:d35231825f42 155
open4416 0:d35231825f42 156 /* Configuration sectionfor COM_EEPROM settings "A1333/A1339"
open4416 0:d35231825f42 157 LOCK, LBE, CSE, DST, DHR, MAG_THRES_HI, MAG_THRES_LO,
open4416 0:d35231825f42 158 [23:20], [19], [18], [13], [12], [11:6], [5:0],
open4416 0:d35231825f42 159 0000, 1, 1, 0, 0, 100101, 001101,
open4416 0:d35231825f42 160 no, yes, yes, no, no, default, default,
open4416 0:d35231825f42 161 result to 0x000C, 0x094D
open4416 0:d35231825f42 162 Run follow to write in */
open4416 1:ec8b98cf0bed 163 A1333_writeEEP(COM_E, 0x0C, 0x094D);
open4416 1:ec8b98cf0bed 164 pc.printf("COM_E write done\n");
open4416 1:ec8b98cf0bed 165 pc.printf("\n");
open4416 1:ec8b98cf0bed 166
open4416 1:ec8b98cf0bed 167 #endif //WRCONFIG
open4416 0:d35231825f42 168
open4416 0:d35231825f42 169 pc.printf("End of A1333/A1339 configurator\n");
open4416 0:d35231825f42 170
open4416 1:ec8b98cf0bed 171 init_TIMER(); //start TT_main
open4416 1:ec8b98cf0bed 172
open4416 0:d35231825f42 173 while(1) { //main() loop
open4416 0:d35231825f42 174 if(Count >= NN) { //check if main working
open4416 0:d35231825f42 175 Count=0;
open4416 0:d35231825f42 176 led = !led;
open4416 0:d35231825f42 177 }
open4416 0:d35231825f42 178 }
open4416 0:d35231825f42 179 }
open4416 0:d35231825f42 180
open4416 0:d35231825f42 181
open4416 0:d35231825f42 182 void init_TIMER() //set TT_main{} rate
open4416 0:d35231825f42 183 {
open4416 0:d35231825f42 184 TT.attach_us(&TT_main, Rms);
open4416 0:d35231825f42 185 }
open4416 0:d35231825f42 186
open4416 0:d35231825f42 187
open4416 0:d35231825f42 188 void TT_main() //interrupt function by TT
open4416 0:d35231825f42 189 {
open4416 0:d35231825f42 190 TT_ext = !TT_ext; //indicate TT_main() function working
open4416 0:d35231825f42 191 Count = Count+1; //one second counter
open4416 0:d35231825f42 192 }
open4416 0:d35231825f42 193
open4416 0:d35231825f42 194
open4416 0:d35231825f42 195 void init_IO(void) //initialize
open4416 0:d35231825f42 196 {
open4416 0:d35231825f42 197 pc.baud(115200); //set baud rate
open4416 0:d35231825f42 198 TT_ext = 0;
open4416 0:d35231825f42 199 led = 1;
open4416 0:d35231825f42 200 }
open4416 0:d35231825f42 201
open4416 0:d35231825f42 202
open4416 1:ec8b98cf0bed 203 void A1333_init(void) //initialize
open4416 0:d35231825f42 204 {
open4416 0:d35231825f42 205 //gloable config
open4416 0:d35231825f42 206 spi_CS = 1; //high as init for disable SPI
open4416 0:d35231825f42 207
open4416 0:d35231825f42 208 spi.format(16, 3); //byte width, spi mode
open4416 0:d35231825f42 209 spi.frequency(1000000); //8MHz
open4416 0:d35231825f42 210 }
open4416 0:d35231825f42 211
open4416 1:ec8b98cf0bed 212 void A1333_reset(void) //restart target
open4416 1:ec8b98cf0bed 213 {
open4416 1:ec8b98cf0bed 214 // write in special
open4416 1:ec8b98cf0bed 215 spi_CS = 0;
open4416 1:ec8b98cf0bed 216 spi.write( (((CTRL|WMASK)<<8U)&0xFF00) | 0b111 ); //CTRL.SPECIAL <= 0b111
open4416 1:ec8b98cf0bed 217 spi_CS = 1;
open4416 1:ec8b98cf0bed 218 // write in INITIATE_SPECIAL
open4416 1:ec8b98cf0bed 219 spi_CS = 0;
open4416 1:ec8b98cf0bed 220 spi.write( ((((CTRL+1U)|WMASK)<<8U)&0xFF00) | 0x5A ); //CTRL.INITIATE_SPECIAL <= 0x5A
open4416 1:ec8b98cf0bed 221 spi_CS = 1;
open4416 1:ec8b98cf0bed 222 }
open4416 1:ec8b98cf0bed 223
open4416 0:d35231825f42 224 void A1333_writeEEP(int X_E, int32_t DataH, int32_t DataL)
open4416 0:d35231825f42 225 {
open4416 1:ec8b98cf0bed 226 uint16_t tmp;
open4416 1:ec8b98cf0bed 227
open4416 0:d35231825f42 228 //Read EEPROM of X_E
open4416 0:d35231825f42 229 //Prepare eeprom
open4416 0:d35231825f42 230 spi_CS = 0;
open4416 0:d35231825f42 231 spi.write( ((((EWA+1U)|WMASK)<<8U)&0xFF00) | X_E );
open4416 0:d35231825f42 232 spi_CS = 1;
open4416 0:d35231825f42 233 //Push in data
open4416 0:d35231825f42 234 spi_CS = 0;
open4416 0:d35231825f42 235 spi.write( (((EWDH|WMASK)<<8U)&0xFF00) | ((DataH>>8U)&0xFF) );
open4416 0:d35231825f42 236 spi_CS = 1;
open4416 0:d35231825f42 237 spi_CS = 0;
open4416 0:d35231825f42 238 spi.write( ((((EWDH+1U)|WMASK)<<8U)&0xFF00) | (DataH&0xFF) );
open4416 0:d35231825f42 239 spi_CS = 1;
open4416 0:d35231825f42 240 spi_CS = 0;
open4416 0:d35231825f42 241 spi.write( (((EWDL|WMASK)<<8U)&0xFF00) | ((DataL>>8U)&0xFF) );
open4416 0:d35231825f42 242 spi_CS = 1;
open4416 0:d35231825f42 243 spi_CS = 0;
open4416 0:d35231825f42 244 spi.write( ((((EWDL+1U)|WMASK)<<8U)&0xFF00) | (DataL&0xFF) );
open4416 0:d35231825f42 245 spi_CS = 1;
open4416 0:d35231825f42 246
open4416 0:d35231825f42 247 //Start EEP writing
open4416 0:d35231825f42 248 spi_CS = 0;
open4416 0:d35231825f42 249 spi.write( (((EWCS|WMASK)<<8U)&0xFF00) | 0x80 );
open4416 0:d35231825f42 250 spi_CS = 1;
open4416 1:ec8b98cf0bed 251 tmp = 0x0000;
open4416 1:ec8b98cf0bed 252 while((tmp & 0x0001) != 0x0001) {
open4416 0:d35231825f42 253 spi_CS = 0;
open4416 0:d35231825f42 254 spi.write( (EWCS << 8U) & 0xFF00 );
open4416 0:d35231825f42 255 spi_CS = 1;
open4416 0:d35231825f42 256 spi_CS = 0;
open4416 1:ec8b98cf0bed 257 tmp = spi.write(0x0000);
open4416 0:d35231825f42 258 spi_CS = 1;
open4416 0:d35231825f42 259 }
open4416 0:d35231825f42 260 }
open4416 0:d35231825f42 261
open4416 0:d35231825f42 262 void A1333_getstate(void) //read IMU data give raw data
open4416 0:d35231825f42 263 {
open4416 1:ec8b98cf0bed 264 uint16_t tmp;
open4416 1:ec8b98cf0bed 265
open4416 0:d35231825f42 266 //Read temperature as state check
open4416 0:d35231825f42 267 spi_CS = 0; //start spi talking
open4416 0:d35231825f42 268 spi.write( (TSEN << 8U) & 0xFF00 ); //read mask: RMASK = 0, no need
open4416 0:d35231825f42 269 spi_CS = 1;
open4416 0:d35231825f42 270 spi_CS = 0;
open4416 1:ec8b98cf0bed 271 tmp = spi.write(0x0000);
open4416 0:d35231825f42 272 spi_CS = 1; //end spi talking
open4416 1:ec8b98cf0bed 273 if ((tmp & 0xF000) != 0xF000) {
open4416 1:ec8b98cf0bed 274 pc.printf("Temperature read id mismatch\n");
open4416 0:d35231825f42 275 } else {
open4416 1:ec8b98cf0bed 276 pc.printf("TSEN is: %04X\n", tmp);
open4416 1:ec8b98cf0bed 277 int16_t tmps = tmp<<4;
open4416 1:ec8b98cf0bed 278 float tmpf = tmps/64.0f + 25.0f;
open4416 1:ec8b98cf0bed 279 pc.printf("Temperature is: %.2f\n", tmpf);
open4416 0:d35231825f42 280 }
open4416 0:d35231825f42 281
open4416 0:d35231825f42 282 //Read error check
open4416 0:d35231825f42 283 spi_CS = 0; //start spi talking Wx
open4416 0:d35231825f42 284 spi.write( (ERR << 8U) & 0xFF00 );
open4416 0:d35231825f42 285 spi_CS = 1;
open4416 0:d35231825f42 286 spi_CS = 0;
open4416 1:ec8b98cf0bed 287 tmp = spi.write(0x0000);
open4416 0:d35231825f42 288 spi_CS = 1; //end spi talking
open4416 1:ec8b98cf0bed 289 if ((tmp & 0xF000) != 0xA000) {
open4416 1:ec8b98cf0bed 290 pc.printf("Error read id mismatch\n");
open4416 1:ec8b98cf0bed 291 } else {
open4416 1:ec8b98cf0bed 292 pc.printf("ERR is: %04X\n", tmp);
open4416 1:ec8b98cf0bed 293 }
open4416 0:d35231825f42 294
open4416 0:d35231825f42 295 //Read status check
open4416 0:d35231825f42 296 spi_CS = 0; //start spi talking Wx
open4416 0:d35231825f42 297 spi.write( (STA << 8U) & 0xFF00 );
open4416 0:d35231825f42 298 spi_CS = 1;
open4416 0:d35231825f42 299 spi_CS = 0;
open4416 1:ec8b98cf0bed 300 tmp = spi.write(0x0000);
open4416 0:d35231825f42 301 spi_CS = 1; //end spi talking
open4416 1:ec8b98cf0bed 302 if ((tmp & 0xF000) != 0x8000) {
open4416 1:ec8b98cf0bed 303 pc.printf("State read id mismatch\n");
open4416 1:ec8b98cf0bed 304 } else {
open4416 1:ec8b98cf0bed 305 pc.printf("STA is: %04X\n", tmp);
open4416 1:ec8b98cf0bed 306 }
open4416 0:d35231825f42 307 }
open4416 0:d35231825f42 308
open4416 0:d35231825f42 309 void A1333_ulkEEPROM(void)
open4416 0:d35231825f42 310 {
open4416 1:ec8b98cf0bed 311 uint16_t tmp;
open4416 1:ec8b98cf0bed 312
open4416 0:d35231825f42 313 //read key lock
open4416 0:d35231825f42 314 spi_CS = 0; //start spi talking Wx
open4416 0:d35231825f42 315 spi.write( (IKEY << 8U) & 0xFF00 );
open4416 0:d35231825f42 316 spi_CS = 1;
open4416 0:d35231825f42 317 spi_CS = 0;
open4416 1:ec8b98cf0bed 318 tmp = spi.write(0x0000);
open4416 0:d35231825f42 319 spi_CS = 1;
open4416 1:ec8b98cf0bed 320 pc.printf("IKEY before unlock is: %04X\n", tmp);
open4416 0:d35231825f42 321
open4416 0:d35231825f42 322 //Now try to unlock EEPROM write
open4416 0:d35231825f42 323 //write in key
open4416 0:d35231825f42 324 spi_CS = 0;
open4416 0:d35231825f42 325 spi.write( (((IKEY|WMASK)<<8U)&0xFF00) | 0x00 );
open4416 0:d35231825f42 326 spi_CS = 1;
open4416 0:d35231825f42 327 spi_CS = 0;
open4416 0:d35231825f42 328 spi.write( (((IKEY|WMASK)<<8U)&0xFF00) | 0x27 );
open4416 0:d35231825f42 329 spi_CS = 1;
open4416 0:d35231825f42 330 spi_CS = 0;
open4416 0:d35231825f42 331 spi.write( (((IKEY|WMASK)<<8U)&0xFF00) | 0x81 );
open4416 0:d35231825f42 332 spi_CS = 1;
open4416 0:d35231825f42 333 spi_CS = 0;
open4416 0:d35231825f42 334 spi.write( (((IKEY|WMASK)<<8U)&0xFF00) | 0x1F );
open4416 0:d35231825f42 335 spi_CS = 1;
open4416 0:d35231825f42 336 spi_CS = 0;
open4416 0:d35231825f42 337 spi.write( (((IKEY|WMASK)<<8U)&0xFF00) | 0x77 );
open4416 0:d35231825f42 338 spi_CS = 1;
open4416 0:d35231825f42 339
open4416 0:d35231825f42 340 //read key lock again after unlock
open4416 0:d35231825f42 341 spi_CS = 0; //start spi talking Wx
open4416 0:d35231825f42 342 spi.write( (IKEY << 8U) & 0xFF00 );
open4416 0:d35231825f42 343 spi_CS = 1;
open4416 0:d35231825f42 344 spi_CS = 0;
open4416 1:ec8b98cf0bed 345 tmp = spi.write(0x0000);
open4416 0:d35231825f42 346 spi_CS = 1;
open4416 1:ec8b98cf0bed 347 pc.printf("IKEY is: %04X\n", tmp);
open4416 1:ec8b98cf0bed 348 if ((tmp & 0x00FF) != 0x0001) {
open4416 0:d35231825f42 349 pc.printf("Device fail to unlock\n");
open4416 0:d35231825f42 350 } else {
open4416 0:d35231825f42 351 pc.printf("Device unlocked\n");
open4416 0:d35231825f42 352 }
open4416 0:d35231825f42 353 }
open4416 0:d35231825f42 354
open4416 0:d35231825f42 355 void A1333_getEEP(int X_E)
open4416 0:d35231825f42 356 {
open4416 1:ec8b98cf0bed 357 uint16_t tmp;
open4416 1:ec8b98cf0bed 358
open4416 0:d35231825f42 359 //Read eeprom
open4416 0:d35231825f42 360 spi_CS = 0;
open4416 0:d35231825f42 361 spi.write( ((((ERA+1U)|WMASK)<<8U)&0xFF00) | X_E );
open4416 0:d35231825f42 362 spi_CS = 1;
open4416 0:d35231825f42 363 spi_CS = 0;
open4416 0:d35231825f42 364 spi.write( (((ERCS|WMASK)<<8U)&0xFF00) | 0x80 );
open4416 0:d35231825f42 365 spi_CS = 1;
open4416 1:ec8b98cf0bed 366 tmp = 0x0000;
open4416 1:ec8b98cf0bed 367 while((tmp & 0x0001) != 0x0001) {
open4416 0:d35231825f42 368 spi_CS = 0;
open4416 0:d35231825f42 369 spi.write( (ERCS << 8U) & 0xFF00 );
open4416 0:d35231825f42 370 spi_CS = 1;
open4416 0:d35231825f42 371 spi_CS = 0;
open4416 1:ec8b98cf0bed 372 tmp = spi.write(0x0000);
open4416 0:d35231825f42 373 spi_CS = 1;
open4416 0:d35231825f42 374 }
open4416 0:d35231825f42 375 spi_CS = 0;
open4416 0:d35231825f42 376 spi.write( (ERDH << 8U) & 0xFF00 );
open4416 0:d35231825f42 377 spi_CS = 1;
open4416 0:d35231825f42 378 spi_CS = 0;
open4416 1:ec8b98cf0bed 379 tmp = spi.write( (ERDL << 8U) & 0xFF00 ) & 0xFF;
open4416 0:d35231825f42 380 spi_CS = 1;
open4416 1:ec8b98cf0bed 381 pc.printf("ERDH/ERDL: %02X", tmp);
open4416 0:d35231825f42 382
open4416 0:d35231825f42 383 spi_CS = 0;
open4416 1:ec8b98cf0bed 384 tmp = spi.write(0x0000);
open4416 0:d35231825f42 385 spi_CS = 1;
open4416 1:ec8b98cf0bed 386 pc.printf("%04X\n", tmp);
open4416 0:d35231825f42 387 }