Re: Re: STM32F4 Discovery + LwIP

Jerzy Dyrda <[email protected]>
Newsgroups gmane.os.ecos.general
Message-ID <CABmKEG-b13drbHwKMzHETVMO0x1ta4zSttMLkto-RX7Da6U+Jw@mail.gmail.com>
Hello Valentin,


On Tuesday 25 of March 2014 10:04:07 John Dallaway wrote:

> On 25/03/14 08:26, Valentin BOUSSON wrote:

>

> > Today, I have a problem to set up *LwIP* on my *STM32F4DISCOVERY* with

> > the standard extension board.

> > (http://www.st.com/web/catalog/tools/FM146/CL1984/SC720/SS1462/PF255417)

> >

> > I tried a lot of thing, as using the default configuration for eCos,

> > adding packages "Ethernet common drivers" and "LwIP stack". No confilct

> > appears, but an the stack doesn't seem to work at all.

>

> At minimum, you will need to add the CYGPKG_DEVS_ETH_PHY and

> CYGPKG_DEVS_ETH_CORTEXM_STM32 hardware packages to the

> "stm32f4discovery" target description record in packages/ecos.db.

> Actually, it would be preferable to create a new target description

> record for STM32F4-Discovery with STM32F4DIS-EXT.

>

> You might also be necessary to modify the the hal_system_init() function

> in the STM32F4-Discovery platform HAL to setup the ethernet hardware.

> Compare with the hal_system_init() function from the STM32x0G platform HAL.

>

> With these changes in place, you should be able to create a new eCos

> configuration for lwIP based on the eCos "lwip_eth" packages template.


And you have to add some pins configuration due to fact that
STM32F4DISCOVERY board

doesn't any network interface.


In packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_io.h
please add such lines:


//=============================================================================

// Custom Ethernet pin mappings


#define CYGHWR_HAL_STM32_ETH_MII_TX_EN CYGHWR_HAL_STM32_PIN_ALTFN_OUT(
B, 11, 11, PUSHPULL, NONE, AT_LEAST(50) )

#define CYGHWR_HAL_STM32_ETH_MII_TXD0 CYGHWR_HAL_STM32_PIN_ALTFN_OUT(
B, 12, 11, PUSHPULL, NONE, AT_LEAST(50) )

#define CYGHWR_HAL_STM32_ETH_MII_TXD1 CYGHWR_HAL_STM32_PIN_ALTFN_OUT(
B, 13, 11, PUSHPULL, NONE, AT_LEAST(50) )


In packages/devs/eth/phy/current/cdl/phy_eth_drivers.cdl add missing PHY chip:


cdl_option CYGHWR_DEVS_ETH_PHY_LAN8720A {

display "SMSC LAN8720A"

flavor bool

default_value 0

compile -library=libextras.a LAN8720A.c

description "

Include support for SMSC LAN8720A"

}


and finally add new PHY i.e LAN8720A.c into directory ->
packages/devs/eth/phy/current/src


if you will have additional problems please ask I have already brought
up network interface on

STM32F4DISCOVERY + DM-STF4BB (AFAIK this is original name of base
board from Embest, now

as I see it's called STM32F4DIS-BB).



Best regards,

jerzy

2014-03-25 13:30 GMT+01:00 Jerzy Dyrda <[email protected]>:
> Hello Valentin,
>
>
> On Tuesday 25 of March 2014 10:04:07 John Dallaway wrote:
>
>> On 25/03/14 08:26, Valentin BOUSSON wrote:
>
>>
>
>> > Today, I have a problem to set up *LwIP* on my *STM32F4DISCOVERY* with
>
>> > the standard extension board.
>
>> > (http://www.st.com/web/catalog/tools/FM146/CL1984/SC720/SS1462/PF255417)
>
>> >
>
>> > I tried a lot of thing, as using the default configuration for eCos,
>
>> > adding packages "Ethernet common drivers" and "LwIP stack". No confilct
>
>> > appears, but an the stack doesn't seem to work at all.
>
>>
>
>> At minimum, you will need to add the CYGPKG_DEVS_ETH_PHY and
>
>> CYGPKG_DEVS_ETH_CORTEXM_STM32 hardware packages to the
>
>> "stm32f4discovery" target description record in packages/ecos.db.
>
>> Actually, it would be preferable to create a new target description
>
>> record for STM32F4-Discovery with STM32F4DIS-EXT.
>
>>
>
>> You might also be necessary to modify the the hal_system_init() function
>
>> in the STM32F4-Discovery platform HAL to setup the ethernet hardware.
>
>> Compare with the hal_system_init() function from the STM32x0G platform
>> HAL.
>
>>
>
>> With these changes in place, you should be able to create a new eCos
>
>> configuration for lwIP based on the eCos "lwip_eth" packages template.
>
>
> And you have to add some pins configuration due to fact that
> STM32F4DISCOVERY board
>
> doesn't any network interface.
>
>
> In packages/hal/cortexm/stm32/stm32f4discovery/current/include/plf_io.h
> please add such lines:
>
>
> //=============================================================================
>
> // Custom Ethernet pin mappings
>
>
> #define CYGHWR_HAL_STM32_ETH_MII_TX_EN CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B,
> 11, 11, PUSHPULL, NONE, AT_LEAST(50) )
>
> #define CYGHWR_HAL_STM32_ETH_MII_TXD0 CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 12,
> 11, PUSHPULL, NONE, AT_LEAST(50) )
>
> #define CYGHWR_HAL_STM32_ETH_MII_TXD1 CYGHWR_HAL_STM32_PIN_ALTFN_OUT( B, 13,
> 11, PUSHPULL, NONE, AT_LEAST(50) )
>
>
> In packages/devs/eth/phy/current/cdl/phy_eth_drivers.cdl add missing PHY
> chip:
>
>
> cdl_option CYGHWR_DEVS_ETH_PHY_LAN8720A {
>
> display "SMSC LAN8720A"
>
> flavor bool
>
> default_value 0
>
> compile -library=libextras.a LAN8720A.c
>
> description "
>
> Include support for SMSC LAN8720A"
>
> }
>
>
> and finally add new PHY i.e LAN8720A.c into directory ->
> packages/devs/eth/phy/current/src
>
>
> if you will have additional problems please ask I have already brought up
> network interface on
>
> STM32F4DISCOVERY + DM-STF4BB (AFAIK this is original name of base board from
> Embest, now
>
> as I see it's called STM32F4DIS-BB).
>
>
>
> Best regards,
>
> jerzy
>
>
>
> 2014-03-25 11:04 GMT+01:00 John Dallaway <[email protected]>:
>
>> Hi Valentin
>>
>> On 25/03/14 08:26, Valentin BOUSSON wrote:
>>
>> > Today, I have a problem to set up *LwIP* on my *STM32F4DISCOVERY* with
>> > the standard extension board.
>> > (http://www.st.com/web/catalog/tools/FM146/CL1984/SC720/SS1462/PF255417)
>> >
>> > I tried a lot of thing, as using the default configuration for eCos,
>> > adding packages "Ethernet common drivers" and "LwIP stack". No confilct
>> > appears, but an the stack doesn't seem to work at all.
>>
>> At minimum, you will need to add the CYGPKG_DEVS_ETH_PHY and
>> CYGPKG_DEVS_ETH_CORTEXM_STM32 hardware packages to the
>> "stm32f4discovery" target description record in packages/ecos.db.
>> Actually, it would be preferable to create a new target description
>> record for STM32F4-Discovery with STM32F4DIS-EXT.
>>
>> You might also be necessary to modify the the hal_system_init() function
>> in the STM32F4-Discovery platform HAL to setup the ethernet hardware.
>> Compare with the hal_system_init() function from the STM32x0G platform
>> HAL.
>>
>> With these changes in place, you should be able to create a new eCos
>> configuration for lwIP based on the eCos "lwip_eth" packages template.
>>
>> I hope this helps...
>>
>> John Dallaway
>> eCos maintainer
>> http://www.dallaway.org.uk/john
>>
>> --
>> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
>> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
>>
>

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
LAN8720A.c (text/x-csrc, 4.2 KB)
//==========================================================================
//
//      dev/LAN8270A.c
//
//      Ethernet transciever (PHY) support 
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 2003 Gary Thomas
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s):    jerzdy
// Contributors:
// Date:         2013-11-18
// Purpose:
// Description:  Support for ethernet SMSC LAN8720A
//
//
//####DESCRIPTIONEND####
//
//==========================================================================

#include <pkgconf/system.h>
#include <cyg/infra/cyg_type.h>
#include <cyg/infra/diag.h>

#include <cyg/hal/hal_arch.h>
#include <cyg/hal/drv_api.h>
#include <cyg/hal/hal_if.h>
#include <cyg/hal/hal_tables.h>

#include <cyg/io/eth_phy.h>
#include <cyg/io/eth_phy_dev.h>

static bool lan8720a_stat(eth_phy_access_t *f, int *state)
{
    unsigned short phy_state=0;
    int tries=0;

    // Read negotiated state
    if (_eth_phy_read(f, 0x1, f->phy_addr, &phy_state)) {
        if ((phy_state & PHY_BMSR_AUTO_NEG) == 0) {
            eth_phy_printf("... waiting for auto-negotiation (30 x 0,2sec):");
            for (tries = 0;  tries < 30;  tries++) {
                if (_eth_phy_read(f, 0x1, f->phy_addr, &phy_state)) {
                    if ((phy_state & PHY_BMSR_AUTO_NEG) != 0) {
                        break;
                    }
                }
                CYGACC_CALL_IF_DELAY_US(200000);   // 0.2 second
                diag_printf(".");
            }
            eth_phy_printf("\n");
        }

        if ((phy_state & PHY_BMSR_AUTO_NEG) != 0) {
            *state = 0;
            if (_eth_phy_read(f, 0x1, f->phy_addr, &phy_state)) {
                if ((phy_state & PHY_BMSR_LINK) != 0) *state |= ETH_PHY_STAT_LINK;
            }
            if (_eth_phy_read(f, 0x5, f->phy_addr, &phy_state)) {
                // Partner negotiated parameters
                if ((phy_state & 0x0100) != 0) *state |= ETH_PHY_STAT_100MB | ETH_PHY_STAT_FDX;
                if ((phy_state & 0x0080) != 0) *state |= ETH_PHY_STAT_100MB;
#ifdef ETH_PHY_STAT_10MB
                if ((phy_state & 0x0040) != 0) *state |= ETH_PHY_STAT_10MB | ETH_PHY_STAT_FDX;
                if ((phy_state & 0x0020) != 0) *state |= ETH_PHY_STAT_10MB;
#endif
                // _eth_phy_read(f, 17, f->phy_addr, &phy_state);
                // CYGACC_CALL_IF_DELAY_US(1000000);   // 0.1 second
                return true;
            }
        }
    }
    return false;
}


_eth_phy_dev("SMCS LAN8720A", 0x0007C0F1, lan8720a_stat)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.