Raccomandazione per le impostazioni predefinite per i pin non utilizzati su un STM32 (ARM Cortex M3) - tirare su / tirare giù?


13

Attualmente stiamo utilizzando varie varianti della famiglia di microcontrollori STM32. Vorrei sapere quanto segue:

1) Quali sono le impostazioni predefinite consigliate per i pin dei microcontrollori in generale se hai la possibilità di selezionare sia pull up che pull down? Quali sono i pro ei contro di andare con l'uno o l'altro? (Supponendo che li imposterai per impostazione predefinita come input)

2) In particolare, vorrei sapere cosa fare con i pin non utilizzati per la famiglia di microcontrollori STM32. È ovvio per me che non dovremmo lasciare i pin fluttuanti (che è tutto ciò che il foglio dati dice :(), ma dovrei impostarli per l'input con pull up o input con pull down? In particolare, vorrei per scegliere un'impostazione meno sensibile all'ESD e, se possibile, anche consumare la minima quantità di energia.

3) Per i pin critici, dovremmo fare affidamento sul firmware per impostare correttamente i pin sullo stato predefinito corretto o questa responsabilità dovrebbe ricadere sull'hardware esterno (collegamento di pull up o pull down esterni)? Se i valori scelti per i resistori esterni sono maggiori dei pull up o pull down interni, l'impostazione nel firmware non ha importanza.

Il pro che posso vedere per fare quanto sopra, è che se il micro non si inizializza correttamente per qualsiasi motivo (hardware difettoso o simili), non ci affidiamo al firmware per impostare correttamente il pin.

La truffa che vedo è che costa di più fare questo è l'hardware.

Qualsiasi luce su cui puoi gettare quanto sopra sarà davvero apprezzata.

Grazie..


Perché non impostare pin inutilizzati come uscite? Ciò eliminerebbe il problema pull-up vs pull-down.
Connor Wolf,

Nota: "Ad ogni evento di reset tutti i GPIO sono ingressi flottanti. In questo modo si evitano danni accidentali ai GPIO in caso di emergenza." embedded-lab.com/blog/stm32-gpio-ports-insights
cp.engr

Risposte:


10

Questa risposta non è specifica STM32 ma si basa sull'esperienza e su molte discussioni di questo tipo per molti (molti) anni. Altri possono aggiungere a questo - copre i punti principali (penso) ma potrebbe non essere completo.

È incoraggiante vedere qualcuno porre queste domande semplici ma fondamentali e mostrare la consapevolezza di come "piccole cose" possano "aglae di gruppo" nella vita reale.

cioè "Se il micro non si inizializza correttamente ..." legge davvero "... quando il micro non si inizializza correttamente ..." :-) - ed è ovvio che te ne rendi conto.

Così:

  • L'uso di pullup esterni o pulldown è essenziale per coloro che vogliono davvero ottenere un risultato ben definito. Questo è il singolo più grande da fare qui. Tutto il resto è un bonus. cioè l'impostazione su input con pullxxx interno è un compromesso che quasi sempre funzionerà.
    MA se "quasi sempre" non è abbastanza buono per il tuo design, allora hai bisogno di pull esterni xxx.

  • Pullup o down non sembra avere un risultato travolgente migliore. Può variare tra i circuiti integrati può essere determinato dalla scheda tecnica. A parità di condizioni (per quanto possano essere) preferirei il pull-down in quanto vi è il potenziale per una minore dispersione verso le correnti esterne del dispositivo, ma ciò può essere minimo in un PCB con rivestimento conforme e / o in un ambiente benigno.

  • Potresti voler guardare l'azione di avvio se ti interessa davvero. ad es. un perno sollevato inizierà in basso e transiterà in alto a un certo punto. Un perno tirato probabilmente rimarrà basso per tutto. Questo probabilmente non è importante ma è menzionato per completezza.

  • La suscettibilità ESD sarà specifica del dispositivo, molto probabilmente simmetrica e in media su molti processori probabilmente favorisce l'abbassamento poiché i driver tendono ad affondare meglio della sorgente se asimmetrici. Se ti preoccupi molto dell'ESD, potresti voler utilizzare uscite basse con pull down - poiché un percorso a bassa impedenza offrirà (probabilmente) una migliore protezione ESD. Ma se ti preoccupi molto dell'ESD, vorrai progettarlo in altri modi e non fare affidamento sulla protezione in-IC come protezione principale.

  • Per quanto riguarda la domanda 3 - pullxxxs esterni è desiderabile, ma sembra sicuro usare valori che si trovano all'estremità superiore del design adeguato e quindi utilizzare xxx interni in parallelo, se desiderato. Tuttavia, poiché i pull interni xxx hanno spesso un 2: 1 Reffective, puoi ottenere la massima R e la più piccola corrente usando solo l'esterno. Ciò che ovviamente vuoi evitare sono pull up esterni e pull down interni o viceversa, ma è improbabile che ciò costituisca un problema.

  • Quando dico "... limitando la fascia alta del design adeguato ..." intendo proprio questo e non "oltre il limite ...". vale a dire che il pin avrà un valore di resistenza specificato che consente di soddisfare il caso peggiore. Un resistore più grande può richiedere meno corrente nel resistore ma può iniziare ad accendere leggermente l'interruttore interno. cioè può darsi che ci sia un Rpulldown_current rispetto al più basso compromesso di corrente complessivo quando il driver interno inizia a vedere la corrente di dispersione (che sarà estremamente piccola) aumentando la corrente verso il dirver e sussurrandola leggermente.

  • Se usi, ad esempio, il pulldown, potresti trovare una potenza inferiore per impostare il pin in uscita e abbassarlo, ma questa è un'opzione che può essere decisa a tempo debito.

  • Quasi a parte: non consentire MAI ai diodi di protezione di gestire "eventuali correnti significative" in qualsiasi fase durante il funzionamento. Consentire loro di farlo può portare a un'azione del processore totalmente inspiegabile. Minore è la corrente, minore è la possibilità che qualcosa vada storto - e più è difficile trovarla quando lo fanno.


1
Risposta molto perspicace. Grazie mille. Puoi approfondire un po 'di più su questo: "Se ti preoccupi molto dell'ESD, potresti voler utilizzare uscite basse con pull down - poiché un percorso a bassa impedenza offrirà (probabilmente) una migliore protezione ESD"? Se si imposta su un'uscita, per impostazione predefinita si aprirà lo scarico o si preme pull (alto / basso)?
IntelliChick,

2

Per cosa stai ottimizzando? L'ottimizzazione dei costi impone di impostare pin inutilizzati sulle uscite. L'ottimizzazione dell'affidabilità impone che tutti i livelli dei pin siano definiti, anche nel breve periodo prima che il firmware abbia la possibilità di impostare pin inutilizzati su ciò che ritiene appropriato.

Una volta ho dovuto controllare i calcoli di affidabilità di una scheda del processore. Era ben progettato, con tappi di disaccoppiamento ovunque e resistori pull-to-any su tutti i pin I / O. L'ingegnere dell'affidabilità ha tirato fuori il suo manuale, ha aggiunto i tassi di guasto di tutti i componenti coinvolti e ha finito con una cifra dominata dai tassi di guasto dei componenti passivi. Tale cifra era superiore al requisito, quindi abbiamo avuto un problema. Rimuovi quei resistori e la cifra sarebbe OK. Ma a quella proposta gli ingegneri elettrici iniziarono a gridare di rabbia (giustamente, IMO). Non ricordo come sia finita la storia; Penso che siamo andati dal cliente e abbiamo chiesto la dispensa per aver omesso i tassi di guasto dei resistori dal calcolo, sulla base del fatto che non portavano corrente significativa.


1

Ho appena configurato pin inutilizzati come output e li ho impostati bassi.


normalmente li imposti su push-pull o open drain? E in entrambi i casi li porteresti a un livello basso? Puoi dirmi perché dovresti scegliere l'uno rispetto all'altro.
IntelliChick,

@Leon Heller - che soddisfa il test "funziona normalmente", ma fallisce "quando il microprocessore non si inizializza correttamente o quando Murphy si capovolge un po 'semi-casualmente, come fa occasionalmente. , funziona
Russell McMahon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.