roadrunner Postat Septembrie 2 Partajează Postat Septembrie 2 (editat) @BIZONUL66 @cloudy @aureli67 @nustiunimic Am compilat un proiect de HID USB pentru atasarea unei tastaturi la CobRRA facuta pe genunchi, e scris in Verilog (trebuie sa scriu un un Wrapper VHDL ca s-o combin cu restul). e scrisa foarte destept (am vazut codul cu ani in urma) autorul a facut un mic procesor de 4 biti care ruleaza microcod ca sa initializeze ENDpoint-ul din tastatura si sa faca poll la tastatura. (avea niste lucruri scrise un pic in ordinea gresita si dadea niste warning-uri dar le-am fixat) Limitarea e ca lucreaza cu USB low speed (1.5Mbit/s) dar probabil ca majoritatea tastaturilor de 10$ sunt low speed, partea buna e ca nu e nevoie de PHY pentru USB merge direct din pini FPGA. proiectul se original se alfla aici: https://github.com/nand2mario/usb_hid_host O sa fac niste teste cu hardware-ul cand mai gasesc timp. RR PS - O treaba care merita precizata e ca interfata asta prezinta 4 coduri de scan simultan din pachetul de date de la tastatura (adica poate citii 4 taste simultan) si asta ajuta enorm la imitarea unei tastaturi matrice (ca la Cobra) unde scrierea de la tatatura implica o gramada de shift si symbol-shift. RR Editat Septembrie 2 de roadrunner Link spre comentariu
aureli67 Postat Septembrie 2 Partajează Postat Septembrie 2 suuupppeerrr asteptam , nu-i problema inca o chestie nu vad deloc proiectul de Cobra la tine pe blog sunt 4 proiecte acolo , dar nu si asta de Cobra da-ne un link direct spre acel proiect mii de multumiri pentru timpul pierdut si eforturile depuse Link spre comentariu
roadrunner Postat Septembrie 2 Autor Partajează Postat Septembrie 2 (editat) Trebuie sa curat un pic codul inainte sa-l pun public si sa rezov cateva buguri (unul enervant in video) o sa mai dureze un pic.(intre timp probabil ca o sa aiba si keyb pe USB) Urmatoarea chestie e un PCB cu fpga in mijloc si VGA, HDMI, USB si nimc altceva (regulatoare si osc de clock) dar mai e cale lunga pana acolo... am scris deja un wrapper de VHDL la parte asta de tastatura dar nu o unesc cu CobRRa pana nu o testata in izolare. RR Citat mii de multumiri pentru timpul pierdut si eforturile depuse no problem, tot n-aveam ce face in pauza de masa. PS - cred ca partea cea mai interesanta (challenging) e sa testez daca merge. Nu pot sa simulez ca nu exista modele (la liber) pentru tastaturi USB (AI nu le poate scrie ca sunt prea multe layere de complexitate) osciloscop care sa-mi decodeze stream-ul de USB n-am. Tot ce pot sa fac e sa esantionez semnalele in FPGA in timp real (un fel de internal logic analyzer) asta e buna de intrebare la interviul de angajare.... RR Editat Septembrie 2 de roadrunner Link spre comentariu
cloudy Postat Septembrie 2 Partajează Postat Septembrie 2 55 minutes ago, roadrunner said: un fel de internal logic analyzer Logic analyzer cu Z80 ! Link spre comentariu
roadrunner Postat Septembrie 2 Autor Partajează Postat Septembrie 2 (editat) nu e nevoie sa faci unul de mana ca stiu tool-urile de FPGA (au un IP core care trebuie numai configurat si instantiat) - in lumea AMD/Xilinx il cheama ILA (integrated logic analyzer) - isi trage datele capturate prin JTAG. Problema e sa ai suficient block-ram sa poti captura ce vrei. Cu ceva ani in urma (cam 10) era un tool separat chesta aia (ILA) se chema Chipscope si am dat pe el 1000$ acum e free integrat in tool-uri. (si-a scos banii in 5 zile ca numai 5 zile l-am folosit pana am prins bugu) Ma uitam la un Pmod (care merge la placa mea) care are in afara de niste rezistente de bias si conectori un boost mic de la 3.3V la 5V ca sa alimenteze tastatura. (il crosetez eu de mana cumva ca sa fac experimente) sunt 22R in serie cu liniile de USB si 15K pull down. si boost-ul ala de 3.3V /5V care-l sar si-i dau eu 5V de undeva de pe placa. RR Editat Septembrie 2 de roadrunner Link spre comentariu
roadrunner Postat Septembrie 2 Autor Partajează Postat Septembrie 2 (editat) FPGA-ul cum incearca sa programeze END-pointul de date din tastatura ....se straduieste. RR Editat Septembrie 2 de roadrunner Link spre comentariu
cloudy Postat Septembrie 2 Partajează Postat Septembrie 2 Cred că o să fie destul de greu să faci debug pe comunicatia USB fara un analizor extern, dedicat. Fac cei de la totalphase.com lucruri ok. Dar sunt scumpe. Am avut ocazia să mă joc cu unul la un amic. Sunt foarte ok si hard si soft. Link spre comentariu
roadrunner Postat Septembrie 2 Autor Partajează Postat Septembrie 2 (editat) cred ca merge si nu o sa trebuiasca sa fac debug la nivel de protocol USB. Ma uitam la osciloscop ca pate decoda LIN, CAN, I2C SPI, RS232 si cam atat. Oricum e suficient sa vad daca misca semnalele alea. Am sperat sa mearga tastatura cu 3.3V dar nu vrea o sa-i dau 5V extern ca mi-e lene sa caut unde 5V am pe placa. Si pun niste rez serie mai mari de 22R sa nu-mi parjeasca IO-urile de 3.3V cand le loveste cu 5V din tastatura (ca sigur o se se scurga prin clamp diodes de pe IO-uri in railul de 3.3V al placii FPGA) RR Editat Septembrie 2 de roadrunner Link spre comentariu
cloudy Postat Septembrie 2 Partajează Postat Septembrie 2 (editat) 23 minutes ago, roadrunner said: ca sigur o se se scurga prin clamp diodes Am testat și eu, fără să vreau, rolul diodelor de protecție de pe IO-uri. Am reușit chiar și 9v pe alimentarea uC-ului, prin rezistențele prin care vroiam să protejez IO-urile ! Editat Septembrie 2 de cloudy Link spre comentariu
roadrunner Postat Septembrie 2 Autor Partajează Postat Septembrie 2 (editat) Partea misto e cand se deschid si nu mor ca-s mai trainice si curge tensiunea aia in tot rail-ul la care-s legate si mai omoara altceva pe placa (dar IO-ul ramane bun) am dovedit USB-ul citeste de la tatatura merge brici. Ia-am dat 5V la tatatura si a luat-o fara probleme, dau din taste si vad starea unui registru de iesire de 8 bit (din cele 4) pe niste led-uri. Trebuie sa vad cand si cum vin scan codurile pe canalele astea 4 si daca scan codurile sunt la fel ca la tastaurile clasice. Caut documentatie pe net dar ma tem ca fiecare a facut-o altfel si a carpit-o in driver (in software) Poate-i atasez un uart mic sa ma uit intr-un terminal serial ce dreaq vine pe tevile astea 4, si sa pun mai multe tastaturi sa vad daca-i la fel la ele (ca ma tot benoclez la niste leduri si ma intreb unde-i MSB-ul ca sa-mi dau seama in Hex daca sunt scan codurile la fel.) RR Editat Septembrie 2 de roadrunner Link spre comentariu
cloudy Postat Septembrie 2 Partajează Postat Septembrie 2 5 minutes ago, roadrunner said: si vad starea unui registru de iesire de 8 bit (din cele 4) pe niste led-uri. Am glumit mai sus cănd am zis de Analizor Logic cu Z80. Totusi, de ce nu pui aceste valori in memoria RAM-video pe care oricum o afisezi pe VGA ? Link spre comentariu
roadrunner Postat Septembrie 2 Autor Partajează Postat Septembrie 2 (editat) Proiectul asta cu USB keyboard e separat de CobRRa deocamdata ca sa pot simula (ca ala cu Cobra cam da simulatorul pe spate cu 64K initalizati cu cod si Z80 ruland) Simulatorul asta din tool-urile de la Xilinx e free (vine cu tool-urile) si e departe de a fi perfect, a fost scris de un coleg de cubical (pe vremea cand lucram la Xilinx) inca mai tinem legatura e irish da s-a mutat in San Jose. E mult mai usor de testat in izolare, cand sunt happy cu el si el cu mine il alipesc la CobRRa (si scot struto-camila aia cu PS2) RR Tool-urile de la Altera vin cu modelsim (o versiune "soimii patriei") dar oricum mult mai de incredere. RR Editat Septembrie 2 de roadrunner Link spre comentariu
roadrunner Postat Septembrie 3 Autor Partajează Postat Septembrie 3 (editat) Citat Totusi, de ce nu pui aceste valori in memoria RAM-video pe care oricum o afisezi pe VGA ? n-am raspuns la intrebarea asta asa ca raspund acum poate citeste vre-unul mai tanar si/sau deschis la minte. Mie imi vin niste coduri de 8 biti (in 4 registrii separati ) scopul e sa vad ce vine (ideal in reprezentare hex ca e cea mai compacta) cum vine (adica in ce registrii) si cand vine si nu nu mai vine (cand ridici degetul de pe tasta, sau taste) - asta ca sa definim probelma de rezolvat. Evident ca ma gandesc la solutia ce mai rapida ca sa obtin ce vreau. 1. Solutia propusa de tine - sa iau valorile acestor 4 bytes si sa le arunc in memoria video (alipind proiectul de fata la memoria RAM si controlorul video de la CobRRa) motivul pentru care nu folosesc metoda asta e ca as vedea niste pixeli care se aprind si se sting pe ecran. Ca sa vad valori hex trebuie sa convertesc valorile astea in HEX (text) si sa construiesc caracterele text pe ecran (cu un generator de caractere - ROM) si sa le scriu la niste adrese ciudate. (ca asa au ales aia de spectrum sa fie "destepti" la scrierea in memoria video) deci o gramada de treaba ca sa vad 4 valori hex pe ecran. (nu mai zic ca trebuie sa fac si un fel de scroll sa vad pe o perioada mai mare de timp) 2. Solutia cu uart. DIn clock-ul de 12MHz ar USB-ului generez un baud rate de 9600bps si serializes cele 4 valori urmate de un x0D 0x0A -adica CR LF ca sa stiu unde incep si unde se temina pe ecran (adica sa fie pe randuri separate), convertesc fiecare nibble de 4 bit in ascii (ma costa 8 LUT-uri de 4 intrari - adica nimic) si arata bine in terminal. Uart-ul cred ca nici nu trebuie sa-l scriu de mana cred ca e un block deja in tools. (evident clock-ul de 12MHz nu o sa-mi dea exact rata de baud dar e sub rata de eroare acceptata) Maxim 100 de linii de cod cu rezultate spectaculoase in terminal. 3. M-am gandit si la o solutie ultra simpla sa fac un afisor de 4 bytes in hex pe 8 afisoare cu led cu 7 segmente (dar nu le gasesc pe unde le-am pus) - asta ar fi cea mai simpla in VHDL dar ar lua timp sa lipesc afisoarele (sau sa le pun pe bread board) RR Editat Septembrie 3 de roadrunner Link spre comentariu
roadrunner Postat Septembrie 3 Autor Partajează Postat Septembrie 3 (editat) La loc commanda. E destul de simplu am gasit standardul key modifiers (SHIFT, CTRL etc.) sunt raportati de un registru separat. iar tastele apasate au niste reguli clare cum sunt prezentate. https://wiki.osdev.org/USB_Human_Interface_Devices asta simplifica enorm translatarea in hardware in formatul tastaturii de Cobra/Sinclair. pe mine ma interesa paragraful urmator (care face diferenta fata de PS2) totusi scan codurile sunt diferite. Keypress mechanism USB keyboards send interrupts when a key is pressed or released, just like a PS/2 keyboard. However, unlike PS/2 keyboards, USB keyboard does not have the concept of "make" and "break" scancodes. When a user presses a key, the interrupt comes in with a scancode value in one of the keypress fields. When a key is released, the corresponding keypress field is returned zero in the next packet. To illustrate this more clearly and to illustrate why there are more than one keypress scancode field, let's look at the following examples. Assume the user pressed the "A" key, which is scancode 0x04. The returned interrupt packet would look like this: 00 00 04 00 00 00 00 00 Notice the modifier keys are zero, because the user isn't pressing any. The reserved field is also zero, as recommended by the USB HID spec. The first keypress field contains 0x04, which corresponds to the "A" key. Now, let's assume the user lets go of the "A" key. The packet sent would look like: 00 00 00 00 00 00 00 00 Deci trebuie sa ma uit la pachete succesive ca iau decizia ca s-a ridicat tasta respectiva sau s-a apasat. Easy peasy lemon squeezy. am gasit si scan codurile si sunt diferite de PS2 https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2 RR Editat Septembrie 3 de roadrunner Link spre comentariu
Ovidanie Postat Septembrie 3 Partajează Postat Septembrie 3 La 02.09.2024 la 15:27, roadrunner a spus: Urmatoarea chestie e un PCB cu fpga in mijloc si VGA, HDMI, USB si nimc altceva (regulatoare si osc de clock) dar mai e cale lunga pana acolo... Poate doua USB-uri? Unul pentru tastatura si celalalt pentru un stick? Sau poate un slot pentru un card microSD unde sa fie toate programele? Eventualele update-uri de soft pot fi incarcate in FPGA de pe stick-ul USB? Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum