FTDI 2232 H Mini Module SPI convertisseur USB vers Horloge problème

R

RAMA

Guest
Salut

Donc, je suis en train d'envoyer des données du bus SPI (à partir de PIC MCU) à l'USB.J'ai été en utilisant le protocole MPSSE et a été capable de le faire.

Le problème que je suis confronté est que pour exécuter le programme avec succès, nous devons redémarrer le MCU PIC.La raison derrière cela est que dès que le programme est exécuté, le CLK va à élevé, alors que dans l'opération, il commence à partir de bas.Donc, chaque fois que le programme commence le MCU qui est suivi en permanence les interprète mal intialisation.

Aussi i cant trouver la commande pour faire fonctionner des haut lieu d'aller à peu au début.

J'utilise MPSSE.ftd2xx.h, lib à opérer sur le FTDI.

Merci d'avance.

 
HI

Regardez la DS MCU PIC pour le SPI mis en place des registres qu'elle doit avoir une horloge ou d'inversion de bits de donnéesTous les meilleurs

Bobi
Le spécialiste de microcontrôleur
 
Salut

Mais le problème est avec la puce FTDI et son mode horloge.I cant semblent pour le rendre à partir de haut dans l'opération trop ..cette façon, il wont go à basse et MCU-t-il mal interprété.

Désolé, je ne comprends pas comment le registre inversion bits va aider.

Merci

 
Je dois dire qu'il est (proche?) Impossible de comprendre ce que vous dites.

Je dirais que vous mettez en place votre code, dites-nous ce que vous attendez à dire et ce que vous dites.

nous aider afin que nous puissions vous aider.

 
Je m'excuse si je ne suis pas en mesure de me faire comprendre.

Le problème, c'est l'idéal ou l'état libre de l'horloge est élevée (/ w FTDI b et MCU). Mais dès que je intialise mon programme de l'horloge va immédiatement à la basse et commence alors la cycle.Here horloge est le code pour 2232h FTDI puce.J'essaie de intialise MPSSE et recevez 6 octets (son semblable à il AN_135 note d'application).

Tout ce que je veux, c'est de ne pas arrêter MCU tout le temps, si je cesse de la puce FTDI.

/ *
Pour construire vous devez inclure ftd2xx.dll, ftd2xx.lib, ftd2xx.h dans votre répertoire source.
* /

# Include "stdafx.h"
# Include <windows.h>
# Include <stdio.h>
# Include "ftd2xx.h"

init_usb FT_STATUS (ftHandle FT_HANDLE);
init_mpsse FT_STATUS (ftHandle FT_HANDLE);

write_start FT_STATUS (ftHandle FT_HANDLE, int len);
WRITE_DATA FT_STATUS (ftHandle FT_HANDLE, unsigned char * buff, len DWORD, DWORD * wLen);
write_stop FT_STATUS (ftHandle FT_HANDLE);

read_data FT_STATUS (ftHandle FT_HANDLE, unsigned char * buff, len DWORD, DWORD * wLen);

int main (int argc, char * argv [])
(
ftStatus FT_STATUS;
FT_HANDLE ftHandle;
Len DWORD;
wLen DWORD;
unsigned char buff [20 2];

int i;

ftStatus = FT_Open (0, & ftHandle);
if (ftStatus! = FT_OK)
printf ("FT_Open Port A échoué \ n");

printf ("Init USB et MPSSE \ n");
= Init_usb ftStatus (ftHandle);# If 1
ftStatus = init_mpsse (ftHandle);

strcpy ((char *) & [buff 0], "Bonjour tout le monde!"); / / String à la production sur le SDO
printf ("Donnez votre Data \ n");
len = strlen ("Bonjour le monde");

ftStatus = write_start (ftHandle, len);
for (i = 0; i <2; i )
(
ftStatus = WRITE_DATA (ftHandle, chamois, len, & wLen);
/ / Sleep (1);
)
ftStatus = write_stop (ftHandle);

/ / Sommeil (2);
# endif

# If 1
printf ("Init MPSSE \ n");
ftStatus = init_mpsse (ftHandle);
printf ("Lire \ n");
len = 5;
ftStatus = read_data (ftHandle, chamois, len, & wLen);
printf ("Pas octets lus% \ n" d, (int) wLen);

for (i = 0; i <wLen; i )
printf ("0x% x", buff );
printf ("\ n");
# endif

ftStatus = FT_SetBitMode (ftHandle, 0x00, 0x00);
ftStatus = FT_Purge (ftHandle, FT_PURGE_TX | FT_PURGE_RX);
= FT_ResetDevice ftStatus (ftHandle);

FT_Close (ftHandle);

return 0;
)init_usb FT_STATUS (ftHandle FT_HANDLE)
(
ftStatus FT_STATUS;
eh PFT_EVENT_HANDLER;
DWORD InOutTransferSize = 64 * 1024;
unsigned char event_error = 0x00;

/ * Reset Device et USB Purge buffers * /
= FT_ResetDevice ftStatus (ftHandle);

/ * Tampon USB Set à 64 K * /
ftStatus = FT_SetUSBParameters (ftHandle, InOutTransferSize, InOutTransferSize);
if (ftStatus! = FT_OK)
printf ("Échec de l'installation USB \ n");

ftStatus = FT_Purge (ftHandle, FT_PURGE_TX | FT_PURGE_RX);

ftStatus = FT_SetEventNotification (ftHandle, 0, (PVOID) & EH);
if (ftStatus! = FT_OK)
printf ("Set Event Notification échoué \ n");

ftStatus = FT_SetChars (ftHandle, event_error, 0, event_error, 0);
if (ftStatus! = FT_OK)
printf ("Set Chars échoué \ n");

/ * Set délais d'attente * /
ftStatus = FT_SetTimeouts (ftHandle, 0, 5000);
if (ftStatus! = FT_OK)
printf ("set timeout a échoué \ n");

ftStatus = FT_SetLatencyTimer (ftHandle, 16);
if (ftStatus! = FT_OK)
printf ("Le temps de latence Délai d'attente a échoué \ n");

ftStatus = FT_Purge (ftHandle, FT_PURGE_TX | FT_PURGE_RX);
if (ftStatus! = FT_OK)
printf ("Buffers Purge échoué \ n");

/ / Usleep (100000);

retour (ftStatus);
)init_mpsse FT_STATUS (ftHandle FT_HANDLE)
(
ftStatus FT_STATUS;
wBytes DWORD;
Nbytes DWORD;
unsigned char mpsee_cmd [16];

/ * * Reset Mode MPSEE /
ftStatus = FT_SetBitMode (ftHandle, 0x00, 0x00);

/ * Mode * MPSEE Set /
ftStatus = FT_SetBitMode (ftHandle, 0x00, 0x02);
if (ftStatus! = FT_OK) (
printf ("Impossible de définir MPSEE \ n" mode);
)

/ * Set 8 Faible Itinéraire Pins et de sortie * /
mpsee_cmd [0] = 0x80;
mpsee_cmd [1] = 0x00; / / valeur par défaut est 0x00
mpsee_cmd [2] = 0xEB;
Nbytes = 3;
ftStatus = FT_Write (ftHandle, mpsee_cmd, Nbytes, & wBytes);
if (ftStatus! = FT_OK)
printf ("Le faible Pins échoué \ n");

/ * Set 4 haut Itinéraire Pins et de sortie * /
mpsee_cmd [0] = 0x82;
mpsee_cmd [1] = 0x00;
mpsee_cmd [2] = 0x0F;
Nbytes = 3;
ftStatus = FT_Write (ftHandle, mpsee_cmd, Nbytes, & wBytes);
if (ftStatus! = FT_OK)
printf ("Le Haut Pins échoué \ n");

/ * L'horloge à 1,5 Mhz * /
mpsee_cmd [0] = 0x86;
mpsee_cmd [1] = 0x03; / / valeur par défaut est 0x03
mpsee_cmd [2] = 0x02;
Nbytes = 3;
ftStatus = FT_Write (ftHandle, mpsee_cmd, Nbytes, & wBytes);
if (ftStatus! = FT_OK)
printf ("Set Clock échoué \ n");

/ * * Boucle Débranchez l /
mpsee_cmd [0] = 0x85;
Nbytes = 1;
ftStatus = FT_Write (ftHandle, mpsee_cmd, Nbytes, & wBytes);
if (ftStatus! = FT_OK)
printf ("Le bouclage a échoué \ n");
/ / Usleep (100000);

retour (ftStatus);
)write_start FT_STATUS (ftHandle FT_HANDLE, int len)
(
ftStatus FT_STATUS;
wBytes DWORD;
unsigned char mpsee_cmd [8];

/ * Set 8 Faible Itinéraire Pins et de sortie * /
mpsee_cmd [0] = 0x80; / / Set bits de données Octet de poids faible; par défaut est 0x80
mpsee_cmd [1] = 0x00; / / valeur initiale assignée à épingles; par défaut est 0x00
mpsee_cmd [2] = 0xFB; / / Détermine les broches sont entrée ou de sortie.
/ / 0xFB cartes à 1111 1011 (AD7-ad0)

mpsee_cmd [3] = 0x11; / / 0x11 octets horloges sur la baisse (-ve) de bord (par défaut)
mpsee_cmd [4] = (unsigned char) (((len - 1) & 0xff00)>>

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Frais" border="0" />

;
mpsee_cmd [5] = (unsigned char) ((len - 1) & 0x00ff);

ftStatus = FT_Write (ftHandle, mpsee_cmd, 6, & wBytes);

retour (ftStatus);
)

write_stop FT_STATUS (ftHandle FT_HANDLE)
(
ftStatus FT_STATUS;
wBytes DWORD;
unsigned char mpsee_cmd [8];

/ * Set 8 Faible Itinéraire Pins et de sortie * /
mpsee_cmd [0] = 0x80;
mpsee_cmd [1] = 0xFF; / / valeur par défaut est 0xFF
mpsee_cmd [2] = 0xFB;

ftStatus = FT_Write (ftHandle, mpsee_cmd, 3, & wBytes);

retour (ftStatus);
)

WRITE_DATA FT_STATUS (ftHandle FT_HANDLE, unsigned char * buff, len DWORD, DWORD * wLen)
(
ftStatus FT_STATUS;

ftStatus = FT_Write (ftHandle, chamois, len, wLen);

retour (ftStatus);
)read_data FT_STATUS (ftHandle FT_HANDLE, unsigned char * buff, len DWORD, DWORD * wLen)
(
ftStatus FT_STATUS;
unsigned char mpsee_cmd [16];
wBytes DWORD;
int i;

/ * Set 8 Faible Itinéraire Pins et de sortie * /
mpsee_cmd [0] = 0x80;
mpsee_cmd [1] = 0x00; / / valeur par défaut est 0x00
mpsee_cmd [2] = 0xFB;

ftStatus = FT_Write (ftHandle, mpsee_cmd, 3, & wBytes);
if (ftStatus! = FT_OK)
printf ("Le faible Pins échoué \ n");

* WLen = 0;

# If 1
for (i = 0; i <len; i )
(
/ * Lecture du dispositif sans écrire * /
mpsee_cmd [0] = 0x20;
mpsee_cmd [1] = 0;
mpsee_cmd [2] = 0;

ftStatus = FT_Write (ftHandle, mpsee_cmd, 3, & wBytes);
if (ftStatus! = FT_OK)
printf ("Lire du périphérique n'a pas pu \ n");

/ / Usleep (20000);
/ * Déplacer les données vers le tampon * /
mpsee_cmd [0] = 0x87;
ftStatus = FT_Write (ftHandle, mpsee_cmd, 1, & wBytes);
if (ftStatus! = FT_OK)
printf ("Échec du déplacement des données \ n");
)
# Else

/ * Lecture du dispositif sans écrire * /
mpsee_cmd [0] = 0x20;
mpsee_cmd [1] = (unsigned char) ((len - 1) & 0x00ff);
mpsee_cmd [2] = (unsigned char) (((len - 1) & 0xff00)>>

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Frais" border="0" />

;

ftStatus = FT_Write (ftHandle, mpsee_cmd, 3, & wBytes);
if (ftStatus! = FT_OK)
printf ("Lire du périphérique n'a pas pu \ n");

/ * Déplacer les données vers le tampon * /
mpsee_cmd [0] = 0x87;
ftStatus = FT_Write (ftHandle, mpsee_cmd, 1, & wBytes);
if (ftStatus! = FT_OK)
printf ("Échec du déplacement des données \ n");
# endif

/ * Lecture des données du tampon USB * /
ftStatus = FT_GetQueueStatus (ftHandle, wLen);
printf ("% d wLen =" \ n ", (int) wLen *);

if (* wLen> 0)
ftStatus = FT_Read (ftHandle, chamois, wLen *, & wBytes);

if (ftStatus! = FT_OK)
printf ("Échec de la lecture \ n");

retour (ftStatus);
)Merci

 
Avez-vous remarqué les bonnes données vont à la puce?

 

Welcome to EDABoard.com

Sponsor

Back
Top