een print. hardware testen door middel van software

Post on 04-Jun-2015

220 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Een print

Hardware testen

door middel van software

Geheugen testen

Hoofdstuk 14,

Programming embedded systems

With C and GNU Development tools

Michael Barr& Antony Massa

O’Reilly

Ontbreken van geheugen chips

Databus

Adresbus

CPU

MEMORY

MEMORY

Ontbreken van geheugen chips

o Sommige geheugen testen:schrijven en lezen onmiddelijk daarna.

• Een ontbrekende geheugen chip hoeft niet altijd geselecteerd te worden

Door de capacitaire werking kan het zijn dat de waarde van het schrijfen nog op de lijn aanwezig is wanneer er gelezen wordt.

Ontbreken van geheugen chips

1.Schrijf waarde naar geheugenadres1Lees waarde van geheugenadres1

2.Schrijf waarde naar geheugenadres2Lees waarde van geheugenadres2

Geheugentest zou er als volgt uitkunnen zien

• Niet aangesloten geheugen chip 2

• de ingelezen waarde is gelijk aan geschreven waarde

Ontbreken van geheugen chips

1.Schrijf waarde1 naar geheugenadres12.Schrijf waarde2 naar geheugenadres23.Lees waarde1 naar geheugenadres14.Lees waarde2 naar geheugenadres2

Geheugentest zou er als volgt uitkunnen zien

• Niet aangesloten geheugen chip 2 de gelezen waarde van chip 2 is waarde 1

Geheugenchips die fout ingeprikt zijn

Systeem zal zich gedragen alsof er een probleem is met de data en adres bus of dat een geheugenchip er niet erin zit

Een test van de data en adres lijnen en een test voor het ontbreken van geheugenchips komt het probleem vanzelf naar boven

Ontwerpen van een test strategie

• Wees voorzichtig met het selecteren van de test data.

• Wees voorzichtig met de volgorde van de adressen.

• Deel het geheugen op in kleine testbare delen.

o Hoge test efficientie

o Hoge leesbare code

• Hoe specifieker de test des te meer informatie verkregen wordt.

Ontwerpen van een test strategie

• Wees voorzichtig met het selecteren van de test data.

• Wees voorzichtig met de volgorde van de adressen.

• Deel het geheugen op in kleine testbare delen.

o Hoge test efficientie

o Hoge leesbare code

• Hoe specifieker de test des te meer informatie verkregen wordt.

Ontwerpen van een test strategie

3 individuele testen

1. Device test

2. Databus test

Device test

Test van de geheugen chip.

• Test of elke bit binnen de chip op 1 of 0 gezet kan worden.

• Makkelijk te implementeren maar moeilijk uit te voeren.

• Moet naar elke locatie geschreven en hierop gecontroleerd worden.

• Elke waarde voor de eerste helft, de geinverteerde voor de 2e helft.

Device test

1. Doe een increment test

2. Doe een decrement test

Incrementele data patroon is adequaat en eenvoudig te berekenen

Voorbeeld:

• Breedte databus is 8 bits

• 64 kbyte testen

Meest 16 rechtse bits

Device test

Memory offset Binary value Inverted value

00h 00000001 11111110

001h 00000010 11111101

002h 00000011 11111100

003h 00000100 11111011

…….. …….. …….

0FEh 11111111 00000000

0FFh 00000000 11111111

memTestDevice(volatile datum * baseAddress, unsigned long nBytes){ unsigned long offset; unsigned long nWords = nBytes / sizeof(datum); datum pattern; datum antipattern; /*Fill memory with a known pattern.*/ for (pattern = 1, offset = 0; offset < nWords; pattern++, offset++) { baseAddress[offset] = pattern; }/*Check each location and invert it for the second pass. */ for (pattern = 1, offset = 0; offset < nWords; pattern++, offset++) { if (baseAddress[offset] != pattern) { return ((datum *) &baseAddress[offset]); }

antipattern = ~pattern; baseAddress[offset] = antipattern; }

/*Check each location for the inverted pattern and zero it. */ for (pattern = 1, offset = 0; offset < nWords; pattern++, offset++) { antipattern = ~pattern; if (baseAddress[offset] != antipattern) { return ((datum *) &baseAddress[offset]); } }

return (NULL);

} /* memTestDevice() */

Beschrijving zie: http://www.esacademy.com/faq/docs/memtest/index.htm

Valideren van geheugen inhoud

Het maken van een geheugentest heeft niet veel zin bij ROM of hybride geheugens.

Hoewel sommige geheugens problemen kunnen optreden.

- Verkeert invoeren

Een bevestigingtest nodig

Bevestiging (confirmation) technieken

Valideren van geheugen inhoud

- Checksum- Cyclic redundancy checks (CRC)

Checksum

Is een manier om te bepalen of een programma goed in een non-volatile geheugen is opgeslagen.

Bereken de checksum voordat het in een geheugen gezet wordt.

Zet het programma of data in het geheugen.

Bereken opnieuw de checksum van het programma of data die opgeslagen is

Checksum

Het berekenen van de checksum.

Eenvoudigste manier: Tel alle bytes op, negeer de carry.

Nadeel:

- Optelling van 00 bij elkaar blijft 0

- Werkt alleen wanneer 1 bit fout is.

Checksum

Waar op te slaan:

- In routine die het geheugen checked

Nadeel:

Bij updates, checksum moet ook overschreven worden.

Oplossing: Zet checksum op een vaste plaats in het geheugen.

Werking van flash geheugen

Lezen geen probleem.

Schrijven naar flash een aantal problemen

• Elke geheugenlocatie moet eerst ge-erased worden voordat deze herschreven kan worden.

• Oude data niet erased => het resultaat van een schrijf operatie is combinatie van oude en nieuwe waarden.

• Alleen een sector of block van een device kan per keer ge-erased worden.

• Er kan niet per byte ge-erased worden.• Het erase van oude data en het schrijven van nieuwe data is niet

uniform maar kan fabriek afhankelijk zijn.

De databus (voorbeeld 8 bits)

Databus

Adresbus

CPU

Controle lijnen

MEMORY

MEMORY

D7

D6

D1

D0

Foute verbindingen

Dataline problemen

• Bits zouden stuk kunnen zijn.

• Twee of meer bits bevatten dezelfde waarde, ongeacht de gegevens worden overgedragen.

• Bit kan altijd 0 zijn.

• Bit kan altijd 1 zijn.

Bovenstaande problemen kunnen gedetecteerd worden, door de data-pinnen onafhankelijk van elkaar een 1 of een 0 te maken.

Databus test

• Controleer of de waarde die op de bus gezet is door het geheugen goed ontvangen is.

• Test bit voot bit.

• Doe een “wandelende 1” test.

• Reduceer het aantal testpatronen van 2n naar n.

• Omdat het een databus test is, hoeft er maar naar 1 adres geschreven te worden

• Wanneer de databus gesplitst wordt zal naar elke uiteinde geschreven moeten worden

Databus test

• 00000001• 00000010• 00000100• 00001000• 00010000• 00100000• 01000000• 10000000

Schrijf de eerste waarde naar het geheugen

Controleer de waarde door het terug te lezen

Schrijf de tweede waarde

Etc.

datum memTestDataBus(volatile datum * address){ datum pattern;/** perform a walking 1’s test at the given address*/ for (pattern = 1; pattern != 0; pattern <<= 1) { /* write the test pattern */ *address = pattern;

/* read it back (immediately is ok for this test) */

if (*address != pattern) { return pattern; } } return 0;}

typedef unsigned char datum;

top related