Forum: Mikrocontroller und Digitale Elektronik MAC Adresse vom TI Evalbot auslesen


von Eval (Gast)


Lesenswert?

Ich habe das Problem, dass ich nicht weiss wie ich die Mac adresse des 
Texas Instrument evalbots auslesen kann.

Es geht daraum, dasss ich zwischen mehreren evalbots im C-code 
unterscheiden muss und ich das anhand der MAC-adressen machen möchte.

Texas instrument liefert dafür extra eine Methode
1
//! Gets the MAC address of the Ethernet controller.
2
//!
3
//! \param ulBase is the base address of the controller.
4
//! \param pucMACAddr is the pointer to the location in which to store the
5
//! array of MAC-48 address octets.
6
//!
7
//! This function will read the currently programmed MAC address into the
8
//! \e pucMACAddr buffer.
9
//!
10
//! \sa Refer to EthernetMACAddrSet() API description for more details about
11
//! the MAC address format.
12
//!
13
//! \return None.
14
15
16
void
17
EthernetMACAddrGet(unsigned long ulBase, unsigned char *pucMACAddr)
18
{
19
    unsigned long ulTemp;
20
    unsigned char *pucTemp = (unsigned char *)&ulTemp;
21
22
    //
23
    // Check the arguments.
24
    //
25
    ASSERT(ulBase == ETH_BASE);
26
    ASSERT(pucMACAddr != 0);
27
28
    //
29
    // Read the MAC address from the device.  The first four bytes of the
30
    // MAC address are read from the IA0 register.  The remaining two bytes
31
    // of the MAC addres
32
    //
33
    ulTemp = HWREG(ulBase + MAC_O_IA0);
34
    pucMACAddr[0] = pucTemp[0];
35
    pucMACAddr[1] = pucTemp[1];
36
    pucMACAddr[2] = pucTemp[2];
37
    pucMACAddr[3] = pucTemp[3];
38
    ulTemp = HWREG(ulBase + MAC_O_IA1);
39
    pucMACAddr[4] = pucTemp[0];
40
    pucMACAddr[5] = pucTemp[1];
41
})

ich weiss leider nicht ob ich die erklärung verstanden habe aber ich 
glaube nicht, da ich nur blödsinn über uart ausgegeben bekomme.

Meine idee sieht so aus:
1
unsigned char MacAdrBuffer[60]; // zum speichern der MACadresse
2
3
        ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
4
        ROM_EthernetMACAddrGet(ETH_BASE, &MacAdrBuffer[0]);
5
  UARTprintf("Wert\n");
6
  UARTprintf("%s\n",*MacAdrBuffer);
7
  UARTprintf("ende\n");


er gibt mir immer nur ein zeichen aus. mir ist aufgefallen, dass das 
ausgegebene zeichen abhängig von der länge meines buffers ist

von Bernhard S. (b_spitzer)


Lesenswert?

Eval schrieb:
> unsigned char MacAdrBuffer[60]; // zum speichern der MACadresse
Eine MAC-Adresse besteht aus 6 Bytes, die auch mal 0x00 sein können. 
Warum 60 Bytes??
Wieso versuchst Du die MAC-Adresse als String (%s) zu senden? Wenn da 
ein Wert 0x00 dabei ist, bricht die Ausgabe ab. Also aus den 6 Bytes 6 
Hex-Werte machen mit %x...

von Eval (Gast)


Lesenswert?

die 60 byte waren nur ein test um zu schauen wie sich die ausgabe 
verhält, aber die ausgabe mit %x werde ich mal testen. sind dir denn 
noch fehler bzw sachen aufgefallen die ich machen muss?

von Bernhard S. (b_spitzer)


Lesenswert?

> UARTprintf("%s\n",*MacAdrBuffer);
MacAdrBuffer[] ist ein Array. Also zeigt MacAdrBuffer auf das erste 
Element. Wohin jetzt der Pointer *MacAdrBuffer zeigt ist mir 
schleierhaft. Daher kommt vermutlich auch das unterschiedliche Zeichen 
ja nach Puffergröße. Also entweder nur MacAdrBuffer oder 
*MacAdrBuffer[0].
Ist bei zeichenweiser Ausgabe aber eh hinfällig.
Die for-Schleife mit UARTprintf("%x:",MacAdrBuffer[i]); wird ja das 
Problem nicht sein.

von Markus M. (adrock)


Lesenswert?

Hi,

ich würde es so machen

UARTprintf("%02x:%02x:%02x:%02x:%02x:%02x\n",
MacAdrBuffer[0], MacAdrBuffer[1], MacAdrBuffer[2],
MacAdrBuffer[3], MacAdrBuffer[4], MacAdrBuffer[5]);

Oder eben mit Schleife wie oben vorgeschlagen.

Das "&MacAdrBuffer[0]" ist auch eher unüblich, ein einfaches 
"MacAdrBuffer" macht das gleiche.

Grüße
Markus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.