astrobeed:
[quote author=marcus barnet link=topic=157878.msg1182413#msg1182413 date=1364898878]
@gpb01: è un'ottima alternativa, ma non capisco come funziona, cioè, non capisco se il chip ha già un numero univoco o se gli deve essere impartito prima via software.
Non capisco nemmeno se per leggerlo da Arduino c'è bisogno di avere delle informazioni sul chip o se con lo stesso codice su Arduino è possibile leggere più di un chip ATSHA204 senza distinzioni.
Ogni ic arriva con un codice unico a 72 bit (4.72 * 10^21 diverse combinazioni), in più hai 4.5k di EEPROM in cui memorizzare ulteriori informazioni a tuo piacere.
Con lo stesso codice per Arduino, vedi libreria linkata da Sparkfun, leggi tutte le key che ti pare.
[/quote]
Si, la stavo leggendo solo che non capisco a cosa serve il MAC Challenge perchè avevo capito che il numero univoco fosse il numero seriale.
Cioè, pensavo che potevo accedere al valore del numero univoco contenuto nel chip già solo con la funzione serialNumberExample().
E' corretto o sto facendo degli errori nella comprensione del codice?
A cosa serve il Mac Challenge?
const int sha204Pin = 7;
atsha204Class sha204(sha204Pin);
void setup()
{
Serial.begin(9600);
Serial.println("Sending a Wakup Command. Response should be:\r\n4 11 33 43:");
Serial.println("Response is:");
wakeupExample();
Serial.println();
Serial.println("Asking the SHA204's serial number. Response should be:");
Serial.println("1 23 x x x x x x x EE");
Serial.println("Response is:");
serialNumberExample();
Serial.println();
Serial.println("Sending a MAC Challenge. Response should be:");
Serial.println("23 6 67 0 4F 28 4D 6E 98 62 4 F4 60 A3 E8 75 8A 59 85 A6 79 96 C4 8A 88 46 43 4E B3 DB 58 A4 FB E5 73");
Serial.println("Response is:");
macChallengeExample();
}
void loop()
{
}
byte wakeupExample()
{
uint8_t response[SHA204_RSP_SIZE_MIN];
byte returnValue;
returnValue = sha204.sha204c_wakeup(&response[0]);
for (int i=0; i<SHA204_RSP_SIZE_MIN; i++)
{
Serial.print(response[i], HEX);
Serial.print(" ");
}
Serial.println();
return returnValue;
}
byte serialNumberExample()
{
uint8_t serialNumber[9];
byte returnValue;
returnValue = sha204.getSerialNumber(serialNumber);
for (int i=0; i<9; i++)
{
Serial.print(serialNumber[i], HEX);
Serial.print(" ");
}
Serial.println();
return returnValue;
}
byte macChallengeExample()
{
uint8_t command[MAC_COUNT_LONG];
uint8_t response[MAC_RSP_SIZE];
const uint8_t challenge[MAC_CHALLENGE_SIZE] = {
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF,
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF
};
uint8_t ret_code = sha204.sha204m_execute(SHA204_MAC, 0, 0, MAC_CHALLENGE_SIZE,
(uint8_t *) challenge, 0, NULL, 0, NULL, sizeof(command), &command[0],
sizeof(response), &response[0]);
for (int i=0; i<SHA204_RSP_SIZE_MAX; i++)
{
Serial.print(response[i], HEX);
Serial.print(' ');
}
Serial.println();
return ret_code;
}