J'ai une conception utilisant un LPC1788 avec un module SDRAM d'ISSI ( IS42S32800D ). Il s'agit d'une interface 32 bits.
J'ai acheminé cette conception et ai fait fabriquer un prototype avec un fabricant de PCB qui fait des prototypes à 6 couches. Le prototype du PCB fonctionne bien. J'ai alors pensé que je ferais fabriquer le PCB en un petit lot (100) chez mon fournisseur habituel de PCB. Je leur ai donné les informations de pile que mon prototype a utilisées pour m'assurer qu'il n'y aurait aucun problème.
Pourtant! J'ai d'énormes problèmes avec la carte de production. Au début, je n'ai pas pu susciter de réponse de la part de la SDRAM avec le même code que celui utilisé dans ma carte prototype. Le conseil précédent fonctionnait à 120 MHz, donc j'étais sûr que quelque chose n'allait pas avec ce nouveau conseil. J'ai ensuite trouvé un article où les gens ont suggéré d'utiliser le mode répéteur sur les lignes de données SDRAM (je ne l'avais pas utilisé auparavant) et cela a déclenché une réponse de la SDRAM, mais ce n'est pas stable. Je peux écrire à environ 16 adresses, mais avec les lectures suivantes, les données retournées (à chaque adresse) sont les données que j'ai écrites en dernier (probablement en raison du mode répéteur). Lorsque je désactive le mode répéteur, les données renvoyées sont 0xFFFFFFF. J'essaye maintenant de me connecter à 48Mhz, la configuration la plus basse pour laquelle j'ai des timings.
J'utilise les mêmes résistances de terminaison (sur les lignes de données) de 22 Ohms sur les deux cartes, les lignes de données mesurent en moyenne 3 cm de long. La ligne d'horloge mesure 2,4 cm de long. Les lignes d'adresse mesurent en moyenne 3,8 cm de long.
Est-ce trop hors spécifications, devrais-je retarder l'horloge plus longtemps si elle est sensiblement plus courte? Je suis vraiment coincé ici, car je n'ai rien changé à la conception que j'espérais pour une fabrication sans couture pour ces planches.
Maximum Data Line Length: 59mm (Although this includes the branch to the NAND Flash)
Minimum Data Line Length (Ctrl to Res): 18mm
Maximum Address Line Length: 44mm
Minimum Address Line Length: 24mm
CLK: 24.5mm
CKE: 25mm
CAS: 28mm
RAS: 28.7mm
Voici la configuration de la pile PCB pour le prototype original (fonctionnel):
Voici la configuration de la pile de PCB pour les PCB de production (non fonctionnels)
Voici le routage de la SDRAM:
Réponses:
C'est une mauvaise pile. Vos noyaux doivent être de 0,2 mm et le reste de votre épaisseur doit être dans le préimprégné entre les couches 3 et 4 (Inner 1 et Inner 2).
La raison en est que, pour tout signal sur une trace, il doit y avoir un chemin de courant de retour sur le plan juste en dessous. Le courant de retour dans l'avion tentera de minimiser l'inductance (c'est-à-dire la zone de boucle), ce qui signifie qu'il tentera de suivre sous la trace du signal. Si la trace du signal est éloignée de l'avion, il cherchera d'autres traces pour trouver un chemin de retour. C'est l'électromagnétisme que vous combattez.
De plus, en ayant des couches internes à des distances différentes de leurs plans de référence (rappelez-vous, tous les rails d'alimentation ressemblent à des sols en courant alternatif!) Par rapport aux distances des couches externes, vous créez un changement d'impédance chaque fois que vous échangez des couches (bien que cela puisse être contrecarré avec les changements de largeur de trace, même si j'ai trouvé que cela ne valait la peine qu'une seule fois), et vous augmentez considérablement le potentiel de diaphonie et d'autres interférences.
Une autre chose que vous devez vérifier est le matériel utilisé: il y a plus de 20 matériaux différents qui s'appellent par exemple "FR-4". Le truc que j'utilise habituellement s'appelle 370-HR. Il se comporte assez bien avec des signaux haute vitesse 100-500 MHz.
En ce qui concerne la ligne d'horloge, IIRC sur ma dernière conception SDRAM, j'ai configuré l'horloge pour que son bord se produise en dernier (sa trace était la plus longue de 1 cm), après que toutes les lignes d'adresse et de données se soient stabilisées. Donc, oui, retarder l'horloge vaut la peine d'essayer. Je n'avais pas besoin de contrôle d'impédance sur les lignes SDRAM.
Vos résistances de terminaison doivent être placées aussi près que possible des pilotes de ligne. S'ils ne sont pas à moins d'environ 0,5 cm, ils peuvent provoquer eux-mêmes des reflets, entraînant un dépassement et une sonnerie. À mon humble avis, la longueur de trace de 3 cm est terriblement courte pour avoir besoin de résistances de terminaison (je les utilise à partir d'environ 6-10 cm); avez-vous essayé de les retirer?
Une autre chose à vérifier, ce sont vos avions: avez-vous des traces de signaux traversant des coupures d'avion? C'est un énorme non-non, car il oblige le courant de retour à emprunter un long chemin autour de la coupure.
Enfin, le taux de bord est un énorme problème dans ces conceptions. Beaucoup de puces ont des temps de montée et de descente inutilement courts, et la réduction de la fréquence d'horloge n'a aucun effet sur cela. Ces bords rapides sont parfaits pour créer des reflets. C'est ce que vos résistances de terminaison de 22 ohms tentent de résoudre: elles ralentissent les bords. Cependant, si vous le poussez vraiment, un outil comme HyperLynx de Mentor Graphics peut être utilisé pour trouver la conception de terminaison optimale.
Quelques livres que je peux vous recommander qui couvrent tout cela et bien plus encore, et nous ne jurons que par eux au travail:
Ces livres couvrent la réduction EMI, la conception de blindage, l'empilement de PCB, le contrôle d'impédance, le découplage d'alimentation et bien plus encore. En outre, M. Ott enseigne des séminaires sur ce sujet (livré avec une copie gratuite de son livre).
la source
À ce type de fréquence, je pense que les problèmes de type de longueur de piste ne sont probablement pas un problème majeur, certainement pour les problèmes de retard. Comme les problèmes ont commencé avec un nouveau PCB, la toute première chose à faire serait de tester la continuité de toutes les lignes (par rapport à la fiche technique, pas à votre schéma, au cas où votre schéma présente des erreurs), et d'envisager chaque broche pour vérifier que les formes d'onde sont à le moins plausible - même si votre portée n'est pas à la hauteur des détails de synchronisation, il devrait être assez évident s'il y a des broches ouvertes ou court-circuitées.
Faire ce genre de choses sans une portée adéquate est semé de dangers potentiels - comment savez-vous quelle marge vous avez? Même si cela fonctionne, comment savoir si vous êtes sur le bord ou non et vulnérable aux pannes de champ / production dues aux tolérances, à la température ou à la phase de la lune?
la source
2e ajout Nous avons supposé que votre conception avait été testée sur les marges et que le code était parfait dans vos questions. (non) je vous suggère de vérifier les points suivants;
Utilisez-vous des boucles for / next ou un code discret tel que;
Je me souviens avoir débogué ma première conception CMOS d'un étudiant de troisième cycle en physique pour un enregistrement portable sismique, une carte logique de minuterie commutable. Il n'y avait pas de firmware ni d'uC mais il n'a jamais fait d'analyse de tolérance dans le pire des cas et le matériel avait des conditions de course partout quand une douzaine de cartes supplémentaires ont été construites et déboguées par moi-même. Le professeur sismique a amené le chef du département de physique pour demander pourquoi je ne pouvais pas faire le débogage des cartes, puis je devais lui conseiller que la variation des composants exposait de nombreux défauts de conception appelés conditions de course de synchronisation en raison des conditions métastables et du bord d'horloge utilisé. Il ne comprenait toujours pas, alors je lui ai demandé de me dire combien de doigts j'ai déplié pendant que je levais la main avant qu'elle n'atteigne ma taille de bas en haut. Puis il a dit, vous ne pouvez pas faire ça et vous attendre à une réponse correcte. Dis-je précisément. C'est une condition de course primitive. Ils deviennent moins évidents avec plus de niveaux de complexité. U du Manitoba 1973.
1er ajout: Quel schéma de terminaison de bus avez-vous utilisé? la méthode (1) est préférée, est-ce que 1.25Vdc est propre?
La constante diélectrique sur les panneaux et # de couches de pré-imprégné contrôle l'impédance de la stripline et du microruban ainsi que la largeur et l'écart des traces.
Il existe de nombreuses calculatrices Z en ligne gratuites pour stripline.
Vous pouvez essayer de mesurer la capacité sur de grandes pistes ou des plans de masse et comparer les deux cartes nues.
Regardez également les signaux avec une portée à grande vitesse et observez le dépassement et l'horloge <> modèle d'oeil de données.
Il doit y avoir une explication simple pour les erreurs, mais ce n'est pas facile à trouver. Mais une fois que vous avez trouvé la cause profonde ... vous ne ferez plus cette erreur.
ajouté: Une autre erreur que j'ai trouvée est que votre diagramme de hauteur de pile n'indique pas l'épaisseur de la couche de Cu et qu'il n'y en a pas assez pour tenir dans 6 couches, sauf si c'est faux ou que l'épaisseur de Cu est de 0,039 mm (NON;)
la source