SPI wil niet meewerken

Indien je een "oud" boardje hebt die prima werkt, zou je de chip daar van af kunnen halen en op de nieuwe print solderen.
Dan zou je kunnen ontdekken of het nu ligt aan :

- de chip zelf of,
- de geschreven software (misschien een pin-setting (*)) of,
- een ongemerkt ingeslopen wijziging in het nieuwe printplaat-ontwerp (ongewilde of kruisende printbaantjes).

(*) Na zoveel jaren, overkomt het met nog steeds dat ik vergeet een pin als output te configureren. Ik kom er dan soms na 1 a 2 dagen achter waarom de betreffende pin dan niet doet wat ik wil als ik het aanstuur. Op de scope rare spanningen meten en me suf piekeren waarom het niet werkt. Laatst nog met een CD4021 gehad om druktoetsen uit te lezen. Verschillende keren het chipje vervangen, zelfs een microcontroller weggegooid.
Totale kosten was iets van 1.90 EUR (1x Atmega328 en 5x CD4021) voor de wijze les dat ik iets knulligs was vergeten in de broncode....

-=[ edit ]=-
En dan te bedenken dat ik soms uit pure frustratie een losgesoldeerd IC door midden "knak" om vervolgens in de vuilnisbak te gooien... Dat lucht soms een beetje op, maar in zulke gevallen aanzienlijk minder...

Trouwens, klopt het dat C30 de 100 nF is, die verbonden is met de upperplane (3V3) en via 2 through-holes naar pin 8 (Vcc) ? Tenminste, dicht bij de chip zie ik een baantje overgaan in een TH, dus zou er een baantje aan de onderkant doorgetrokken worden en via nogmaals een TH naar pin 8. Dat zou betekenen dat ie niet 5.6 mm verwijderd is van pin 8, maar ietsje meer. Desondanks twijfel ik of dat de bron kan zijn van het probleem. Echter, ik kan niet zien hoe het daadwerkelijk zit verbonden, het is giswerk.

R5 (waarde gecontrolleerd ?) lijkt als pull-up naar upper-plane verbonden voor pin 1 (CE). Stel dat er een koude soldeerverbinding is of onjuiste weerstandswaarde, zou dat het gedrag kunnen verklaren ?

-=[ edit ]=-
Weet je zeker dat je de juiste versie van de LP25 hebt ? Er zijn volgens de datasheet 2 versies :
- IS25LP: 2.30V to 3.60V
- IS25WP: 1.65V to 1.95V

Zou lullig zijn als je nu de WP-versie erop hebt....

Van elk bezoek aan CO leer ik weer meer...
Arco

Special Member

Is inderdaad een IS25LP. Ik heb ook de originele van de oude print geprobeerd, geen succes.
Weerstand R5 is goed. Zoals je op LA plaatje in startpost kunt zien, klopt alles ook. Dit is een van de weinige keren dat ik echt verbijsterd ben... ;)

Waarom zijn het toch meestal de relatief simpele dingen die dwarsliggen?... :(

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

OK,. als een vervangende IC van een werkend board het ook niet doet, werken ze dan wel weer als je ze op het oude bord terug zet ? Zo nee, dan denk ik dat je weet waar het aan kan liggen. Zo ja, dan gaan we door naar het volgende :

Datasheet gecontroleerd van de microcontroller of de aangesloten pin voor de CS-pin (IS25) wel aangestuurd kan worden ?

Verder begrijp ik dat je voor SPI-aansturing nu andere pinnen hebt geselecteerd. Kunnen die pinnen dat ook ?

Eigen voorbeelden
Les 1 :
Ooit eens geprobeerd om een AtMega8 (TQFP-32), ADC6 en ADC7, proberen aan te sturen als output (PortC.6 en PortC.7). Na veel frustratie nogmaals de datasheet doorgebladerd. Tsja, die pinnen zitten er als extra op, maar kunnen alleen voor ADC gebruikt worden.. Ik kon me wel voor mn hoofd slaan dat ik deze fout had gemaakt, want hele batch met printjes kon weggegooid worden. Lesgeld : $4.90 (Elecrow printjes).

Les 2 :
Zelfde les met eigenhandig de I2C-pinnen op andere pinnen onderbrengen van de microcontroller. Heb ik hier op CO ooit een keer over gepost. Lesgeld : zelfde bedrag.

Ook kun je van een kale print nog eens de printbanen nalopen. Desnoods met een multimeter controleren. (Ja, kan ik ook wel een voorbeeld van geven). Vervolgens dat printje bestucken met alleen de microcontroller, de IS25 samen met de minimaal vereiste randcomponenten erop en aansluiten op een labvoeding.

Als je hier ook helemaal ongeschonden door heen komt, dan mag je volgens mij in de broncode gaan spitten. Alternatief : minimaal bestuckte print en opnieuw starten met het stapsgewijs opbouwen van broncode om de IS25 aan te sturen.
Ik weet het, het is rot, maar je moet ergens de bottleneck kunnen vinden. Oh, en hier kan ik heel veel verhalen over vertellen :( .
Als je eens wist hoe vaak ik soms voor een project de broncode van de grond af opnieuw heb moeten schrijven om uiteindelijk de bottleneck te achterhalen.... pffff...

En wees gerustgesteld Arco, we gaan het probleem vinden !

Van elk bezoek aan CO leer ik weer meer...
fatbeard

Honourable Member

Was van plan een heel verhaal te gaan typen, maar Oxurane heeft dat al gedaan... Zoooo herkenbaar.
In mijn geval was het een pin die alleen open drain kon als aansturing voor een enable gebruiken. |:(
'Gelukkig' was er meer loos... ;(

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Echter, vrijwel alle hypotheses van oxurane zijn al ontkracht, kijk even naar de eerder geplaatste screenshots van de logic analyser en scope.

Waarom zou je spoortjes moeten slopen om het ding extern te kunnen lezen, je kunt toch software in de microcontroller zetten die de pinnen in tri-state laat staan, of simpelweg een chip erase doen?

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Ik kan het op de foto niet goed zien, maar het lijkt erop dat pin 1 via R5 aan de plane hangt. Ergens las ik dat je upper plane 3.3v is ?

Arco

Special Member

Ja, R5 is een pull-up naar 3.3v.
Ook nog gedacht dat tijd tussen /SS low en SCLK high te kort was, maar verlengen geeft geen verschil (zou trouwens maar 5nS moeten zijn)
Ga nu maar eens een losse chip aan andere pinnen hangen om te kijken of dat werkend te krijgen is. Desnoods alle smd r/c eraf om door te meten.
Code voor bijv. Jedec ID uit te lezen is zo simpel als maar kan en heeft ook gewerkt...

pic basic code:


'==================================================================
Sub Procedure SF_Read_Jedec_ID(Dim pID As ^Char) 'Read JEDEC ID
'==================================================================
  SF_CS = 0                                      'Select SFlash
  SPI2_Write(0x9F)                               'Cmd Read Jedec                
  pID^ = SPI2_Read(0)                            'Read manufact ID
  Inc(pID)                                       '
  pID^ = SPI2_Read(0)                            ' "   memory type
  Inc(pID)                                       '
  pID^ = SPI2_Read(0)                            ' "   capacity
  SF_CS = 1                                      'Deselect SFlash             
End Sub

Je ziet duidelijk dat MISO tri-state blijft, en de chip dus geen zinvolle commando's ontvangt. (terwijl de LA zegt van wel)
SPI init is ook standaard:

pic basic code:


  Spi2_Init_Advanced(_SPI_MASTER,
                     _SPI_8_BIT,
                     _SPI_PRESCALE_SEC_1,
                     _SPI_PRESCALE_PRI_16,
                     _SPI_SS_DISABLE,
                     _SPI_DATA_SAMPLE_END,
                     _SPI_CLK_IDLE_LOW,
                     _SPI_IDLE_2_ACTIVE)
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Uit de datasheet:

In both modes, the input data is latched on the rising edge of
Serial Clock (SCK), and the output data is available from the falling edge of SCK.

Op het plaatje van je logic analyser is te zien dat jij de data veranderd op de opgaande flank. Als dat ooit gewerkt heeft, was dat toeval.

Je clock instelling is dus verkeerd.

EDIT: toch verkeerd gekeken.

EDIT: raar, _SPI_CLK_IDLE_LOW en _SPI_IDLE_2_ACTIVE zou moeten kloppen met mode 0, maar dat lijkt niet te kloppen met het screenshot van je logic analyser.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Op 20 juli 2019 13:54:28 schreef SparkyGSX:
Op het plaatje van je logic analyser is te zien dat jij de data veranderd op de opgaande flank.

Niet mee eens. Data verandert op de neergaande flank.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

MOSI data valid op opgaande flank, MISO data valid op neergaande flank...

lijkt niet te kloppen met het screenshot van je logic analyser.

Mode 0 en 3 beide geprobeerd. Display werkt op beide, flash zou dat ook moeten doen.

[Bericht gewijzigd door Arco op zaterdag 20 juli 2019 14:33:34 (54%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Bizar... Hoogstwaarschijnlijk is het alsnog iets simpels, als je het eenmaal gevonden hebt, dat is bijna altijd. Hoe simpeler is het, des te stommer het voelt dat je het niet eerder gevonden hebt.

Heb je die #HOLD pin gecontroleerd? In de datasheet zie ik niets over een flank op die pin, als je hem gewoon hoog maakt zou het m.i. moeten werken. Heb je geprobeerd een pull-up weerstand en een condensator aan de reset te maken, of die met een microcontroller pin te besturen, zodat je zeker weet dat de voeding binnen specificaties is voordat de reset vrijgegeven wordt? Misschien dat de voeding op het vorige board sneller opkwam of zo.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Op 17 juli 2019 13:11:04 schreef Arco:
De MISO lijn blijft zweven, dus de chip reageert echt niet.
...
Als je 'm aanraakt zie je er gewoon 50 Hz op komen

Zou je het volgende eens kunnen proberen ?
- de IS25 eraf solderen.
- de pads op het pcb verbinden via 1K naar Gnd.

Vervolgens nieuwe, kale broncode schrijven waarbij :
- SPI totaal niet voorkomt
- alle betrokken pinnen op uC als output configureren
- alle betrokken pinnen om de seconde van hoog naar laag en omgekeerd gaan (desnoods als een soort looplicht, pin voor pin).
En dan met de multimeter of scope kijken wat er op elke pin gebeurt.

-=[ edit ]=-
Als ik alles nog eens terug lees, krijg ik het idee dat er iets mis is met de aansturing van de CS-pin... Dit omdat de LS25 niet reageert.

-=[ edit ]=-
Ik heb even de datasheet bijgesloten in dit bericht. Is wel zo handig. Goed, op pag. 73 lees ik :
The required wait time after activating a HW Reset before the device will accept another instructionis tHWRSTof 35us.

Kan dat iets zijn van betekenis ?

[Bericht gewijzigd door oxurane op zaterdag 20 juli 2019 16:13:34 (14%)

Van elk bezoek aan CO leer ik weer meer...
Arco

Special Member

Ik heb er nu een vijfde opgesoldeerd, en die werkt prima?... 8)7
Ik denk dat het een timingprobleem is, en de ene net wel en de andere net niet werkt.

Ga eens kijken of de #HOLD pin dat veroorzaakt. (kan theoretisch, want dat zou de beschreven symptomen veroorzaken)
Helaas, zoals @SparkyGSX zegt, er staat weinig over het #HOLD signaal in de DS, zeker niet bij opstarten.
Heb ook een M25P80 geprobeerd, ook dood... (die DS is ook niet erg duidelijk over #HOLD)
Een voorbeeldschakeling in de datasheet zou in dit geval ook wel handig zijn...

Hij spuugt nu tenminste netjes zijn 16 hex serienummer uit... ;)

@oxurane: HW reset staat default uit in de chip, is dan het #HOLD signaal...

Enige waar ik iets over #HOLD kon vinden was in de DS van de AT25 flash, die schijnt een interne pull-up te hebben, dus mag je 'm los laten.

Maar daar staat weer niet HOE je de pin aan Vcc moet knopen... :(
(de IS25 heeft duidelijk geen interne pull-up; als je de pin aanraakt gaat 'ie alle kanten op...)

Net #HOLD los gemaakt en via 10k pull-up + 100nF, geen problemen meer...
(gelukkig, ik bouw liever geen apparaten die over AI beschikken... :) )

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Ik zou de hold/reset pin optillen van het board, met een draadje naar een microcontroller pin brengen (eventueel met een weerstandje in serie), en die een laag-hoog cyclus geven, even wachten, en dan gaan communiceren. Misschien kun je op die manier het probleem isoleren.

Daarbij: wees blij dat de 5de werkte, en niet de eerste, dan had je dit probleem veel later pas gevonden.

[Bericht gewijzigd door SparkyGSX op zaterdag 20 juli 2019 17:02:53 (17%)

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Arco

Special Member

Ik bedoelde dat ook de chips die niet werkten nu ook weer werken met de pull-up R + 100nF... :)
In de uiteindelijke print gebruik ik #HOLD nooit (voor normale toepassingen zie ik weinig nut), dus een RC is wel zo prettig...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Mooi om te zien dat je er eindelijk data uit kunt persen !
Vraag blijft wat de exacte oorzaak zou kunnen zijn. Van de andere kant, je kunt nu voorzichtig verder werken.

Van elk bezoek aan CO leer ik weer meer...
Arco

Special Member

Lijkt dus dat de chip in #HOLD schiet bij opstarten, waar je zo niet meer uit kunt komen. (chip maakt MISO tristate, en reageert nergens meer op)
Vertraging met R+C lost dat op...

Maar helaas zijn datasheets tegenwoordig onduidelijk(er) of er staat gewoon onzin in.
Met bijv. de ADP5062 ben ik ook een hele tijd bezig geweest. Er ontbreekt veel, en er staat veel onzin in die totaal niet klopt... ;)
Jammer, want 't is een hele fijne chip (Li-Ion charger)

Bij de Analog support zei men dan meestal 'dat had inderdaad wat duidelijker gekund'...
(toen schreef ik terug 'nee, niet duidelijker, het klopt gewwoon niet wat er staat, da's heel wat anders... ;) )

[Bericht gewijzigd door Arco op zaterdag 20 juli 2019 18:05:26 (18%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
benleentje

Golden Member

In het begin post je een schema met Hold hard aan de V33. Maar je post ook dat je hem mag laten zweven. Dus wat is er nu verandert? Je laat de hold nu eerst even 0V zijn en dan langzaam met de RC combinatie gaat hij naar de 5V?3,3V

Mensen zijn soms net als een gelijkrichter, ze willen graag hun gelijk hebben.
Arco

Special Member

Nee, naar 3.3v (5v gebruik ik al jaren niet meer... ;) )
Bij sommige types van die serial flash mag je 'm laten zweven onmdqat er een interne pull-up in zit. Maar dat geldt niet voor de IS25

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

https://www.circuitsonline.net/forum/file/44380/forum-post

Ik vind dat de pin met deze formulering gewoon met een draadje aan VCC mag. Niets onduidelijk. Ze zeggen dat ie aan VCC mag, dus dan mag het met een draadje.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

Bij deze (AT25) misschien wel, maar om ook andere type serial flash te kunnen gebruiken, moet je dus een R/C voorzien op de print...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Komt je spanning wel netjes op? Want een RC op #HOLD is toch niet volgens de datasheet, en doet mij vermoeden dat de flash niet goed inschakeld.

Arco

Special Member

De datasheet zegt weinig over #HOLD, en zeker niet bij het opstarten. Voeding is een standaard TPS73733, nog nooit problemen mee gehad.
Ik denk dat de hold later opkomt als de Vcc waardoor de chip in hold schiet...

Vreemd genoeg schijnt de SOIC8-wide versie wel te werken. (ik had er per ongeluk een paar besteld, wist niet dat ze in 2 maten bestonden... :( )
Enige wat ik me kan voorstellen is dat de timing iets anders is door de langere bonding wires in de chip, maar da's wel een heeel miniem verschil in timing (pS)...
(ik neem tenminste aan dat de die in beide chips gelijk is)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
fatbeard

Honourable Member

Langere poten (het wireframe) zorgen ook voor meer capaciteit. Het verschil hoeft maar een paar ns te zijn.
Had de oude print misschien bovenop een GND plane ipv een 3V3 plane?

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.

Toch vermoed ik een ander probleem.

dwz, het kan best dat het probleem nu weg lijkt te zijn, maar of je het nu opgelost hebt... Ik weet het niet.

Om het te debuggen zou ik overwegen om hold evt tijdelijk aan een pootje van je CPU te hangen. Dan kan je hem togglen zoveel je wilt.

Het lijkt me trouwens ook stug dat ie "in hold schiet" omdat ie op de FLANK 0->1 van HOLD zou reageren, en die nooit gezien heeft als hold aan VCC hangt. Dat is gewoon een level-triggered signaal en hoog-is-chip-actief.

Ander dingetje om te proberen is om toch de 2 niet-juiste SPI modes te proberen. Mogelijk leer je iets van wat er dan gebeurt.....

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/