Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   42 / 177
(#) _vl_ válasza cpt.zoltan.simon hozzászólására (») Okt 12, 2013 /
 
Nem foglalkoztam vele, de valami doksikat begyűjtöttem. Ha gondolod, átküldhetem őket.
(#) cpt.zoltan.simon válasza _vl_ hozzászólására (») Okt 12, 2013 /
 
GMAIL-re jöhetne, köszönöm!
(#) ciw válasza _vl_ hozzászólására (») Okt 13, 2013 /
 
Hát találtam egy ilyen kódot, szerintem ez kell nekem.
Az a baj, hogy az init-nél a NAND_BuildLUT(0) visszatérésnél HardFault történik.
Tehát az NAND_Init hívja meg a NAND_BuildLUT(0), és el is jut a return NAND_OK;-ig, de már nem érkezik vissza a NAND_init-be.
(#) cpt.zoltan.simon válasza _vl_ hozzászólására (») Okt 13, 2013 /
 
Véleményetek szerint probléma lehet e hogy az SD kártyára nem tettem felhúzó ellenállásokat, hanem az LPC1788 sajátjait használom.
Annak ellenére vagyok bizonytalan, hogy az CMD55/ACMD41 páros produkál értékelhető eredményeket (igaz utána már nem reagál CMD2, CMD3-ra).
(#) _vl_ válasza cpt.zoltan.simon hozzászólására (») Okt 13, 2013 /
 
Idézet:
„Véleményetek szerint probléma lehet e hogy az SD kártyára nem tettem felhúzó ellenállásokat, hanem az LPC1788 sajátjait használom.”

Én az ilyen megoldást mindig kerülöm. Ugyanis amikor az LPC resetben van, akkor azok az ellenállások nem feltétlenül (vagy leginkább nem) fognak működni. Viszont ekkor az SD kártya random hülyeségeket értelmezhet parancsként a vonalakon levő zavarokból.
Ha hosszú (mondjuk 1-2 centinél hosszabb) a vezeték, akkor a soros ellenállások is nagyon kellenének a kimenetekre.
(#) killbill válasza _vl_ hozzászólására (») Okt 14, 2013 /
 
Idézet:
„Ugyanis amikor az LPC resetben van, akkor azok az ellenállások nem feltétlenül (vagy leginkább nem) fognak működni.”
Miert ne mukodnenek? Ez a reset allapotuk.
Ettol fuggetlenul, ha az SD tapjat ki-/bekapcsolgatja a HW, akkor erdemesebb kulso ellenallasokat hasznalni, es persze azokat a kapcsolt tapra tenni. Vagy a belso felhuzokat kell kikapcsolni, amikor a kartya nem kap tapot. Viszont, ha kapcsolt tapja van a kartyanak, akkor igen jo, ha van egy ellenallas a tapon is, hogy kikapcsolt tapnal tenyleg lemenjen 0V-ra a kartya VCC-je.
(#) _vl_ válasza killbill hozzászólására (») Okt 14, 2013 /
 
Én sokféle mikrokontrollerrel játszottam már, de aminél ezt konkrétan megnéztem, annál mindnél az volt, hogy az összes konfigurálható I/O lábát elengedi (bemenet, fel/lehúzó ellenállás nélkül), amíg a reset láb alacsony állapotban van. Ha 1 percig tartom alacsony állapotban, akkor 1 percig lógnak a levegőben a lábak. Az LPC a doksija szerint reset után bekapcsolja a felhúzó ellenállásokat, de hogy reset alatt mi lesz, azt nem találtam meg leírva, tesztelni meg nem teszteltem.
(#) killbill válasza _vl_ hozzászólására (») Okt 14, 2013 /
 
Aggaszto, amit irsz. Meg nem talalkoztam ilyennel, pedig en is lattam mar par uC-t. Mondjuk az AVR-ek nem kapcsoljak be maguktol (reset felfutasa utan sem) a pull-up-ot, ott ertheto az altalad irt jelenseg. Megmertem egy LPC1113-mat. Veletlen egybeeses, de azon a panelon, amin mertem kb. 40us alatt megy fel a tap nullarol 3.3V-ra, es ugyanebben az idopontban ugrik fel a kimenet is 3.3V-ra. A RESET kb. 1V tapnal lemegy L-be (MCP130) es hosszu milliszekundumokig ugy is van. Megmertem ugy is,hogy a RESET fixen foldon volt, ugyanaz az eredmeny. Aztan tettem egy kulso 2.2k-t a mert kimenet es a 3.3V koze, igy a kimenet egyutt megy a tappal. Szoval ugy nez ki, hogy bekapcsolja a felhuzokat, csak kis kesessel. Szentul hittem, hogy ez belul aszinkron dolog, de ezekszerint nem.
(#) cpt.zoltan.simon válasza killbill hozzászólására (») Okt 14, 2013 /
 
A külső ellenállásoknak megterveztem a helyét 1206, csak még nem vettem meg. Most akarok rendelni egy pakkot a HESTORE-ból hogy legyen minden értékből rendesen. Nem kapcsolgatom a tápot, mert fölösleges az adott applikációban. A távolság az MCU-tól kb 3cm, nem vészes.
Közben megdumáltam egy haverral, ha a CMD55/ACMD41-re ad értékelhető választ a kártya akkor hardveresen rendben van.
Addig jutottam hogy Az ACMD41-Send Application Operation Enviroment után (ami a kártyára alkalmazható tápfeszt adja esetemben 0x00FF8000 azaz 2.7-3.6V), a CMD2 már úgy megy ki hogy a visszajelzés Command Time Out. Ez az lenne hogy a kártya küldje már el a CID-t. Ezt már nem kapom meg...
A net tele van az init-el. SPI módban. Persze tudom hogy egyszerűbb az SPI mód, de nekem nagyon sokat kellene a kártyát olvasni, csupán 32Mx32 az SDRAM-om, és nem férne bele minden BMP. Szóval egyenlőre küzdök.
(#) killbill válasza cpt.zoltan.simon hozzászólására (») Okt 14, 2013 /
 
En ugy hasznaltam SD kartyat LPC-n, hogy az init 1 bites modban indul, 400kHz clock-kal. Ha lement az ACMD41, van utana egy CMD2 es egy CMD3 (meg nem mondom, hogy mit csinalnak, mar nagyon regen irtam), majd utana van egy CMD7, ez egy select card, es csak ezt kovetoen allitom az orajelet 18MHz-re (nekem ennyi volt a max.) es utana kapcsolom az MCI-t 4 bites modba. Van itt egy darab kod, ami nekem szepen mukodik, hatha latsz benne valamit.
A hozzászólás módosítva: Okt 14, 2013

sdinit.c
    
(#) cpt.zoltan.simon válasza killbill hozzászólására (») Okt 14, 2013 /
 
A 400kHz az nálam is rendben van mert a 60MHz PCLK-ból számolja magának és nagyon rendben van. Természetesen 1bit-esként (reset alapértelmezett) kezdek neki ezeket a nagyon alap dolgokat már átolvastam, a nagyon alapokkal tisztában vagyok, legalábbis úgy gondolom.
Köszönöm a kódot, most azonnal kipróbálom. Ugye nem CMSIS?
(#) cpt.zoltan.simon válasza killbill hozzászólására (») Okt 14, 2013 /
 
Szerintem tartozik hozzá egy H file is, mert egy csomó sorra hibát ír ki hogy UNDEFINED, szóval valahol máshol volt valaha DEFINED
(#) killbill válasza cpt.zoltan.simon hozzászólására (») Okt 15, 2013 /
 
Ehhez eleg sok .h file tartozik még. De nem is az a cel, hogy ezt egy az egyben leforditsd, hanem az, hogy lasd, hogy mi az init menete. Nem oldom meg a problemadat, csak probalok segiteni. A logikai lepesek a lenyegesek, nem a header-ek.
(#) cpt.zoltan.simon válasza killbill hozzászólására (») Okt 15, 2013 /
 
Ezen rész miatt akad már csak el a fordítás:

  1. LPC_MCI ->      MASK0           = MCI_CMDCRCFAIL | MCI_CMDTIMEOUT | MCI_CMDRESPEND;
  2. LPC_MCI ->      COMMAND         = MCI_COMMAND_INDEX(code) | MCI_COMMAND_RESPONSE | MCI_COMMAND_ENABLE | ((longresp) ? MCI_COMMAND_LONGRSP : 0);


Ezt a részét meg C-Keil szintaktikailag nem értem:
  1. ....((longresp) ? MCI_COMMAND_LONGRSP : 0);

A függvény amiben szerepel van egy bemenő változója ami a LONGRESPONSE-ra utal. Szóval ez az utolsó kis részlet programozástechnikailag mit csinál?
(#) _vl_ válasza cpt.zoltan.simon hozzászólására (») Okt 15, 2013 /
 
Az
  1. a = ((longresp) ? MCI_COMMAND_LONGRSP : 0);

ekvivalens azzal, hogy
  1. if (longresp) { a = MCI_COMMAND_LONGRSP; } else { a = 0; }
(#) killbill válasza cpt.zoltan.simon hozzászólására (») Okt 15, 2013 /
 
Idézet:
„Ezt a részét meg C-Keil szintaktikailag nem értem:
  1. ...((longresp) ? MCI_COMMAND_LONGRSP : 0);
Ez K&R szintaktika

Annyit csinal, hogy a fuggvenynek megmondod, hogy long response-t varsz a kartyatol vagy nem, es ennek megfeleloen allitja be a command regisztert. A fuggvenyben van egy BX_SemaGet() hivas, ami egy kernel hivas, es egy szemaforra var. A szemafort az MCI interrupt kiszolgalo rutin allitja be, amikor bejon az IRQ, es egyben beteszi az irqstat nevu valtozoba az MCI stat regiszter aktualis erteket:
  1. /*
  2.  * MCI interrupt kiszolgalo
  3.  */
  4. static  void    sdirq(void)
  5. {
  6.    irqstat = lpc_mci->stat;
  7.    BX_SemaPut(&irqsema, 1);
  8.    lpc_mci->mask0 = 0;
  9. }

Az ne zavarjon, hogy az ISR static-nak van deklaralva, mert az LPC2368 az ARM7 alapu uC, es maskepp vannak az interrupt vektorok, mint a Cortex-M3 alapuaknal.

Ez egy real time kernel alatt futo program, ezert hasznal szemafort. Megvarhatod maskepp is a muvelet veget, csak real time rendszerekben nem szokas feltartani a processzort HW-re varakozassal. A kulonbozo ERR_... makrok csak hibakodok, amik ebben a megvalositasban negativ szamok.
(#) cpt.zoltan.simon válasza killbill hozzászólására (») Okt 15, 2013 /
 
K&R = Keil & Realview Assembler?
Egyenlőre az error részeket próbálom ignorálni. Most már vágom hogy mit hogy csinál, a furi az hogy kb ezt csináltam én is. Igaz én nem toltam egy utasítást adott esetben 30x ahogy te for-next függvényekkel csináltad. Kíváncsi leszek az eredményre.
(#) _vl_ válasza cpt.zoltan.simon hozzászólására (») Okt 15, 2013 /
 
Bővebben: Link
Ezt a könyvet magyarul is kiadták, több kiadásban is: Bővebben: Link Bővebben: Link
Alapmű, ha az ember C-t szeretne tanulni.
(#) killbill válasza cpt.zoltan.simon hozzászólására (») Okt 15, 2013 /
 
Miert akarod ignoralni az error reszeket? Ha egyszer hiba van, akkor azt nem lehet ignoralni. Igazabol nem emlekszem, hogy miert probalja meg kikuldeni a parancsot 30-szor, ha CMDTIMEOUT van. Lehet, hogy valami teszt volt, aztan csak bentmaradt. Nem biztos, hogy kell bele. Ezt a kodot még 2010 majusaban irtam.
(#) kissi válasza killbill hozzászólására (») Okt 15, 2013 /
 
Idézet:
„Ezt a kodot még 2010 majusaban irtam.”
És már nem emlékszel ?!
(#) killbill válasza kissi hozzászólására (») Okt 15, 2013 /
 
Öregszem...
(#) cpt.zoltan.simon válasza killbill hozzászólására (») Okt 16, 2013 /
 
Azért ignoráltam, hogy egyszerűsítsem a dolgom, a megértést. Lépésről lépésre emeltem a sajátomba a kódodat, gyakorlatilag CMD, ACMD részenként.
Most az a helyzet hogy szépen lefut, az elején jól jön a for-next ciklus, mert elsőre általában mindig BUSY a kártya, neki kell futni a CMD55/ACMD41 párosnak 2x is.
Most már csak a waitms funkciót kell belepreparálni, hogy magától is menjen, időzítések nélkül csak single-step fut le helyesen.

Ami érdekes: printf. Na ettől úgy szétfagy a kontroller hogy még a main függvényig se jut el. Amint kiszedem, működik rendesen. Amíg benne van addig se single-step se semmi. Mintha le lenne húzva a JTAG a prociról (csak hibaüzenet nélkül). Ez vajon miért lehet?
(#) killbill válasza cpt.zoltan.simon hozzászólására (») Okt 16, 2013 /
 
Az en initemben ket ciklus van. Az egyik, ami max. 10-szer kiadja az ACMD41-et. Az kell is, mert meg kell varni, amig a kartya feleled. De ott, ha a kartya BUSY, akkor var 200 milliszeket, es csak utana kerdez ujbol. Ez szerintem igy rendben is van. A kartyanak ido kell, mire az ACMD41-re azt valaszolja, hogy nem BUSY. A szabvany szerint max. 1 sec.
A printf-re enincs otletem. Az alapvetoen egy C konyvtari fuggveny, ami a standard output-ra ir egy *NIX rendszeren. Hogy egy mikrokontrolleres rendszerben mit csinal, az valtozo. Nekem speciel egy sorosvonalra irt, es csak debuggolasi celokat szolgalt.
(#) cpt.zoltan.simon válasza killbill hozzászólására (») Okt 16, 2013 /
 
Hát igen, én is csak azt szerettem volna, hogy a Keil Debug-printf ablakába írjon ki dolgokat, ahelyett hogy külön egy terminál ablak futna a PC-n + egy felkonfigolt UART, UART_USB átalakító... Sajna az egész szétesik tőle, most keresem mi lehet a gond.

Az ACMD41-et észrevettem hogy sosem "sikerül" elsőre, utána viszont már minden okay, a kártya elkapja a fonalat.
Most éppen próbálom értelmezni azt a rengeteg adatot ami az init során kiesett az SD kártyából, mert jó volna tudni mikor mit csinál. Az ACMD41 pl már tiszta.
(#) cpt.zoltan.simon válasza killbill hozzászólására (») Okt 17, 2013 /
 
Megint kérdeznék:
Init rendben megtörtént: CMMD13, ra szépen visszajön hogy a kártya rendben van (A Card Status register alapján).
SD kártya olvasása:
sd_cmd(17, cím, 0);
Ha a cím 0x00, 0x01, a visszajövő válasz 30. bitje 1, ami azt jelenti hogy:

"A misaligned address that did not match the
block length was used in the command."

Ha mondjuk a cím 0x2000, akkor ez a bit nulla. Szóval nem "igazítottam" a blokk címét, amit ki szeretnék olvasni. Jól gondolom killbill?

Ezek után mi jön? SPI-ben egyesek azt írják hogy 4byte FF-et kell küldeni, aztán visszajön egy FE, és aztán az adatok.
Szóval egy címhelyes CMD13 után amikor várnám az adatokat a DATACNT szépen számol lefelé, de adatok a FIFO-ba nincsenek, jelzi hogy RXFIFO EMPTY.

Egy CMD17-Single block read-nek mi a korrekt lefolyása?
(#) pajti2 hozzászólása Okt 22, 2013 /
 
Tanácsot / iránymutatást szeretnék kérni tőletek. Kellene nekem áramkörileg usb 2.0 kliens, legalább 64 mbyte ram, és ethernet (akár 10 mbps is elég). Mindez hekkelhető minőségben. Olyan cuccos lenne jó, amire nincsen rákényszerítve sem android, sem linux, hanem ansi C stack alapon van valami "community support"-tal. Beaglebone és társai folynak a csapból is, de csupasz fémnek nem túl jók. Létezik ilyen kategóriában kedvenc amatőr cuccos is épelméjű áron? Vagy külön gyártatni kell egyet saját igény szerint?
(#) _vl_ válasza pajti2 hozzászólására (») Okt 22, 2013 /
 
A >=64MB RAM nagyon erős szűrőtényező lesz. Nézzél Cortex demo boardokat, azokon ugye nem tud futni standard Linux, talán akad belőle ilyen sok SDRAM-mal szerelt modell. Mivel sokkal kisebb a választék, szinte biztos, hogy többe lesz, mintha az okosabb, Linuxot is tudók (pl. Beaglebone Black) közül választanál.
Esetleg jó áron van még az Olimex i.MX233-asa, ha nem zavar, hogy egy integrált USB hubra van az Ethernet rágyógyítva. Bővebben: Link
(#) icserny válasza pajti2 hozzászólására (») Okt 22, 2013 /
 
(#) pajti2 válasza _vl_ hozzászólására (») Okt 22, 2013 /
 
Sajnos nem is a ram a nagyobb baj, hanem a kliens usb 2.0 port. Konkrétan az olimex imx233-asnak a doksija szerint host funkciós usb-je van, kliens nincsen rajta.

A beagle boardok egy jó nagy színjáték. USB otg-t írnak, pedig ha ránézel a schematicon a descriptionre, mindegyik host slotra van bekötve - vagy még csak nem is arra. (Debug porton vannak, vagy csak tápfeszt szolgáltatnak.) Ha te láttad már bármelyiket kliens usb funkcióval működni, érdekelne, melyiket. A netes doksi meg egy külön tészta. Egyik helyen ezt írják, a másikon meg azt. Nem ízlik.

Linux nélkül is azért akarom a boardot, mert amit community tart kézben stack alapon, ott van kitől megkérdezni, hogy ugyan árulná el, működik, vagy sem. Az összes többinél meg csak a fórum trollok vannak ott, és azok semmit sem tudnak. Az olimex olinuxino boardjával például már szívtam egy nagyot. Tényleg van rajta usb kliens, de nincsen hozzá linux driver. Android driver van hozzá, de az meg nem igazán stabil. Source kód support nulla, driver support nulla. Valami kínai gagyi processzor van benne (a13), és képtelenség a gyártóból bármit is kiverni. Ami egyben van, úgy van, és nincsen semmi más. Szóba sem állnak azok senkivel.. Na ezért akarok inkább csupasz fém cuccost. Olimexéknek a pic32 maxi web boardjuk olyan, hogy azon kezelhetően életre tudtam kelteni a kliens usb portot mc libbel, de a speedje meg csak 1.1-es, és az most kevéske.

Szerk.: Közben látom kaptam egy új tippet is, nézem a SAM-ot.
A hozzászólás módosítva: Okt 22, 2013
(#) pajti2 válasza icserny hozzászólására (») Okt 22, 2013 /
 
Direkt utána kotortam az adatlapnak, és kikerestem belőle a clock kontroller részt. Az usb periféria 12/48 mhz-hez oszt vissza. A 480-at nem fogja vinni. Microchipék is olyat játszanak, hogy "2.0 kompatibilis", de nekem inkább speed kellene, mint kompatibilitás.
Következő: »»   42 / 177
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem