PIC32MK HW I2C zahada v rychlosti cteni

Libor Konečný support na mikrovlny.cz
Pátek Leden 20 11:14:52 CET 2023


Dneska jsem zkusil puvodni SW driver, ten funguje perfektne, delay mam 
nastaveny mezi jednou zmenou clocku 2us.

U HW driveru je rychlost 400kHz.Na analyzatoru rychlost odpovida. Vzdy 
jsem pouzival SW driver, nebot slo o par bajtu.

SDA SCL si resi uz HW driver.

Nyni potrebuji  nacitat 8 sensoru  rychle za sebou a vysledek je horsi.

Zkousel jsem i dalsi dve desky , dokonce cipy maji datecode o 4 roky 
rozdil a maji jine pouzdro.

Mel bych dotaz k tomu RCEN

I2C4CONbits.RCEN = 1;   // Enable the receiver

Nedela tento zapis to, ze pri cteni i2c bajtu PIC spusti  8 x clock a 
nacita z SDA pinu 8xbit?

while (!I2C4STATbits.RBF) {;}  pak ceka az na konec cteni.

Vychazel jsem z Harmony plib, kde se ten RCEn nastavuje az pred ctenim 
bajtu.

Na analyzatoru je vsechno perfektni, cteni je bez prodlevy, ale zustane 
to 50ms cekat na tomto cyklu while (!I2C4STATbits.RBF) {;}

Projekt mam cisty, jen i2c a debug.


LK




Dne 19.01.2023 v 23:35 Jan Waclawek napsal(a):
> [preposielam]
> ---
>
> Dobry vecer,
>
> s danym MCU nemam ziadne skusenosti, ale skusim par otazok.
>
> Aka je rychlost citania I2C pri inych typoch MCU? Ake mate skusenosti z
> praxe.
> Skusal ste jednoduchu "holu" aplikaciu len so zapisom a len s citanim?
> Skusil ste druhy cip? Najlepsie z inej sarze...
> Ako mate nastavene piny SDA SCL?
>
> A este taky tip
>
> I2C4CONbits.RCEN = 1;   // Enable the receiver
>
> by som dal len do uvodnej inicializacie a volal ho len jeden raz pri
> resete. Nepovoloval by som receiver pri kazdom volani rutiny citania.
> Myslim si, ze toto moze byt ta chyba.
>
> A.
>
>
> Zapis asi 10 ti registru spotrebuje max 1ms, ale jakmile chci nacitat
> tak jeden bajt spotrebuje cca 50ms.
>
> Pokud pouzivam repeatread, tak kazdy bajt spotrebuje 50ms.
>
> Na logickem analyzatoru nevidim nic zvlastniho.
>
> Pritom zadnou chybu v driveru nevidim
>
> _I2c_read je toto:_
>
>       I2C4CONbits.RCEN = 1;   // Enable the receiver
>
>       while (!I2C4STATbits.RBF) {;}
>
>       DATA = I2C4RCV;
>
> Ten while  spotrebuje onech 50 msec, nechapu proc.
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list