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.
villamos? ha már busz nem jó
0
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
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.
0
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
É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
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
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
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
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
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
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
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
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
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