Page 3 sur 33
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : dim. 9 juil. 2023 13:08
par Xrider
Effectivement, il y a mieux :
Je viens juste de trouver cet incroyable article sur AliExpress. Jetez-y un coup d'œil ! 2,78€ Réduction de 15% | En-tête de broche plaqué or, une rangée de prise PCB, insertion de 40 broches, ronde illac OP, médailles, puce IC, 2.54mm, 40 broches
https://a.aliexpress.com/_mqhgAqG
Le top, si le pcb doit resté souder : réaliser un pcb qui reprendrai les points inférieurs du pcb (donc connection par dessous), et qui donnerai sur 2x connecteurs fpc de 20 pins, espacé de 1mm entre pin

Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : dim. 9 juil. 2023 15:18
par Bouz
Ah oui, super, je vais regarder ça! Je n'ai jamais commandé chez eux!
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : dim. 9 juil. 2023 16:40
par Bouz
C'est malin, à cause de toi, j'ai pris plein de connecteurs, j'ai passé de peu mon seuil psychologique de 10€

.
Merci pour le tuyau! Ca devrait arriver le temps que je reçoive les PCB, que je soude toutes les puces dessus, et que je fasse les premiers tests (ceux qui ne tuent pas le slot si on se loupe).
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : dim. 9 juil. 2023 19:56
par Xrider
Avec plaisir Aurélien.
Impatient de voir tout ça assemblée

Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : mar. 18 juil. 2023 16:31
par Bouz
Et pendant que les partes arrivent, j'ai commencé le code de l'appli conjointe PC/Arduino.
Côté PC, je suis parti sur du C# / .Net 6 en mode console (totalement multi-plateformes si je ne me loupe pas), qui encapsule une API en mode objet pour envoyer des commandes vers le "BricoNeo" via l'Arduino et la liaison série.
Le code PC comporte pas mal de tests unitaires pour blinder quelques aspects pénibles à tester avec le microcontrôleur en face.
Côté Arduino, c'est... du C++ compatible avec l'environnement Arduino. Je fais le code avec un Uno parce que c'est physiquement plus solide, mais ça tournera sur un Nano. Dans les deux cas, c'est de l'ATmega328p. Le fait d'avoir un microcontrôleur cible me permet de mettre en place quelques optimisations lors de l'accès aux broches (je tape les ports en direct) et de gagner pas mal de cycles sur les opération répétitives (comme envoyer le contenu d'une EPROM dans la RAM, par exemple!). Ce code est quand même "wrappé" au cas où je décide de changer de microcontroleur un jour!
Pour les fonctionnalités, nous avons...
- Une commande Ping, qui renvoie un numéro qui s'incrémente à chaque appel (c'est pour commencer, mais non, ça ne sert pas à grand chose)
- Une commande GetNeoGeoPower, qui me renvoie l'état de la NeoGeo connectée (en marche / éteinte)
- Une commande SendBlockW, qui permet d'envoyer morceau d'un fichier local dans la RAM du BricoNeo. C'est là que ça devient intéressant. On peut choisir un fichier source, une adresse d'arrivée dans la RAM (ce qui permet de faire des modifications partielles de son contenu), un offset dans le fichier, et une taille à envoyer (pareil, mise à jour partielle).
Le transfert de fichier se fait par paquets de 1ko (on n'a que 2ko de RAM sur le microcontroleur). Chaque paquet est accompagné de son CRC32, qui est vérifié côté Arduino. S'il est mauvais, le paquet est réémis. Le fait de traiter de gros paquets d'un coup permet de ne pas traiter les données au fil de l'eau, et de ne pas épuiser le tampon de 8 octets du port série de l'Arduino!
Concrètement, le port entre le PC et le microcontrôleur tourne à 1Mbps sans souci. Les tests pour envoyer une ROM complète (de 128ko), avec le calcul de CRC côté Arduino et l'envoi dans la RAM (en tout cas ce qu'il faut pour le faire) prend en tout 3700ms (moins de 4s, quoi).
=> Je suis plutôt satisfait par la vitesse de la chose, d'autant que je vais probablement in fine envoyer dans la RAM des programmes de quelques centaines d'octets.
Je vais continuer avec la gestion des ports en entrée / sortie, ça avance...
Note intéressante: en faisant le code optimisé pour l'accès aux broches du microcontrôleur, je me suis aperçu que celles que j'utilisais pour 2 des 4 LED de status (A6 et A7) sont en fait des broches purement ADC, donc des entrées, donc ça ne va pas le faire. La bonne nouvelle, c'est que j'avais laissé les broches d'à côté "en l'air" (et ce sont bien des sorties), donc je vais pouvoir repiquer 2 fils dessus et le problème sera réglé!
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : mar. 25 juil. 2023 12:02
par Bouz
Les PCB sont en France, on va bientôt savoir à quel point je me suis loupé

. En tout cas, niveau code, il commence à y avoir à peu près tout ce qu'il faut pour tester. J'ai ajouté:
- Une commande d'écriture dans le port
- Une commande de lecture du port (avec une file d'attente gérée par le microcontrôleur et alimentée par une interruption générée par le contrôleur de bus sur écriture par le 68000)
Et j'ai monté un environnement de dev 68000 sous VS Code (que je n'avais que très peu utilisé, et seulement pour du dev microcontrôleur). Du coup, on peut, en une seule commande:
- Compiler et linker de l'assembleur 68000 localisé sur la plage d'adresse de la ROM système
- Byteswapper (si nécessaire, à voir) le code produit
- Envoyer le code sur le BricoNeo pour qu'il soit lu par la NeoGeo.
Le flow d'enchaînement de commandes sous VS Code est étrangement lent, avec 500ms de délai entre chaque commande. Du coup, je me suis retourné vers un bon veux Makefile. Résultat: on réalise la compilation / link / envoi du fichier sur le BricoNeo en 10ms

.
J'ai longtemps hésité à câbler une broche de reset, pour piloter le reset de la NeoGeo quand j'envoie du code dedans. Je ne l'ai pas fait dans cette version, et je me tâte encore. Dans les faits, il y a de bonnes chances que le programme précédent plante et déclenche de watchdog, qui fait repartir la carte sur la nouvelle version du code

. Et surtout, je n'ai pas envie de souder un fil sur le slot (pour le moment).
A suivre à l'arrivée des cartes (et des composants).
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : mar. 25 juil. 2023 22:25
par Xrider
Salut,
Félicitations pour tout ces travaux innovants !
Des bug et des loupés, il y en aura, et c’est tout à fait normal !
Pour ta question sur le reset, effectivement il est très important de pouvoir le piloter
Impatient de voir le bébé en action !
Ne lache rien, c’est un super projet !
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : mer. 26 juil. 2023 17:14
par Kr4ken
Impatient de voir le résultat et les premiers tests !
Gros gros boulot bravo t’es un cyborg


Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : mer. 26 juil. 2023 18:25
par Bouz
Impatient aussi, merci de votre attention.
Pour la prochaine version du PCB, en plus des corrections, j'ai ajouté 2 lignes sur la nappe IDE pilotées par le microcontrôleur et protégées contre les surtensions. L'une servira pour une éventuelle ligne de reset, et l'autre, je ne sais pas encore

.
Re: [WIP 2%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : sam. 29 juil. 2023 18:38
par Bouz
Les PCB sont arrivés!
Plus qu'à attendre que moi, je rentre (lundi).
La suite très vite, alors!
Re: [WIP 15%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : dim. 30 juil. 2023 11:37
par Xrider
Vacances jusqu’à lundi ?
Si c’est le cas, profite bien

Re: [WIP 15%] Projet BricoNeo - Entrées et sorties via le connecteur de la ROM système
Posté : lun. 31 juil. 2023 22:25
par Bouz
Xrider a écrit : dim. 30 juil. 2023 11:37
Vacances jusqu’à lundi ?
Si c’est le cas, profite bien
Merci, je suis rentré chez moi, mais encore en congés pour le reste de la semaine.
J'ai reçu les PCB:
- ils sont magnifiques
- c'est petit
- j'ai mis le connecteur 39 broches sur la mauvaise face du PCB

.
Je dois recevoir des puces demain et j'attaque l'assemblage!