[ad_1]
I pin GPIO (General Purpose Input-Output) sono le periferiche più semplici.
Il collegamento ad un oggetto sotto controllo (OUC) può diventare inavvertitamente inaffidabile per molte ragioni: perdita di contatto, cortocircuito, stress termico o condensa di vapore sui componenti. A volte è possibile stabilire un collegamento migliore con il popolare chip bridge semplicemente esplorando le possibilità offerte dal chip stesso.
Stupisci il mondo dell’ingegneria con il tuo design unico: Guida per la presentazione di idee di progettazione
Il bridge, come l’SC18IM700 di NXP, solitamente fornisce un certo numero di GPIO, utili per implementare un test. Questi GPIO conservano tutte le loro funzionalità e possono essere utilizzati normalmente dopo il test.
Per rendere possibile il test, il chip deve avere più di un GPIO. In questo modo, possono essere accoppiati, offrendo ai membri della coppia l’opportunità di interrogarsi a vicenda.
Poiché l’attività del GPIO durante il test potrebbe danneggiare le normali funzioni dell’OUC, è possibile scegliere uno dei pin GPIO per vietare temporaneamente queste funzioni. Molto spesso, quando questo oggetto è del tutto inerziale, questo divieto può essere omesso.
Figura 1 mostra come l’idea può essere implementata nel caso del bridge UART-I2C SC18IM700.
Figura 1: GPIO autotest utilizzando il bridge UART-I2C SC18IM70pytho0.
I valori dei resistori R1…R4 devono essere sufficientemente grandi da non portare ad una corrente inaccettabilmente grande; d’altro canto, dovrebbero fornire una tensione sufficiente per l’”1” logico sull’ingresso. I valori mostrati nella Figura 1 sono validi per la maggior parte delle applicazioni ma potrebbe essere necessario modificarli.
Alcune difficoltà possono sorgere solo con una configurazione di uscita quasi bidirezionale, poiché in questa configurazione è debolmente pilotato quando la porta emette un valore logico ALTO. Il problema può verificarsi quando la resistenza del corrispondente ingresso OUC è troppo bassa.
Se la velocità dati dell’uscita UART è troppo elevata per un corretto caricamento della capacità relativa all’OUC durante il test, è possibile ridurla oppure i valori corrispondenti dei resistori possono essere diminuiti.
Segue lo schizzo della subroutine Python:
PortConf1=0x02
PortConf2=0x03
def selfTest():
data=0b10011001
bridge.writeRegister(PortConf1, data) #PortConfig1
data=0b10100101
bridge.writeRegister(PortConf2, data) #PortConfig2
#--- write 1
cc=0b11001100
bridge.writeGPIO(cc)
aa=bridge.readGPIO() # 0b11111111
if aa != 0b11111111 : return False # check
#---- write 0
cc=0b00000000
bridge.writeGPIO(cc)
aa=bridge.readGPIO()
if aa != 0b00000000 : return False # check
# partners swap
data=0b01100110
bridge.writeRegister(PortConf1, data) #PortConfig1
data=0b01011010
bridge.writeRegister(PortConf2, data) #PortConfig2
#---write 1
cc=0b00110011
bridge.writeGPIO(cc)
aa=bridge.readGPIO()
if aa != 0b11111111 : return False # check
#---- write 0
cc=0b00000000
bridge.writeGPIO(cc)
aa=bridge.readGPIO()
if aa != 0b00000000 : return False # check
# check quasy-bidirect
data=0b01000100
bridge.writeRegister(PortConf1, data) #PortConfig1
data=0b01010000
bridge.writeRegister(PortConf2, data) #PortConfig2
#---write 1
cc=0b00110011
bridge.writeGPIO(cc)
aa=bridge.readGPIO()
if aa != 0b11111111 : return False # check
#---- write 0
cc=0b00000000
bridge.writeGPIO(cc)
aa=bridge.readGPIO()
if aa != 0b00000000 : return False # check
return True
—Pietro Demchenko ha studiato matematica all’Università di Vilnius e ha lavorato nello sviluppo di software.
Contenuto relativo
- La sonda logica ha un ampio intervallo di tensione
- Un display LED adattato per progetti fai da te
- Progettazione dell’interfaccia hardware/firmware – Progettazione, parte 4
- Leggere più interruttori utilizzando ADC
- Scegli la misurazione del tempo di blocco PLL
Il post Un GPIO auto-test è apparso per la prima volta su EDN.
[ad_2]
Source link