1

Bonjour à tous,

Suite à une discussion sur la shoutbox et sur le conseil de Folco je me permets de créer ce topic car j'aurais besoin d'aide sur un projet.
Mon objectif est de fabriquer un programmateur parallèle à base de Raspberry Pi 2.

La mémoire que je souhaite programmer est la MX29F1615 (16M-BIT [2M x8/1M x16] CMOS SINGLE VOLTAGE FLASH EEPROM ) de Macronix.
http://www.alldatasheet.fr/datasheet-pdf/pdf/74486/MCNIX/MX29F1615.html
Cette mémoire a l'avantage d'avoir un format DIP qui est facile à souder ainsi qu'une bonne capacité tout en étant 5V et reprogrammable sans UV.

J'ai conçu un schéma avec Kicad ainsi qu'un premier prototype.
Voici mon schéma
http://sega4ever.power-heberg.com/tutodedev/Pi%20Project/Sch%c3%a9ma%20programmateur.pdf

Voici comment ça fonctionne :

Une nappe IDE fait la liaison entre les GPIO du Raspberry Pi 2 et ma carte custom.
Le Raspberry Pï 2 possède 24 GPIO 3.3V que j'ai réparti de cette manière:
- 16 I/O sont directement affectées aux datas et sont envoyées vers un level shifter Bi-directionnel le TXB0108 puis vers la mémoire
- Les 5 premières adresses ( A0 - A4) ainsi que les 3 pins de contrôle ( CE , OE et Byte) sont envoyées vers un level shifter 74HC245 puis vers la mémoire
-Les autres adresses ( A5 - A20) sont générées par un MCP23017 à l'aide de la liaison I²C du Raspberry Pi.

Pour pouvoir programmer cette mémoire j'ai également besoin d'une tension de 10V ( VHH) celle ci est générée par un Step DC ( le LT1301) qui peut produire du 12V ou du 5V en fonction de l'état ( 5V ou GND) d'une entrée ( j'utilise / BYTE en sortie du 74HC ) puis une résistance pour réduire 12V en 10V et renvoyer ça sur la pins VPP de la mémoire.

voici mon prototype ( aujourd'hui le LT1301 est soudé)
mx%20prog.JPG

J'arrive à piloter toutes les I/O et j'ai bien les tensions que je souhaite au niveau de la mémoire , c'est après que ça se corse sad

mon code est basé sur la librairie WiringPi qui permet de commander les I/O du Raspberry Pi facilement et qui supporte également le MCP23017.
Cependant je n'arrive pas à récupérer le silicon ID de la mémoire et je ne sais pas vraiment où se situe le problème.

Voici les fonctions simples que j'ai écrit ( Attention ça pique grin )
http://pastebin.com/Hz6QJHEj

et ma fonction main
#include <wiringPi.h>
#include <mcp23017.h>
 
#include "UC_Prog.h"
#include "MX29F1615.h"
 
int main (void)
{
    // Init Wiring Pi
 
    wiringPiSetup () ;
 
    // Init MCP23017
 
    mcp23017Setup(100,0x20); //100 base adress pin
 
    //Setup Memory
 
    Clean_IO();
    Init_Memory();
    SetFlashBYTE(0);
    SetFlashOE(0);
    SetFlashCE(0);
 
//Reset Chip
WriteFlashByte(0x5555,0xAA);
WriteFlashByte(0x2AAA,0x55);
WriteFlashByte(0x5555,0xF0);
 
//Silicon ID Read
WriteFlashByte(0x5555,0xAA);
WriteFlashByte(0x2AAA,0x55);
WriteFlashByte(0x5555,0x90);
 
id=ReadFlash(0);
printf("bus value is %02x \n",id);
 
return 0 ;
}

Ce code me retourne 0x90 qui est la dernière valeur du bus du data au lieu de récupérer 0xC2...

Vu que j'arrive à piloter correctement mes I/O je ne pense pas que le problème vienne de mon prototype ou d'une erreur de câblage.

-Il peut venir du code
-ou alors d'un problème de timing ?

La bibliothèque Wiring Pi permet de tester les temps d’exécution des fonctions et voici ce que j'ai relevé:

-L’exécution de la fonction Digital Write pour les adresses A0 - A4 prends en moyenne 1 ou 2 µs
-L’exécution de la fonction Digital Write pour les pins de data prends en moyenne 2 ou 3 µs
-L’exécution de la fonction Digital Write pour les pins d'adresses multiplexer prends en moyenne 30 à 60 µs par pin

En lisant la datasheet de la MX29F1615 en page 19 j'ai tBALC Word Address Load Cycle qui doit être compris entre 0.3 et 30µs.
De ce que je comprends cette valeur correspond au temps maximum admissible entre un changement d'états de la pin /CE de 1 à 0
Mais d'après mon code les adresses sont préparées sur le bus avant le changement d'état de OE et CE et mes pins de contrôle ne sont pas multiplexées ( justement pour qu'elles soient pilotées rapidement) donc je ne sais pas si c'est critique ?

Voila d'avance merci à ceux qui auront pris le temps de lire mon pavé smile
Toute aide ou conseil seront grandement appréciés!

2

vérifie tes fonctions d’écriture et de lecture, en regardant rapidement, les états des OE envoyés à la flash ne me semblent pas correct.
par exemple :
[code=cpp] void WriteFlashByte(unsigned long address , unsigned char val) { SetAddress (address); // delayMicroseconds(1); SetData_OUTPUT(); //rasp data activé en sortie DirectWrite8(val); SetFlashCE(0); SetFlashOE(0); // flash data activé en sortie => conflit de bus //delayMicroseconds(1); SetFlashCE(1); SetFlashOE(1); SetData_Input(); //delayMicroseconds(1); } [/code]
avatar

3

Je me permets de déterrer ce topic car il réellement similaire à ce que je dois faire actuellement. embarrassed
avatar

4

Mon sujet consiste à créer une carte interface custom qui pourra se pluger sur une Carte CI existante comprenant : Sorties TTL et différentiel, Shift register, 26LS31 et 26LS32, buffer.... Cette carte CI enregistre des informations sur une E²PROM AT28C010M. Sur la carte interface, je pensais uniquement placer une LED de fonctionnement, un 26LS31(TTL -> Différentiel) et 26LS32(Différentiel --> TTL) car la carte CI communique en liaison série (style 422), ainsi qu'un Raspberry Pi 3B ou 2B grâce à ses GPIO. Au niveau des I/O à piloter : - 2 entrées type différentiel (Horloge1 + et Horloge1- ainsi que Horloge2+ et Horloge2 -) ; - 2 autres entrées type diff. (Adresse + et Adresse - ainsi que Données_Entrée+ et Données_Entrée -) ; - 7 entrées type 0/5V ; l'alim 5V et GND ; -2 sorties en diff. (Données1+ et Données1- ainsi que Données2+ et Données2-).
Le moyen de lecture de prom de cette carte est actuellement obsolète et non adapté c'est pourquoi je dois j'ai réaliser des procédures à coder pour réaliser les fonctions suivantes:
°Lecture d'une page
°Lecture de l'ensemble de la PROM
°Lecture d'une donnée
°Ecriture d'une Prom
°Ecriture d'une donnée
°Lire les constantes d'une page

Au niveau hard je ne vois pas quoi rajouter

Merci beaucoup d'avoir pris le temps de me lire,

Thomas.
avatar

5

Je m' interroge sur l'utlisation d'un MCP23017 ceci me simplifierai la tâche par rapport à l'utilisation de l'UART du Raspeberry non ?
avatar

6

Pourquoi ? Si j'ai bien lu, il y a déjà assez d'entrées/sorties sur le Raspberry Pi pour les connecter directement, non ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

7

Je vais re détailler mon sujet !

Je dois créer un système avec une Raspberry capable de lire et écrire sur une E²PROM qui est montée sur une vieille carte. Sur cette vieille carte existante, on enregistrait diverses infos mai on était incapable de lire une page d’adresse ou d'écrire par dessus. Sur cette carte existante : - 4 HC163 cascadés permettent de sélectionner une adresse sur la PROM (de Adresse0 à Adresse13) - 1 HC299 récupérant les données ( de Données0 à Données7) - 1 HTC 244 récupére des discrets ( Ecriture_PROM, Lecture_PROM, Selection_PROM, Page1_PROM, Page2_PROM et Page3_PROM).

Au niveau communication cette carte reçoit des signaux d'entrées d'horloge différentiel (style 422) qui sont convertit en TTL avec 26LS31 (Horloge1 + et Horloge1- ainsi que Horloge2+ et Horloge2 -), des signaux de sorties TTl qui sont convertis en différentiel avec 26LS32 (Données1+ et Données1- ainsi que Données2+ et Données2-) comme expliqué sur un post précedent.

Et actuellement je dois créer une carte custom ou je dois m'interfacer avec la carte existante. Je dois utiliser un Raspberry pour piloter les I/O et créer des fonctions de lecture_PROM, ecriture_PROM, sélectionner la page de la PROM...

C'est pourquoi le fait de retrouver ce sujet de 2015 était une aubaine pour moi, je partirai de moins loin.
avatar

8

Regardes ce que Atarigamer a fait pour les cartouches lynx, son code est opensource il me semble...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

9

Es que tu aurai le lien de ce post ? Je ne le retrouve pas sur le forum
avatar

10

il n'est pas sur yaronet

Lynx Cart Programmer Pi-Hat | Atari Gameratarigamer.comThe Lynx Cart Programmer Pi-Hat is an add-on board for a Raspberry Pi 2 (and later) that lets you read and write your own Atari Lynx cartridges. It can be thought of as a cartridge ripper and flasher, but its main intended purpose is to give homebrew developers and easy way to produce games on cartridge with ease.
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

11

Je te remercie, je regarde ça
avatar