Fórum témák
» Több friss téma |
Köszönöm, elvileg megjött a memória is, szóval ha minden jól megy a héten élesben is ki fogom próbálni..
Lehet most kicsit butaságot kérdezek, de muszáj feltennem, mert kicsit összezavarodtam.
Írom a PC-s programot amivel majd a memóriát akarom feltölteni és összezavarodtam a címzés kapcsán. AM29F800B memória támogatja a BYTE és WORD módokat. Nem is ez az érdekes számomra, hanem az adatok beírásnál a helyes címzés használata. Az adatlap az elején ír egy ilyet: 8 Megabit (1 M x 8-Bit/512 K x 16-Bit) Ez azt jelenti, hogy 1M adatot tud tárolni 8bit-enként vagy 512K adatot 16bit-enként? Teljesen összezavarodtam. Ha BYTE módban vagyok, akkor a címzésnél minden byte-nak külön címe van? Tehát az első cím 0 a második 1 aztán 2..3..4...stb? Ebben az esetben elég csak a D0-D7 címre küldeni az adatokat, majd ugrunk a következő címre és ismét D0-D7-re az adatokat? Ebben az esetben 1bájt 1 cím? (Mint pl. egy SPI-s memóriánál pl.: 25LC640?) WORD módban meg 1 cím 16bit adatot fog tárolni és a címzés párosával ugrik? Tehát az első 0 a második 2 aztán 4..6..8...stb? Ebben az esetben D0-D15 adat megy a az első címre majd ugrunk 2-esével feljebb a címben? Ezzel 2bájtot írunk 1 címre? Vagy teljesen rosszul értelmezem az egészet és a címzés mind 2 esetben 0, 1, 2, 3, 4...stb? Az adat pedig mind 2 esetben 16bit lesz, de BYTE módban D0-D7 lesz az adat láb és D15-A1 lesz az adat felső és alsó 8bit vezérlése, WORD módban meg csak egyértelműen és egyszerre írjuk ki a 16bit-et az adatportra D0-D15? Kicsit rakjatok rendbe, mert most vesztem el az egészben.. Remélem nem csak én vagyok így néha, hogy teljesen elvesztem azt a fonalat amit eddig egyértelműen tudtam... Előre is köszi..
Uraim, segítsetek nekem kicsit tisztába tenni a kérdést:
AM29F800B Bővebben: Link memória támogatja a BYTE és WORD módokat. Az adatlap az elején ír egy ilyet: 8 Megabit (1 M x 8-Bit/512 K x 16-Bit) Ez azt jelenti, hogy 1M adatot tud tárolni 8bit-enként vagy 512K adatot 16bit-enként? Nem értem a memória címzést sem, vagy csak összezavarodtam: Ha BYTE módban vagyok, akkor a címzésnél minden byte-nak külön címe van? Tehát az első cím 0 a második 1 aztán 2..3..4...stb? Ebben az esetben elég csak a D0-D7 címre küldeni az adatokat, majd ugrunk a következő címre és ismét D0-D7-re az adatokat? Ebben az esetben 1bájt 1 cím? (Mint pl. egy SPI-s memóriánál pl.: 25LC640?) WORD módban meg 1 cím 16bit adatot fog tárolni és a címzés párosával ugrik? Tehát az első 0 a második 2 aztán 4..6..8...stb? Ebben az esetben D0-D15 adat megy a az első címre majd ugrunk 2-esével feljebb a címben? Ezzel 2bájtot írunk 1 címre? Vagy teljesen rosszul értelmezem az egészet és a címzés mind 2 esetben 0, 1, 2, 3, 4...stb? Az adat pedig mind 2 esetben 16bit lesz, de BYTE módban D0-D7 lesz az adat láb és D15-A1 lesz az adat felső és alsó 8bit vezérlése, WORD módban meg csak egyértelműen és egyszerre írjuk ki a 16bit-et az adatportra D0-D15? Előre is köszi..
Az 1 megabyte megcimzesehez 20 cimvezetekre van szukseg. Ha megnezed, ennek csak A0-A18-ig van, azaz csak latszolag 19 cimvezeteke van. Ha a #BYTE labat lefoldeled, akkor az adat a DQ0-DQ7 labakon megy, a 20 cimvezetek pedig az DQ15 es A0-A18 labakon. Ha 16 bites modban hasznalod, akkor csak 19 cimvezetek kell, mert ilyenkor csak 512k szót kell megcimezni. Ilyenkor az adat a DQ0-DQ15 labakon megy, a cim pedig az A0-A18.
Ha #BYTE láb föld vagy is logikai 0, akkor a DQ15 a címbit eleje vagy a végére kerül?
Tehát az melyik lesz? Úgy értem hogy az A0-A18 egyértelmű, hogy melyik következik a másik után, de a DQ15 az melyik lesz? A-1 vagy is A címláb mínusz 1-edik címe? Vagy is akkor A-1 lesz a 0. bit és A0 az 1. bit, aztán A1 lesz a 2. bit, ...és így tovább? Akkor a címzés #BYTE módban, A-1, A0, A1, A2...A18 lesz és az adatok D0-D7 lesz. WORD módban pedig A0-A18 és az adatok pedig D0-D15. Jól értem?
Az DQ15 lesz a legalacsonyabb helyierteku cimbit. Igazabol azt fogja eldonteni, hogy az A0-A18 altal cimzett 16 bites szo melyik byte-jat valasztod ki. Magyarul az A0-A18 mindig a WORD cim. WORD modban az egesz WORD-ot mozgatod, BYTE modban csak a felet. Hogy melyik felet, azt donti el az A-1.
A hozzászólás módosítva: Jan 29, 2016
Ez gondolom kiolvasásra érted.
Vagy is WORD módban egyértelműen csak az A0-A18-ig címzem meg az adatot és D0-D15 kiolvasom a 16bit-es adatot. Beírás is gondolom ugyan így megy. BYTE módban viszont még zavaros. (az írás) Az olvasás már tiszta: Kiadom A0-A18-on a címet és DQ15/A-1 biten, pedig beállítom, hogy az elérhető 2bájt (16bit) adat alsó 8bitjét vagy felső 8bitjét akarom kiolvasni a D0-D7 lábakon. Nyilván akkor minden címen 2bájt adatot tudok mindig kiolvasni, 8bit-et A-1 logikai 0-án, és 8bit-et A-1 logikai 1-en. A címet gondolom, csak egyszer kell kiadni és az A-1 változtatásával megjelenik a D0-D7 kimenet a kívánt adat? Vagy a címet újra ki kell adni? A beírás is akkor úgy fog működni mint az olvasás? Kiadom az adott címet és A-1 lábat logikai 0-ra állítom, beküldöm az első byte-ot, aztán A-1-et logikai 1-re állítom és beküldöm a második byte-ot? A hozzászólás módosítva: Jan 29, 2016
A cimet addig kell a cimbuszon tartani (belertve az A-1-et is), amig a kiolvasas tortenik. Olvasas szempontjabol ez egy aszinkron aramkor. Amig a CE es OE labak 0-ban vannak, a WE pedig 1-ben, addig a DQ kimeneteken az eppen megcimzett adat van. Ha a cim megvaltozik, akkor x ns mulva az adat is meg fog valtozni. Ez az x ns az eszkoz eleresi ideje. Az adatlap 4. oldalan irja, hogy melyik jel valtozasatol merve mennyi ido mulva ervenyes az adat. Az iras ennel sokkalta bonyolultabb, ezt itt nem tudom neked elmagyarazni. Parancsokat kell kiadni, unlock, erase, stb..
Lehet, hogy jobban fogod erteni az egeszet, ha elobb mondjuk az am29F040 adatlapjat bongeszed, mert az nagyjabol pont ugyanez, de az mindig 8 bites. Es csak fele ekkora kapacitasu, de ez a mukodes megertese szempontjabol teljesen lenyegtelen. Idézet: „Ez azt jelenti, hogy 1M adatot tud tárolni 8bit-enként vagy 512K adatot 16bit-enként?” Igen. 1M *8 = 512k * 16 = 8M (bitben). Idézet: „Ha BYTE módban vagyok, akkor a címzésnél minden byte-nak külön címe van?” Igen. Idézet: „Tehát az első cím 0 a második 1 aztán 2..3..4...stb?” Két része van a címnek: A18 .. A0 és az A-1. A 0. byte a A18..A0 = 0x0000 és A-1 = 0 címen, az 1 című pedig a A18..A0 = 0x0000 és A-1 = 1 címen, a 2 című pedig a A18..A0 = 0x0001 és A-1 = 0 címen, 3 című pedig a A18..A0 = 0x0001 és A-1 = 1 címen van. stb... Idézet: „WORD módban meg 1 cím 16bit adatot fog tárolni és a címzés párosával ugrik? Tehát az első 0 a második 2 aztán 4..6..8...stb?” Nem. Word módban nincs A-1. Csak az A18..A0 vezetékeken történik a kiválasztás. A 16 bit a D15..D0 vonalakon közlekedik. Idézet: „ Az adat pedig mind 2 esetben 16bit lesz, de BYTE módban D0-D7 lesz az adat láb és D15-A1 lesz az adat felső és alsó 8bit vezérlése, WORD módban meg csak egyértelműen és egyszerre írjuk ki a 16bit-et az adatportra D0-D15?” Ez a jó megközelítés. Byte módban az alsó és a felső 8 bit külön-külön írható. A hozzászólás módosítva: Jan 29, 2016
A parancsok kiírása az nem lesz probléma.
Adat írás előtt kiadom a megfelelő parancsokat amelyek fixek és megvan mit kell beírni. Írásnál és WORD módban: 4körben kell megadni. Cím: 555, Adat: AA Cím: 2AA, Adat: 55 Cím: 555, Adat: A0 4. körben meg mehet az adott cím és a hozzátartozó adat. Utána mér csak a 4. pontot ismételjük. Ami fontos, hogy jól értsem a byte-onkénti írást mert ha azt elrontom akkor vakargathatom a fejem miért nem működik a program.. Idézet: „A cimet addig kell a cimbuszon tartani (belertve az A-1-et is), amig a kiolvasas tortenik.” Ezt a részét értem, de ügye itt egy címen 2 bájt lesz elérhető. A-1 logikai 0-án az egyik bájt, és A-1 logikai 1-en a másik bájt. A kérdés, hogy mikor kiadom a címet és a megfelelő CE OE WE lábakat is beállítom, kiolvasom az első adatot, újra kell e címeznem ugyan ezt a címet, ahhoz, hogy A-1 logikai 1-re állíthassam és a második byte-ot is elérhessem? (Bár persze ez lenne a logikus) Vagy csak elég a címet egyszer kiadni + CE OE WE lábakat beállítani és A-1 láb billegtetésével az adatbuszon változni fog a megfelelő adat? (persze ez nem annyira logikus)
Köszönöm, ez így érthető..
Ment az értékelés.. Idézet: Pedig ez tortenik, csak egy igazi buszos rendszerben a cim menet kozben sosem valtozik. Egy processzor egyszerre egy olvasast csinal, tehat kiteszi a cimet es az egyeb vezerlojeleket, amire a cimdekoder ad CE-t a kivalasztott memoraianak. Ezt ott tartja x orajelig, aztan elveszi a vezerlojeleket. Ez egy buszciklus. Ha ket byte-ot akar felolvasni a memoriabol, akkor ezt ketszer csinalja vegig. Ha te mikrokontrollerrel software-bol, vagy egyeb logikaval akarod olvasni ezt a FLASH-t, megteheted, hogy a CE-t nem emeled fol 1-be a ket olvasas kozott, csak egyszeruen a cimet megvaltoztatod. Hogy csak a legalso bitet (A-1) vagy az osszeset, az tok mindegy. A FLASH azt teszi ki az adat kimenetre, amit az megadott cimrol olvas. Ez aszinkron megy, tehat nem kell hozza semmi mas jelet billegetni, nincs orajel. Ha a cim valtozik, valtozik az adat is. Amelyik papirlapra vilagitasz a zseblampaval, azt a papirt latod. Csatolok egy RAM read ciklust. Itt is ez van. „Vagy csak elég a címet egyszer kiadni + CE OE WE lábakat beállítani és A-1 láb billegtetésével az adatbuszon változni fog a megfelelő adat? (persze ez nem annyira logikus)” Idézet: Ahogy vesszuk. Mert BYTE modban ez nem egy cim, hanem ketto, hiszen az A-1 jel a legalso cimbit. Az is resze a cimnek. Igazabol ez egy 1Mx8 bites FLASH, ami kepes arra, hogy az also cimbitet eldobva ket byte-onkent olvashato. Ez a WORD mode. „Ezt a részét értem, de ügye itt egy címen 2 bájt lesz elérhető. A-1 logikai 0-án az egyik bájt, és A-1 logikai 1-en a másik bájt.”
Csak azt aruld el, legy szives, hogy engem miert turaztatsz a masik topicban ugyanezzel a kerdessel? Persze szivesen segitek, csak ha itt mar megkerdezted ugyanazt es kaptal is helyes valaszt, akkor miert kell mashol is feltenni a kerdest?
A hozzászólás módosítva: Jan 29, 2016
Nem túráztatlak, sokat segítettél, menni fog az értékelés. Most írom a programot és a 2ből teszem össze a teljes képet. Örök hálám a kimerítő válaszokért. És persze Hp41C-nek is..
Kezd egyre jobban körvonalazódni a dolog.. Majd még biztosan lesz kérdés, de most megpróbálom leprogramozni a lépéseket.
Addig is köszi a segítséget.
Az miért kell, hogy mondjuk írásnál, idézlek:
Idézet: „PIC adatvonalak bemenetre,” Majd beállítjuk a vezérlő lábakat, ahogy kell és: Idézet: „PIC adatvonalak kimenetre állítása,” Nem értem mi a lényege, annak, hogy elsőnek bemenetre, majd vezérlők után kimenetre álltjuk adatportot. Van ennek valami érdemi szerepe?
Ha egy igazi processzor buszt megnezel, akkor ott az adatvonalak mindig bemenetre vannak allitva, kiveve azt az egy esetet, amikor a processzor ir valamit. Ilyenkor processzortol fuggoen a vererlojelekkel es a cimmel egyutt, vagy kicsivel azok utan kimenetre allitja az adatot, aztan a ciklus vegen visszaallitja nagyimpedanciasba az adat buszt es a vezerlojeleket is inaktivba teszi. Az adatbuszt mindig csak az az eszkoz hajtja meg, akinek kell. Ha a processzor ir, akkor o, ha valakit olvas a processzor, akkor a kerdeses periferia vagy memoria teszi a kert adatot a buszra. Ezeket a memoriakat ilyen buszokhoz talaltak ki, a mikrokontrollerek elott 20-30 evvel...
Uraim, rá néznétek a kódomra?
Sajnos az istenért nem akar működni a meómra írása.
A meghívása pedig így:
Elvileg a 0. címről a 10. címig 0xffff adattal tölti fel a program. De semmi.. Éles szeműek észrevehetik, hogy MEM_WE-et még az adat kiírása előtt engedélyezem, eredetileg így van az adatlapban, de próbáltam úgy is, hogy adat kiírása után engedélyezem. Sajnos egyik verzióban sem működik. Valamit elrontok vagy benézek? Adatlap itt: Bővebben: Link A hozzászólás módosítva: Feb 7, 2016
28. sor, ennek mi az értelme: addr = addr; // Cím kiadása ?
Önmagát írod saját magára?
Azzal ne foglalkozz. Ott vagy 10 egyéb sor van amivel kiküldom a címet .
Rövidíteettem kicsit hogy átláthatóbb legyen. Az ott:
A hozzászólás módosítva: Feb 7, 2016
Találtam egy basic programot amivel 29F040-et lehet programozni, elviekben.
Elég egyszerű az utasításkészlet, könnyen lekövethető mikor mit kell adni a lábakra. Megnézegettem az adatlapját a 29F800-nak, közel azonos utasításokkal kommunikál. Lehet segít megérteni a programozását a flash-nek.
Köszönöm, átnéztem programot, elég átlátható.
A program amit beillesztettem gyakorlatilag ugyan ilyen, nekem még sem működik. Most megint abban a helyzetben vagyok, hogy nem tudom eldönteni, hogy az alkatrész (memória) rossz vagy a programom. Hp41C nagy szakértő ebben a témában, megvárom az ő véleményét is, hátha ő kiszúr valami ordas hibát. Ha már itt tartunk, nincs valaki aki meg tudná nézni nekem a memóriákat, hogy jók e? Esetleg beírni egy adathalmazt, hogy kiolvasásnál tudjam ellenőrizni a programom működését? Van minden eszközöm, hozzá itthon, kivétel az adapter ami kellene az eprom írómhoz. ADP-019 adapterrel tudnám írni és olvasni a memóriát, de ha egy mód van rá csak ezért nem vennék. (29F800) Csatolok egy képet, hogy milyen az az adapter. (ADP-019) Viszont sima adapterem az van, ami DIP 44-et csinál a PSOP44-ből. (Csatoltam erről is egy képet) Kétségeim vannak már a memóriával kapcsolatban, mert szerintem a programom már jó, de még sem olvas és nem is ír be semmit. A foglaltságot figyelő programot egyelőre még nem írtam meg, kicsit bonyolult is legalább is az adatlap szerint, de anélkül is kellene működnie a beírásnak.. Előre is kösz minden segítséget.
Sajnos nincs ilyen memóriám, próbálni nem tudom.
helyett:
Szerintem ezzel így vakon nem sokat fogunk tudni tenni. Az általános hibakeresés pedig jellemzően mindig ugyan az. Ha kellenek éppen tippek:
1. Az első lépés ilyen cuccok építésekor, hogy legyen egy gyári programozód is, amivel ellenőrizni tudod, hogy maga a memória biztosan jó. Kellene. Átugorhatod, ha akarod, de a következő lépésekben aránytalanul több figyelemre és türelemre lesz majd szükséged. 2. Utána vannak a külön hw cuccok, ahol el is tudsz kötni ezt-azt. Azt kizárni csak úgy tudod, hogy kiveszed a foglalatokból az ic-ket, és végig csengeted rövidzár mérővel, meg ellenőrzöd a környezetét is. Minden lábat minden lábbal (ami a környezetében lehet nyákvezeték stb következtében) ellenőrzöl, hogy az csakugyan azzal és csak azzal van-e kapcsolatban, amire szántad. A legtöbb ilyen hiba általában kontakt és zárlat problémákra vezethető vissza (eloxidálódott egy érintkező, vagy beforrasztásnál ott maradt egy paca, ami tüske formában átnyúlik a szomszédosra is, bármi ilyesmi). Perpillanat kiindulhatsz abból, hogy nincsenek a dolgok szándék alapján is elkötve, később az úgyis kiderül. 3. Ha kizártad a kontakt hibákat, kellene egy olyan összeállítás, ahol csak a memória vezérlő foglalathoz hozzáférsz a kialakításon keresztül, és ráhuzalozol a lábakra adott jeleket. Fel meg lehúzó ellenállásokat, és ledeket tipikusan. Nem pic-ről kezeled, hanem fixen huzalozol. Egy prototípust tipikusan úgy szokás kialakítani, hogy alkalmas legyen az elején az ic eltávolítása után huzalozásos ellenőrzéshez. Ha nem gondoltál rá, akkor ugorhatsz a következő pontra is, de legyen majd kéznél feszültség mérő, hogy ne kelljen csak a pic programra hagyatkoznod. Ha gondoltál rá, egyszerűen huzalozgass kicsit. Tudnod kell azt az adatot visszakapni, amit be is kell tudnod írni. Ha az nem jön össze, akkor valami a kötések körül problémás, vagy nem értetted meg az adatlapot. 4. Utána ha elővetted a pic-et, és arra is rákötötted a cuccost, kezdetben a pic-re csak olyan programot írj meg, ami egy adott fix címre beír valamit vagy visszaolvassa. Ha jó, kivillan egy led, ha nem, akkor nem. Újra meg újra cserélni a picen a programot, mindig mást írj be arra a címre, és azt kell tudnod visszaolvasni egy következő programmal. Semmi összetett dolgot ne írj elsőre, mert majd keresheted a tűt a szénakazalban. Csak sorfolytonos utasítás végrehajtás mindenhova várakozásokkal, órajelre is ilyen 32 khz bőven elég (ha gondoltál dupla órajelre), vagy ha kispórólnád a várakozásokat, hajtsd meg a pic-et mondjuk 100 hz-es frekivel (csak ha gondoltál rá előzetesen). Ha már minden klappol, csak akkor lehetsz benne biztos, hogy elektronikai bekötési és dokumentáció nem értési problémákat mindenestül kizártál, és az áramköröd biztosan működőképes. 5. Ha a fentiek már mind okésak, lehet pic-re libet írni. Még mindig lehetnek olyan bajok, mint például a pic-en húzogatod a lábakat sorfolytonos utasításokkal, és a mindenféle huzalozásban a parazita jelenségek miatt nem tudnak rendesen egyben odaérni a jelek annyi idő alatt, amíg már változtatgatni kezdesz. Dugaszpanelen / huzalozások közepette valahol 1 mhz alatti az a freki, amivel még bátran játszadozhatsz, afölött nem. Te a fenti kódodban sehova sem raktál explicit kivárásokat a vezérlőjelekhez. Néhol implicite sejteni lehet a kód alapján, hogy ott eltelik valamennyi idő, de lehetségesen az nem elég. Talán csak annyi az összes hiba, de nem tudom biztosra ígérni. Amikor pic-en szabadon fut egy program, ilyen egyszerű feladatokra tud az annyira gyors lenni, hogy csak a parazita jelenségek megehessék az egyébként kifogástalan tervezést. Kísérleti úton kell kitapasztalnod, hova mennyi várakozás kell abban az áramkörben, amit éppen működtetsz. Nem kevés idő el tud menni vele az elején, de az olyan. Te a kezdeti lépéseket mind átugráltad, és már csak néznéd a legvégét. Lehetett volna olyan szerencséd, hogy azonnal minden klappol, de most nem lett. Akárhol lehet elbújva egy bűnös, fel kell kutatni.
Nem vaktaba írtam a progit, kaptam segítséget feljebb. A hiba kereséssen túl vagyok. Van logikai műszerem es van rendes natúr műszerem is. Jelenleg teszt panelen van osszedugdozva hogy tesztelni díjam beforrasztas elott. Minden patent, vagy a programban van hiba vagy rossz a chip. De szerintem a program jó lesz... Erős a gyanúm hogy a chip rossz.
Időzítések növelése es egyébb átrendezésen túl vagyok. Feljebb a forrás, ha abba nincs ordas hiba akkor van baj. Van eszközöm a memória írásához de sajnos a kívánt adapter nem áll rendelkezésemre. Es csak azért nem vennék . Hétvégén megyek haza es ott van lehetőség megnézni es tesztadatot tölteni rá . Remelem jutok vele majd előrébb .
Köszönöm. Ilyen volt elsőnek, se nem működött.
Olvastam az adatlapot es ott előbb az írást engedélyezi majd utána küldi az adatot, de sajna ez sem működik. Próbáltam egyszerűbben vagy is a chip ID-jet elkérni hoz is eredményt de szerintem hibasat. Kicsit elakadtam most, de talán hétvégén jutok valamere ha más nem kiderül hog jó e a chip es ha igen feltoltom adattal.
Valamit kerestem és találtam egy 29F040C-70-et PLCC tokban. Nem tudom ilyen adaptered lenne-e a programozódhoz.
Köszönöm. Ilyen volt elsőnek, se nem működött.
Olvastam az adatlapot es ott előbb az írást engedélyezi majd utána küldi az adatot, de sajna ez sem működik. Próbáltam egyszerűbben vagy is a chip ID-jet elkérni hoz is eredményt de szerintem hibasat. Kicsit elakadtam most, de talán hétvégén jutok valamere ha más nem kiderül hog jó e a chip es ha igen feltoltom adattal.
Sajnos nincs hozza adapterem.
Köszi azért . |
Bejelentkezés
Hirdetés |