This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

RM48 is a question about the emac driver.

HI,

RM48+ LWIP Use.

UDP multicast to RM48 now in development.

I've been a few tests, Unicast and Broadcast interrupt handler have a catch. but Multicast interrupt handler does not have a catch.

emac driver looked EMACRxBroadCastEnable, EMACRxUnicastSet to exist, Multicast does not exist.

Emac driver needed in the Multicast settings sir?


  • Hello Jaeho,

    I have forwarded your post to one of our experts.  They will respond back soon.

  • Hello John.

     

    Answers do not have one yet.

     

    How long do I have to wait?

  • Jaeho,

    Not an expert, but it looks like a little more work may be involved for Multicast.

    See http://e2e.ti.com/support/microcontrollers/stellaris_arm/f/471/t/155813.aspx

    The answer from Guarav Kumar has a link that takes you to some code for Stellaris;  however it looks like it is mostly at the level of the lwIP stack.

    Not sure if this is all you need to do but why not give it a try as a start.   If it gets you close then perhaps it'll narrow the problem down to something we can explain.

    Best Regards,

    Anthony

  • Hello Anthony.

    Thank you for your answer.

    I have already tried. You sent me the sample code.   I already  saw http://e2e.ti.com/support/microcontrollers/stellaris_arm/f/471/t/155813.aspx link.

    Create and bind the udp. I gave this set.   

    igmp_joingroup ((struct ip_addr *) & ipAddr, (struct ip_addr *) & mcast_ip);

    Then in Wireshark         5166      954.490692     192.168.1.105      234.5.6.9       IGMP        V2Membership Report / Join group 234.5.6.9     Confirmed the message.

    Join a multicast group has not been received communication data.

    Unlike unicast and broadcast, EMACCore0RxIsr Handler of multicast has not received altogether.

    Unicast and broadcast caught the interrupt handler.

    I looked at Emac driver.

    Emac driver is not in the multicast Registry Set.

    Multicast did not take an interrupt, I can not do debugging.

     

     

     

  • Hi Jaeho,

    Ok, that's good.  Would you please elaborate a bit more on what the issue you see with the EMAC driver is?
    Best thing too would be to send the code you are trying out along with the information on the problem.
    Sorry you're a lot ahead of me in ethernet understanding but I think we'll get it figured out.

    Best Regards,  Anthony

    P.S. If the code you are trying is not something you feel comfortable posting on the forum, you can send me a 'friend' request and then you can send it privately.

  • Hi Jaeho,

    Got your email.  If you send me your code too I will try it out too. 

    I think you're right that there is more stuff to do in the driver for the EMAC.

    Saw that you enabled Multicast by setting the RXMBPENABLE register for multicast and then picking a channel to route multicast packets to.

    There is some documentation in SPNU503A section 28.2.11 that I think covers this.

    It looks like you also need to set the MACHASH1 and MACHASH2 registers up to match the multicast address you want to listen to.  It's a hash, so it takes the 48 bits of the MAC address and hashes down to a single bit position.  You have to set that position in the HASH registers.   See Section 28.5.37 of the SPNU503A doc.

    In addition, you have to do things to set up the rx channel that you are sending the Multicast packets to.  These are outlined in 28.2.11.1;  things like setting up flow control if used, enabling the interrupt in the RXINTMASKSET register (I think the term mask is 'wrong' it should be 'ena' since you write 1 to enable...) ,  and setting up DMA if you're using it.

    Also it looks like you have to set the RXCHEnEN bit for the channel 'n' that you are sending the multicast packets to,  this is in the RXUNICASTSET register (described in Section 28.2.11.2.

    Hopefully that is enough to get the RXPEND bit set in the MACINTVECTOR register,  you may also then need to do something in the ISR to handle the pending interrupt from the channel 'n' that's getting the multicast, and ack/clear this flag with the MACEOIVECTOR.

    Just a guess from reading the manual,  I've not tried this before.  But I'd be happy to help debug if you send me the project.

    Thanks and Best Regards,

    Anthony