MAC Adresse vom TI Evalbot auslesen

Gast #2939290
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
#2940517
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.
#2940545
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren