LusoRobótica - Robótica em Português
Electrónica => Electrónica Geral => Tópico iniciado por: msr em 11 de Junho de 2014, 17:48
-
Olá,
Alguem daqui já trabalhou com STM32 + lwIP?
Vou precisar de por um STM32F107 + LAN8710A a functionar com a lwIP.
Se houvesse aqui alguem que tenha passado pelo mesmo ou por experiencia identica era giro trocar umas ideias.
-
Boas,
Alguns STM32F107 têm USB OTG FS com PHY interno, e existem STM32F2/F3/F4 com
USB HS/FS e PHY interno.
O recurso a um PHY USB externo (LAN8710A) não se justifica a não ser se for para USB HS
com o STM32F107, mas mesmo assim mais vale optar por um STM32F2/F3/F4.
As minhas implementações usam o stack da Keil (MDK-Pro) pelo que nunca usei o lwIP, de
qualquer forma o principio é o mesmo.
Abraços,
PA
-
StarRider, é para Ethernet e não USB. E nesse caso nenhum STM32F1/F2/F4 tem PHY incluida daí o chip externo.
A escolha do F107 é por ser o mais barato e por ser perfeitamente suficiente para o que pretendo fazer.
Entretando mandei vir uma placa destas: https://www.olimex.com/Products/ARM/ST/STM32-P107/ (https://www.olimex.com/Products/ARM/ST/STM32-P107/)
Existe alguma documentação na net sobre ports da lwIP para os STM32F, mas o que eu gostava era mesmo de uma board com isto a funcionar out-of-the-box (e com o LNA8710A), visto que estou com algumas limitações de tempo. Os exemplos da Olimex são para IAR e demasiado básicos (uIP).
Um outro requisito que tenho é o desenvolvimento ser feito com toolchain baseada do GCC ARM.
-
Não usa o que pretendes mas se der para o que queres tens aí tudo pronto http://andybrown.me.uk/wk/2013/07/14/stm32plusnet/ (http://andybrown.me.uk/wk/2013/07/14/stm32plusnet/)
-
Obrigado pela sugestão. Ja tinha dado uma vista de olhos mas agora dei-lhe mais atenção.
Está ali bastante trabalho/conhecimento e parece-me bastante bem estruturado e completo. No entanto fui ver uns exemplos e os "new" e "deletes" causaram-me alguns arrepios. Parece que o autor usa C++ num STM32 sem grandes limitações e não gostei muito disso (memória dinâmica num MCU com poucos recursos). Mas se tiver tempo vou experimentar.
-
Consideraste o uso de um IC da WIZnet ?
-
Sim, essa foi a primeira opção. Se a opção de ter a stack TCP/IP embebida no mesmo mcu que usar se complicar provavelmente volto a ela. Mas estou confiante que não seja necessário.
-
StarRider, é para Ethernet e não USB. E nesse caso nenhum STM32F1/F2/F4 tem PHY incluida daí o chip externo.
Estás absolutamente correcto ... troquei o LNA8710A por um PHY de USB :-[ ... deve ser da
hora em que escrevi o post ... e das Super Bock ;)
Tenho um STM32F4 com o LNA8710A ... mas como disse com o stack da Keil (MDK-Pro),
deixa-me ir procurar esse projecto e já digo qualquer coisa.
Abraços,
PA
-
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fs4.postimg.org%2Ftfyqyojtp%2Fhabemushttp.png&hash=4437fa9f2b6a0b32d24a7f7f86b73ac337ca6eef)
Habemus TCP/IP + lwIP. E corre com o ChibiOS (http://www.chibios.org/dokuwiki/doku.php), que facilitou bastante a tarefa.
Quanto terminar a minha aplicação colocarei todo o código no github.
-
boa :) ando a ver se arranjo tempo para o chibios, dizem ser melhor que o freertos
-
Ainda não está como gostaria...
O exemplo que dei no meu post anterior (servidor HTTP) tem um problema:
Assim que o programa arranca no STM32 o Firefox demora muito tempo a carregar a página e acaba por dar "timeout". Se fizer refresh aparece a página. Faço uns quantos refresh seguidos e tudo OK. No entanto, se esperar algum tempo (~10 segundos) e voltar a fazer refresh o firefox volta a conseguir nao se ligar ao servidor. Espero algum tempo, volto a fazer novas tentativas de ligação (refresh) e volto a ter a página.
Resumindo: dificuldade em ligar-se ao servidor, quando consegue ligação fica estável por algum tempo até voltar ao mesmo.
Alguns detalhes:
- percebo pouco de "redes" (IPs, netmasks, dhcp, arp, etc)
- print do ipconfig: http://s27.postimg.org/w1qrbwo6b/ethernet.png (http://s27.postimg.org/w1qrbwo6b/ethernet.png)
- exemplo anterior defini os seguintes IP:
IP Adress: 169.254.232.150
Netmask: 255.255.0.0
Gateway: 192.168.1.255
O google diz-me que IPs do tipo "169.254.x.x" significam que algo está mal. No entanto, se mudar para o os seguintes, deixo de todo de me conseguir ligar ao servidor:
IP Address: 192.168.1.82
Netmask: 255.255.255.0
Alguem tem alguma ideia do que poderá estar a correr mal?
-
O que te posso aconcelhar é a instalares o wireshark e ver os pacotes que andam de um lado para o outro mas claro que sem se saber o que é suposto ser enviado pode não ajudar muito :s
Tu estas a ligar o stm32 ao pc? a um router/switch?
O "adaptador ethernet ligação de area local" é o que mesmo? é que a interface anterior "placa de rede..." parece ser a placa ethernet pela qual o PC está ligado a um router switch.
-
Tenho a placa ligada por ethernet ao meu desktop e o "adaptador ethernet ligação de area local" será então a placa de rede de ethernet que o meu desktop tem. É o que deduso. Não tenho acesso à internet por Ethernet mas sim por Wifi (não sei se isto é importante), e a "placa de rede..." que aparece antes deve corresponder ao módulo da Sitecom que uso. Esse sim, tem IPs decentes a começar por 192.168 (está ligado - sem fios - ao router/switch da MEO) mas se uso um IP nessa gama no STM32 não consigo de todo aceder ao server.
Tenho o Wireshark instalado. Usei isto numa cadeira ha uns anos (que acabei por nao concluir) e já só me lembro dos SYN/ACK do TCP.
Mas pondo-o a capturar o "adaptador ethernet ligação de area local" obtenho isto: http://we.tl/Rof4JNDmtD (http://we.tl/Rof4JNDmtD) (ficheiro .pcapng para abrir com o wireshark).
Resumindo:
A partir do momento que o browser consegue estabelecer a ligação, acontece tudo direitinho. O problema é que enquanto não se liga (podendo terminar em timeout, e após uns 10~20 segundos), não aparecem pacotes no wireshark. Fico sem saber o que se está a passar. Terá alguma coisa a ver com o IP ser do tipo 169.254.x.x?
-
Finalmente!
O problema estava mesmo no IP 169.254.x.x
Bastou definir um endereço estático para o meu "adaptador ethernet" do tipo 192.168.1.x e segundo isto: http://portforward.com/networking/static-win7.htm (http://portforward.com/networking/static-win7.htm)
E na placa uso também um IP desse tipo e agora sim não há problemas de ligação.
Obrigado pela ajuda metRo_
-
Eu perguntei onde tinhas ligados os dispositivos pois eles têm que estar na mesma gama de ips, isto é, se tens um dispositivo com o ip 192.168.1.1 e o netmask 255.255.255.0, o outro dispositivo pode ser algo entre 192.168.1.2 e 192.168.1.255.
Nem tinha reparado que uma das ligações era sem fios e outra etherenet, pensei que eram as duas ethernet. A partir do momento em que o ip do teu pc é 192.168.1.64 o stm32 tem que ter um ip na mesma gama: 192.168.1.xxx tendo atenção para não interferir com mais nenhum ip da rede.
-
Nice, já aprendi mais umas coisas sobre redes :)
Eu pensava que só tinha de estar na mesma gama do adaptador a que está ligado, que neste caso tinha um IP do tipo 169.254.x.x. Mas tem que estar tudo com 192.168.1.x que é a gama de IPs que o router usa.
Agora tenho um outro problema. Isto funciona ligando à porta ethernet do meu desktop, mas se ligar directamente ao router não chega a fazer o link (LINK DOWN para sempre).
Ainda não tive tempo de averiguar o que poderá estar a falhar. Assim por alto, alguma ideia do que possa ser?
Já me falaram na possibilidade do router não ser capaz de fazer auto-switch (não faço ideia o que é isso) ou poder ser problema do cabo (que é o mesmo que usei no desktop, por isso não deveria haver problema certo?).
-
Auto-switch que eu conheço é fazer o cruzamento dos pares Rx/Tx automaticamente/em hardware em vez de teres de fazer tu um cabo com as pontas trocadas, mas isso é comum já faz anos e anos.