USBX em modo Host (usando a porta USBHS)

USBX em modo Host (usando a porta USBHS) 2017-07-26T13:50:56-03:00

Home Fóruns Criando Dispositivos Mais Inteligentes com Renesas Synergy USBX em modo Host (usando a porta USBHS)

Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • dfandrade94dfandrade94
    Participante
    Número de postagens: 11

    @felipet

    Olá Felipe.

    Sem problema. Obrigado pelo retorno.

    Seguindo sua sugestão, criei esse novo tópico para evitar que esse assunto fique espalhado em outro tópico mais geral.

    Os outros posts sobre esse assunto estão no tópico Primeiros passos com o Renesas Synergy, nos posts: #5508 e #5560 e #5984.

    E para fazer um resumo do problema que estou tendo, preciso integrar uma interface USB na placa da Renesas S7G2 para poder comunicar com equipamentos de campo (transmissores de temperatura, pressão, densidade, etc) da área de controle de processos.

    Essa interface USB possui drivers para sistemas operacionais como Windows e Linux, e ela funciona normalmente conectada a um PC rodando Windows e um aplicativo específico para comunicar com os equipamentos de campo.

    Essa interface é alimentada pela própria porta USB do PC, por isso preciso usar a porta USBHS da placa SKG2 com o pino de alimentação habilitado.

    Todos os exemplos da placa S7G2 atuando como USB device (usando a porta USBFS) conectada no meu PC (rodando Windows 10) funcionam bem.

    O único exemplo que encontrei onde a placa S7G2 atua como USB host é o do projeto USBX™ Host Class Mass Storage Module Guide – Application Project.

    Esse exemplo também funcionou bem para mim, mas ele é específico para devices do tipo “mass storage”.

    Quando conecto a interface USB na placa S7G2 rodando esse projeto, a função usb_host_plug_event_notification (em usb_thread_entry.c) não é chamada como no caso de se conectar um pendrive.

    Debugando o código, consigo achar que a função de interrupção usbhs_usb_int_resume_isr (em usb_irq_veneer.c) é chamada quando conecto a interface USB, mas não consigo ir muito adiante pois é chamada uma parte do código que não tenho acesso.

    Pelo que entendi, como esse projeto usa a classe “mass storage” é natural que ele não identifica a interface USB. Mas quando construo um projeto do zero, criando uma thread do tipo X-Ware->USBX->Host->Classes->CDC-ACM->USBX Host Class CDC-ACM, eu acabo tento esse problema na inicialização onde aparece um erro de timeout (SSP_ERR_TIMEOUT) quando a função “g_sf_comms0.p_api->open” é chamada. Já fiz vários testes, como inicializar a placa S7G2 com a interface conectada, mudando algumas prioridades das threads, etc, mas nada está resolvendo.

    Ou seja, preciso de uma comunicação serial com essa interface USB através da porta USBHS da placa S7G2, mas não encontro um projeto similar para seguir e não sei se o projeto que estou criando está correto. Também não sei se está faltando algum conceito para mim sobre a comunicação serial pela USB com esse tipo de interface que quero usar.

    Mas uma vez obrigado pelo suporte,

    Daniel.

    FelipeT Tfelipet
    Mestre
    Número de postagens: 46

    Olá @dfandrade94,

    Segue um link para um exemplo que utiliza duas threads com CDC-ACM Host na porta USBHS comunicando CDC-ACM Device na USBFS na SK-S7G2. Deverá, de maneira simplificada, servir como orientação para sua solicitação.

    Contudo o projeto foi desenvolvido utilizando utilizando o seguinte ferramental extra:

    1 – Primeiramente instale a Toolchain da IAR (download através da galeria: https://synergygallery.renesas.com/addon/detail/25)

    2 – Em seguida, no e² studio 5.4, instale o plugin correspondente (instalável a partir de Help -> IAR Plugin Manager -> ARM (7.20)) **** A instalação do IAR EWSYN 7.5 deverá estar detectada e visível na tabela “Available IAR Embedded Workbench installations”

    OBS: Requer o SSP v1.2.0.

    Link para o projeto a ser importado no e² studio: https://renesasrulz.com/synergy/m/mediagallery/3250

    Você será capaz de visualizar uma mensagem transmitida pelo host para o device através da variável buffer na thread com_device_thread_entry().

    Boa sorte,


    @felipet

    FelipeT Tfelipet
    Mestre
    Número de postagens: 46

    Olá @dfandrade94,

    Adicionado um projeto correspondente, portado para a Toolchain GCC Embedded ARM 2015q3.

    Link: https://renesasrulz.com/synergy/m/mediagallery/3251

    Boa sorte,


    @felipet

    dfandrade94dfandrade94
    Participante
    Número de postagens: 11

    @felipet

    Olá Felipe.

    Muito obrigado pelas informações e pelos exemplos.

    Instalei a toolchain do IAR e depois o plugin no e2 studio. Importei e compilei o projeto relacionado ao iarewsyn75 e esse exemplo funcionou direitinho. Para confirmar se a comunicação estava correta, mudei alguns bytes do buffer a ser enviado pela porta USBHS para a porta USBFS, e o buffer de recepção refletiu corretamente os bytes modificados.

    O exemplo que você enviou essa manhã, portado para a toolchain GCC, também funcionou corretamente.

    Mas nos dois casos, ao conectar a interface USB, a função ux_system_host_cdc_acm_change_function (em com_Thread_entry.c) não está sendo chamada.

    Verifiquei se a função usbhs_usb_int_resume_isr (em usb_irq_veneer.c) estava sendo chamada. Tanto no caso dos exemplos (porta USBHS conectada na USBFS) quanto no caso da interface, essa função de interrupção foi chamada e também foi chamada a função ux_hcd_synergy_interrupt_handler (em ux_hcd_synergy_interrupt_handler.c). Estou debugando agora alguns pontos de _ux_utility_semaphore_get, depois que _ux_utility_semaphore_put(&_ux_system_host -> ux_system_host_hcd_semaphore) é chamada. Estou tentando achar algum ponto onde a interface é “descartada”.

    Só para dar um pouco mais de detalhes sobre a interface USB que estou tentando usar, ela usa o CI FT232r da FTDI Chip que é um chip bem popular para conversão USB/serial, mas não sei no stack USBX ele tem algum comportamento especial.

    Grato pelo suporte,

    Daniel.

    leo_renesasleo_renesas
    Mestre
    Número de postagens: 5

    @dfandrade os CIs USB-Serial da FTDI não usam o CDC-ACM. Eles implementam uma classe específica para seus conversores. O Synergy não tem um driver para esta classe da FTDI.

Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Você deve fazer login para responder a este tópico.