You are here

MDIO buszon próbált már valaki kommunikálni?

15 posts / 0 new
Last post
Jaca
Jaca picture
*****

Sziasztok!

Egy egyszerű tesztprogram lenne, MDIO buszon kellene megszólítanom egy PHY IC-t. (Marvell 88E6141)
Odáig eljutottam, hogy ha a PHY address jó, akkor a read ciklus nem FF-et, hanem nullát ad vissza. 
A PHYaddress és a register address is 5 bit, így egyszerű volt végigpörgetni először a PHY címeket, és csak egynél adott vissza nullát, így az biztosan jó, utána végigolvastam az összes regisztert, de mindenhonnan csak nullát kapok vissza. A device ID-t kellene kiolvasnom. 
Mit kellene még tennem, hogy válaszoljon? Az eszköznek csak az MDIO-n van lehetősége kommunikálni a proccal.

Comments
zsugori
zsugori picture
****

villamos? ha már busz nem jó

0

tvdoktor
tvdoktor picture

Hello

Talán itt talász olyat ami előrébb visz.
A Management Data Input/Output (MDIO) 
IEEE 802.3 szabvány szerinti Ethernet sorozatú médiafüggetlen interfészhez (MII) határoztak meg.
A médiahozzáférés-vezérlő (MAC) eszközöket csatlakoztatja az Ethernet fizikai rétegű (PHY) áramköreihez.
Itt meg,milyen eszközökkel olvashatok és írhatok MDIO protokoll jeleket? 

Read/write

0

Jaca
Jaca picture
*****

Szia!
Amit lehetett, azt már elolvastam. Az IC egy működő eszközön van, logikai analizátorral látom, hogy írja, olvassa az ő PHY címét, de amikor ugyanazt kiküldöm ugyanazt a jelsorozatot, akkor nem ugyanazt kapom, illetve mindig csak nullákat.
A felső jel a működés közbeni, a középső a dokuból van, az alsó, amit én küldtem ki.
 

File csatolás: 

0

imrus101
imrus101 picture

A jó jelen az adatjel az órajel felfutó élekor változik, ebből azt gondolom, hogy az eszköz a lefutó élnél olvas. A te jelednél pont fordított az órajel polaritása.

0

Jaca
Jaca picture
*****

Én is azt hittem, de akkor miért ugyanazokat az értékeket adja vissza a logikai analizátor? Az adressnek nálam 02 volt kiküldve, ott azért az eltérés

0

Gyakorló
Gyakorló picture

Szervusz Jaca!
Valószínű azért kapsz mindig 0-t, mert az IC hibásan értelmezi a kiadott parancsot.
A logikai analizátor más időzítésekkel dolgozik a parancs értelmezésnél mint az IC,
ezért az órajel polaritás eltérés mellett is hasonló értéket mutathat.
Ha a felső sor szerinti jelet adnád ki, szerintem működne.
Meg tudod cserélni az órajeled polaritását?
Sok sikert!
Üdv
Tamás

0

Jaca
Jaca picture
*****

Szia!

Semmi baj a polaritással, csak a frekvenciák különbsége miatt látszik az eltérés. A felső 2,5Mhz feletti, az alsó 4kHz. Ott már csal egy kicsit az analizátor is. 

0

Gyakorló
Gyakorló picture

Szia!
Szerintem a chip kezelésében lehetne tovább lépni.
A https://codebrowser.dev/linux/linux/drivers/net/dsa/mv88e6xxx/chip.c.html programban található a
mv88e6xxx_single_chip_detect(... nevű függvény, ami először az mv88e6xxx_smi_init(... függvényt hívja meg,
majd ha ez hiba nélkül lefut, akkor a mv88e6xxx_detect(... függvényt.
Ebben úgy látom ez a sor az 'id'-be olvassa az azonosítókat (gondolom ezt keresed):
err = mv88e6xxx_port_read(chip, 0, MV88E6XXX_PORT_SWITCH_ID, &id);
(Az MV88E6XXX_PORT_SWITCH_ID értéke 3)
Üdv
Tamás

0

Jaca
Jaca picture
*****

Szia!
Addig eljutottam, hogy ha végigszkennelem az összes PHY address-t (0-31 ig az 5 biten), akkor a 01000-ra a read 0-kat ad vissza, a többire 1-eket. Ez a rajz szerint helyes is, mivel az IC PHY address-e 01000.
A problémát a következőben látom:
Van 3 IC a panelon, egy Proc, és két PHY eszköz. Ezekből a Proc, és a PHY1 az JTAG képes, a PHY2, amit olvasnék, az nem. A PHY2 MDIO és MDC busza össze van kötve a processzorral és a PHY1-el is . 
Amikor a JTAG programban azt mondom, hogy a PHY2 MDIO-ra 0 szintet adjon ki, akkor ezt kétféle képpen tuja megtenni:
- A processzor MDIO lábát húzza alacsonyra
- A PHY1 MDIO lábát húzza alacsonyra
És sajna ez utóbbi történik meg, és nem tudom, nem-e ez kever bele, bár ilyenkor a processzor MDIO lábának bemenetként, vagy nagy impedanciás állapotban kellene lennie. 

0

Gyakorló
Gyakorló picture

Szia!
Meg tudnád esetleg nézni analizátorral, hogy közvetlenül reset után milyen parancsokat ad a proc. a PHY2-nek?
Lehet, hogy szükséges az inicializálás.
Ha sikerül ezt leolvasni, akkor ha Te is ugyanazt adod ki ugyanúgy kell viselkednie.
Ezzel ellenőrizhető lenne, hogy nem zavar-e valami a kommunikációban.
(Kár, hogy nincs meg ennek a Marvell chipnek a részletes adatlapja.)

0

Jaca
Jaca picture
*****

Szia!
Az adatlapban sajna csak a lábkiosztása van, a regiszterek már nincsenek.
Néztem az MDIO frgalmat indulástól a teljes bootolás alatt. Párszosz ráolvas sikertelenül, aztán utána már simán írja, olvassa. Sok láb nincs bekötve rajta, csak a reset, az MDIO, meg két SERDES vonal. 

0

Gyakorló
Gyakorló picture

Esetleg megpróbálhatnád leutánozni a forgalmat. (Csak ellenőrzés miatt.)
Két kérdés, ami még érdekes lehet:
Például ha van két PHY eszköz, akkor ha végigpörgeted a címeket miért csak egy címen kapsz választ, holott PHY1-nek és PHY2-nek is válaszolni kellene különböző címeken?
A másik, hogy amikor megtörténik az irányváltás, akkor már a proc.nak és PHY1-nek is nagyimpedanciásnak (bemenetnek) kell lenni hogy PHY2 átvegye a vezérlést az MDIO-n.

A fenti C program is arra utal, hogy kiolvasás előtt kommunikálni kell a chippel.
A regiszterekről lehet némi tájékoztatás a header file-okban. Pld. port.h
 

0

Jaca
Jaca picture
*****

Szia!

A másik PHY eszköz JTAG device, így az nem él. Végül le is akasztottam a buszról, ne legyen zavaró. Megcsináltam a Nagykönyv szerinti jelalakokat, amik pontosan olyanok, mint normál működés közben. Semmi nem változott.
A legtöbb, amit elértem, hogy a 0-ás regiszterbe írt adatot vissza tudtam olvasni, így legalább azt le tudom ellenőrizni, hogy az MDIO busz működik. 
De úgy néz ki, nem csak én vagyok így:
https://e2e.ti.com/support/processors-group/processors/f/processors-foru...
A 6341-nek és a 6141-nek közös a dokuja, de csak lábkiosztás van benne, a regiszterek nincsenek. 
 

0

Gyakorló
Gyakorló picture

Szia!
Csak most jutottam netezéshez...
Jártam már úgy, hogy egy működő programot kellett visszafejteni, hogy egy chipet használni tudjak.
Sajnos ez így van, ha valamiről nincs rendes leírás.
A reset utáni (működő!) kommunikáció utánozásával lehetne próbálkozni.
Ahogy feljebb írtam, a C programból és headerekből lehet a regiszterekről némi infót szerezni.
A linkelt forrásfile kezdő soraiban vannak a szerzők és email címük.
Pár év eltelt ugyan, de hátha küldenének dokumentációt arról, ami alapján ők írták a programot.
(Persze csak ha nem védett.) Lehet, hogy segítőkészek.
Sok sikert!
Üdv
Tamás

0

Sponsored links