USB CDC et un esclave

G

grindylow

Guest
Bonjour, j'ai été joué avec 18F4550 comme un périphérique USB utilisant un firmware modifié la CDC.J'ai récemment eu besoin d'avoir un autre 18F4550 être contrôlé comme un dispositif esclave.Le problème est lorsque je envoyer des données à l'esclave, le maître raccroche (le gel statut blinkusb).Je interfacé à l'aide USART ensuite changé à un logiciel puis UART I2C et le même scénario se poursuit.Avant cela, j'ai réussi à l'interface d'un capteur qui sorties de données en série, je l'ai fait en utilisant un logiciel UART (juste Rx est utilisé).Maintenant, je l'utilise en interface SPI et il ne gèle plus, mais l'esclave ne fait toujours pas de données.Quelqu'un peut-il me donner un coup de main à ce sujet?Je suis vraiment bloqué sur cette ..

voici mon code maître, et c'est au sein de l'processio () fonction:
Code:

if (getsUSBUSART (USB_Out_Buffer, 4))

(

received_data0 = USB_Out_Buffer [0];

received_data1 = USB_Out_Buffer [1];switch (received_data0)

(

case 'T':

USB_In_Buffer [0] = 'X';

if (état de mUSBUSARTIsTxTrfReady ())

(

putUSBUSART (USB_In_Buffer, 1);

)

break;

case 'q':

mLED_3_Off ();

break;

case 'Q':

mLED_3_On ();

break;

case '':

mLED_4_Off ();

break;

case 'W':

mLED_4_On ();

break;

case '*':

servo = 'a';

break;

default: break;

)

)if (servo == 'a')

(

OpenSPI (SPI_FOSC_4, MODE_11, SMPMID);

PORTCbits.RC2 = 0;

Delay10TCYx (5);

WriteSPI (received_data1);

Delay10TCYx (5);

PORTCbits.RC2 = 1;

CloseSPI ();

servo=0x00;
)
 
Vous ne savez pas ce que vous voulez.Essayez-vous d'utiliser un 18F4550 comme un maître USB?

 
Quote:

Vous ne savez pas ce que vous voulez.
Essayez-vous d'utiliser un 18F4550 comme un maître USB?
 
mmmm pourquoi ne vous ouvrez et fermez votre SPI tout le temps?, vous devez ouvrir votre SPI fois au cours de l'initialisation, et U peut changer en cours d'exécution ...mais les ouvertures et fermetures?encore ...Pourquoi n'attendez-vous pas au finnois SPI ????( communication dans SPI maître ..) ne WriteSPI fonction attend jusqu'à ce que toutes les données est envoye???Je ne crois pas, s'il vous plaît vérifiez que ...

 
Je ne suis pas sûr de comprendre ce que vous faites, le 18F4550 ne peut pas être un hôte USB seulement un esclave.

 
Kurenai_ryu a écrit:

mmmm pourquoi ne vous ouvrez et fermez votre SPI tout le temps?, vous devez ouvrir votre SPI fois au cours de l'initialisation, et U peut changer en cours d'exécution ...
mais les ouvertures et fermetures?
encore ...
Pourquoi n'attendez-vous pas au finnois SPI ????( communication dans SPI maître ..) ne WriteSPI fonction attend jusqu'à ce que toutes les données est envoye???
Je ne crois pas, s'il vous plaît vérifiez que ...
 
J'ai ça a marché!Merci Kurenai_ryu!Votre suggestion définitivement faite.J'ai cessé d'ouverture et de fermeture de la SPI tous les temps, et a augmenté le délai.Je ne saurais oublier ces étoffes simples à partir de maintenant.Voici le code modifié:
Master:
Code:

void UserInit (void)

(

mInitAllLEDs ();

mInitSensor ();

TRISCbits.TRISC2 = 0;

PORTCbits.RC2 = 1;

OpenSPI (SPI_FOSC_4, MODE_11, SMPMID);

)if (servo == 'a')

(

PORTCbits.RC2 = 0;

Delay10TCYx (5);

WriteSPI (received_data1);

Delay10TCYx (50);

PORTCbits.RC2 = 1;

servo = 0x00;

)
 

Welcome to EDABoard.com

Sponsor

Back
Top