Перейти к содержанию

    

не могу разоброаться с nxpUSBlib

nxpUSBlib

 

Делаю CDC USB Host на процессоре lpc1766 использую библиотеку nxpUSBlib v0.98b.

Написал по аналогии с примерами с клавиатурой и флешкой для CDC host примера нет .

Проходит событие EVENT_USB_Host_DeviceEnumerationComplete в этом событии успешно выполняются следующие функции

USB_Host_GetDeviceConfigDescriptor

CDC_Host_ConfigurePipes

USB_Host_SetDeviceConfiguration

CDC_Host_SetLineEncoding

CDC_Host_SendControlLineStateChange

 

В основном цикле вызываю постоянно :

CDC_Host_USBTask(&CDC_InterfaceInfo1);

USB_USBTask();

 

 

Далее раз в какое-то время

 

Пытаюсь отправить данные на usb девайс

 

tmp_8=0x35;

tmp=CDC_Host_SendByte(&CDC_InterfaceInfo1 , tmp_8); в ответ не приходит сообщение об ошибке, т.е. вроди как всё отправляется. Но данные на USB девайс не приходят

 

USB девайс сделан на процессоре 1768 на базе примера из библиотеки, при подключении usb девайса к usb компа через терменалку туда данные посылаются и приходят.

 

Собственно вопрос в чём может быть проблема почему данные от моего хоста не приходят в девайс, и так и эдак смотрел, никаких сообщений об ошибки не приходит энумирация проходит девайс распознаются а данные не идут. Упарился уже искать причину.

 

P.S. пробовал просто скопировать весь текст файла с main из примера Host клавиатуры и Host флешки , и вставить его в свой проект , флешка и клавиатура работают на ура.

 

 

Вот проект под Keil, на разные файлообменники загрузил, может с какогото быстрее качается:

 

NXP_LPC_1766_2_.zip

 

NXP_LPC_1766_2_.zip

 

 

 

вот текст файла с main

 


/*
* Copyright© NXP Semiconductors, 2012
* All rights reserved.
*
* Software that is described herein is for illustrative purposes only
* which provides customers with programming information regarding the
* LPC products. This software is supplied "AS IS" without any warranties of
* any kind, and NXP Semiconductors and its licensor disclaim any and
* all warranties, express or implied, including all implied warranties of
* merchantability, fitness for a particular purpose and non-infringement of
* intellectual property rights. NXP Semiconductors assumes no responsibility
* or liability for the use of the software, conveys no license or rights under any
* patent, copyright, mask work right, or any other intellectual property rights in
* or to any products. NXP Semiconductors reserves the right to make changes
* in the software without notification. NXP Semiconductors also makes no
* representation or warranty that such application will be suitable for the
* specified use without further testing or modification.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation is hereby granted, under NXP Semiconductors' and its
* licensor's relevant copyrights in the software, without fee, provided that it
* is used in conjunction with NXP Semiconductors microcontrollers. This
* copyright, permission, and disclaimer notice must appear in all copies of
* this code.
*/


/** \file
*
* Main source file for the MassStorageHost demo. This file contains the main tasks of
* the demo and is responsible for the initial application hardware configuration.
*/

#include "MassStorageHost.h"
#include "CDCClassHost.h"
#include "KeyboardHost.h"

#include "LPC17xx.h"
#include "lpc17xx_gpio.h"
#include "lpc17xx_uart.h"
#include "lpc17xx_clkpwr.h"
#include "lpc17xx_pinsel.h"
#include "lpc_types.h"
#include "HIDClassHost.h"
#include "USB.h"

uint32_t j, j2;

volatile uint16_t tmp_16;
volatile uint8_t tmp_8, tmp;
volatile uint8_t tmp_8buf[10]= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

/* Macros: */
/** Endpoint number of the CDC device-to-host notification IN endpoint. */
#define CDC_NOTIFICATION_EPNUM 1

/** Endpoint number of the CDC device-to-host data IN endpoint. */
#define CDC_TX_EPNUM 2

/** Endpoint number of the CDC host-to-device data OUT endpoint. */
#if defined(__LPC17XX__)||defined(__LPC177X_8X__)
#define CDC_RX_EPNUM 5
#else
#define CDC_RX_EPNUM 3
#endif
/** Size in bytes of the CDC device-to-host notification IN endpoint. */
#define CDC_NOTIFICATION_EPSIZE 8

/** Size in bytes of the CDC data IN and OUT endpoints. */
#define CDC_TXRX_EPSIZE 16


USB_ClassInfo_CDC_Host_t CDC_InterfaceInfo1 =
{
.Config =
{


.DataINPipeNumber = CDC_TX_EPNUM,

.DataINPipeDoubleBank = false,

.DataOUTPipeNumber = CDC_RX_EPNUM,

.DataOUTPipeDoubleBank = false,

.NotificationPipeNumber = CDC_NOTIFICATION_EPNUM,

.NotificationPipeDoubleBank = false,

.PortNumber = 0,
},




};




int main(void)
{

SetupHardware();





///////////////////////////////////////////////////////////////////


GPIO_SetDir ( 0, 0x10, 1 ) ;
GPIO_ClearValue ( 0, 0x10 ) ;
GPIO_SetValue ( 0, 0x10 ) ;



GPIO_SetDir ( 1, 0x2000000, 1 ) ;
//GPIO_ClearValue ( 1, 0x2000000 ) ;
//GPIO_SetValue ( 1, 0x2000000 ) ;
GPIO_ClearValue ( 1, 0x2000000 ) ;

sei();
puts_P(PSTR("START__HOST !!!!!!\r\n"));

for (;;)
{

CDC_Host_USBTask(&CDC_InterfaceInfo1);
USB_USBTask();


j++;


if ((j>3000000)&& (USB_HostState[CDC_InterfaceInfo1.Config.PortNumber] == HOST_STATE_Configured))
{
j=0;
tmp_8=0x35;
tmp=CDC_Host_SendByte(&CDC_InterfaceInfo1 , tmp_8);



// CDC_Host_Flush(&CDC_InterfaceInfo1);

tmp= GPIO_ReadValue ( 0 ) ;
if ((tmp >> 4) & 1 )
GPIO_ClearValue ( 0, 0x10 ) ;
else
GPIO_SetValue ( 0, 0x10 ) ;

}




j2=0 ;
while( j2<10000 )
{

j2++ ;
j++;

}











while ( (CDC_Host_BytesReceived(&CDC_InterfaceInfo1)!=0) )
{
GPIO_SetDir ( 0, 0x10, 1 ) ;
GPIO_ClearValue ( 0, 0x10 ) ;


tmp=CDC_Host_ReceiveByte(&CDC_InterfaceInfo1) ;

}

}
}
//********************************************************************************
**************************************
/** Configures the board hardware and chip peripherals for the demo's functionality. */
void SetupHardware(void)
{
bsp_init();
SystemInit ();

Serial_Init(9600, false);//
LEDs_Init();
USB_Init();

/* Create a stdio stream for the serial port for stdin and stdout */
Serial_CreateStream(NULL);
}

/** Task to manage an enumerated USB Mass Storage device once connected, to print out
* data from the device.
*/



void EVENT_USB_Host_DeviceAttached(const uint8_t corenum)
{
printf_P(PSTR("Device Attached on port %d\r\n"),corenum);
// LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);


}

/** Event handler for the USB_DeviceUnattached event. This indicates that a device has been removed from the host, and
* stops the library USB task management process.
*/
void EVENT_USB_Host_DeviceUnattached(const uint8_t corenum)
{
printf_P(PSTR("\r\nDevice Unattached on port %d\r\n"),corenum);
// LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
}

/** Event handler for the USB_DeviceEnumerationComplete event. This indicates that a device has been successfully
* enumerated by the host and is now ready to be used by the application.
*/
//********************************************************************************
**********************
void EVENT_USB_Host_DeviceEnumerationComplete(const uint8_t corenum)
{

puts_P(PSTR("EVENT_USB_Host_DeviceEnumerationComplete \r\n"));

uint16_t ConfigDescriptorSize;
uint8_t ConfigDescriptorData[512];


if (USB_HostState[corenum] ==HOST_STATE_Addressed)
puts_P(PSTR("ADRESED \r\n"));

if (USB_Host_GetDeviceConfigDescriptor(corenum, 1, &ConfigDescriptorSize, ConfigDescriptorData,
sizeof(ConfigDescriptorData)) == HOST_GETCONFIG_Successful)
{

puts_P(PSTR("DESKRIPTOR_OK "));

}






tmp = CDC_Host_ConfigurePipes(&CDC_InterfaceInfo1,ConfigDescriptorSize, ConfigDescriptorData) ;

switch (tmp){
case CDC_ENUMERROR_NoError :


puts_P(PSTR(" CDC_ENUMERROR_NoError \r\n \r\n \r\n +++++++++++++++++++++++++ \r\n"));
break;
case CDC_ENUMERROR_InvalidConfigDescriptor: puts_P(PSTR(" CDC_ENUMERROR_InvalidConfigDescriptor\r\n"));
break;
case CDC_ENUMERROR_NoCompatibleInterfaceFound : puts_P(PSTR("CDC_ENUMERROR_NoCompatibleInterfaceFound \r\n"));
break;
case CDC_ENUMERROR_PipeConfigurationFailed: puts_P(PSTR(" CDC_ENUMERROR_PipeConfigurationFailed\r\n"));
break;
default: puts_P(PSTR("??? \r\n"));

break;
}




if (USB_Host_SetDeviceConfiguration(CDC_InterfaceInfo1.Config.PortNumber,1) != HOST_SENDCONTROL_Successful)
{
puts_P(PSTR("Error Setting Device Configuration.\r\n"));
// LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
return;
}
else
puts_P(PSTR("USB_Host_SetDeviceConfiguration +++ \r\n"));


if (CDC_Host_SetLineEncoding(&CDC_InterfaceInfo1)!=HOST_SENDCONTROL_Successful)

{
puts_P(PSTR("Error HOST_SET_line incoding \r\n"));
// LEDs_SetAllLEDs(LEDMASK_USB_ERROR);

return;
}


if (CDC_Host_SendControlLineStateChange(&CDC_InterfaceInfo1)!=0)

{
puts_P(PSTR("Error CDC_Host_SendControlLineStateChange \r\n"));
// LEDs_SetAllLEDs(LEDMASK_USB_ERROR);

return;
}




}
//********************************************************************************
*********************************************
/** Event handler for the USB_HostError event. This indicates that a hardware error occurred while in host mode. */
void EVENT_USB_Host_HostError(const uint8_t corenum, const uint8_t ErrorCode)
{
USB_Disable();

printf_P(PSTR(ESC_FG_RED "Host Mode Error\r\n"
" -- Error port %d\r\n"
" -- Error Code %d\r\n" ESC_FG_WHITE), corenum, ErrorCode);

// LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
for(;;);
}

/** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while
* enumerating an attached USB device.
*/
void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t corenum,
const uint8_t ErrorCode,
const uint8_t SubErrorCode)
{
printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n"
" -- Error port %d\r\n"
" -- Error Code %d\r\n"
" -- Sub Error Code %d\r\n"
" -- In State %d\r\n" ESC_FG_WHITE),
corenum, ErrorCode, SubErrorCode, USB_HostState[corenum]);

// LEDs_SetAllLEDs(LEDMASK_USB_ERROR);
}

 

 

 

Изменено пользователем Ruslan85

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

всё нашёл косяк

 

перед вызовом CDC_Host_SetLineEncoding

нужно было аот эту часть структуры проинициализировать

 

CDC_InterfaceInfo1.State.LineEncoding.BaudRateBPS = 9600;

CDC_InterfaceInfo1.State.LineEncoding.CharFormat = CDC_LINEENCODING_OneStopBit;

CDC_InterfaceInfo1.State.LineEncoding.ParityType = CDC_PARITY_None;

CDC_InterfaceInfo1.State.LineEncoding.DataBits = 8;

 

 

надо тонкости английского учить, в описании структуры этот кусок я понял как то что можно эти поля не инициализировать))

 

/**< State data for the USB class interface within the device. All elements in this section

* <b>may</b> be set to initial values, but may also be ignored to default to sane values when

* the interface is enumerated.

 

P.S. мб кому пригодится

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация