Become a leader in the IoT community!

New DevHeads get a 320-point leaderboard boost when joining the DevHeads IoT Integration Community. In addition to learning and advising, active community leaders are rewarded with community recognition and free tech stuff. Start your Legendary Collaboration now!

Step 1 of 5

CREATE YOUR PROFILE *Required

OR
Step 2 of 5

WHAT BRINGS YOU TO DEVHEADS? *Choose 1 or more

Collaboration & Work 🤝
Learn & Grow 📚
Contribute Experience & Expertise 🔧
Step 3 of 5

WHAT'S YOUR INTEREST OR EXPERTISE? *Choose 1 or more

Hardware & Design 💡
Embedded Software 💻
Edge Networking
Step 4 of 5

Personalize your profile

Step 5 of 5

Read & agree to our COMMUNITY RULES

  1. We want this server to be a welcoming space! Treat everyone with respect. Absolutely no harassment, witch hunting, sexism, racism, or hate speech will be tolerated.
  2. If you see something against the rules or something that makes you feel unsafe, let staff know by messaging @admin in the "support-tickets" tab in the Live DevChat menu.
  3. No age-restricted, obscene or NSFW content. This includes text, images, or links featuring nudity, sex, hard violence, or other graphically disturbing content.
  4. No spam. This includes DMing fellow members.
  5. You must be over the age of 18 years old to participate in our community.
  6. Our community uses Answer Overflow to index content on the web. By posting in this channel your messages will be indexed on the worldwide web to help others find answers.
  7. You agree to our Terms of Service (https://www.devheads.io/terms-of-service/) and Privacy Policy (https://www.devheads.io/privacy-policy)
By clicking "Finish", you have read and agreed to the our Terms of Service and Privacy Policy.

How to Resolve No Buffer Space Errors in CAN Communication With MCP2515?

I was previously working on a *distributed robotic control system* where multiple robotic arms communicate via *CAN Bus* to coordinate their movements. Each arm operates independently, but they share data like position, load, and speed in real-time using the AVR128DA48 microcontroller and the MCP2515 CAN controller. The idea is for each robot to adjust its movement based on data from the others, ensuring smooth, synchronized operation.

I’ve set up the MC with the MCP2515, using Zephyr OS to manage the CAN communication. The CAN initialization seems successful: the CAN bus is set up with a 500 kbps baud rate, filters are configured to allow messages between the robotic nodes, and the SPI interface between the AVR and MCP2515 is working fine. I’ve confirmed this by monitoring the SPI communication on the scope.

The issue comes when I try to receive messages from other robotic arms. The `can_add_rx_filter()` function is supposed to catch incoming CAN messages, but it always fails with the error code `-ENOBUFS` (No Buffer Space Available). Even though I am certain the messages are being broadcasted from the other nodes, my node doesn’t seem to capture or process them. I’ve tested the wiring and termination, and all other hardware connections look good.

I keep hitting the following log error when I attempt to add the receive filter:

[00:00:01.002]  Failed to add filter: -ENOBUFS

This tells me there’s an issue with the buffer allocation for receiving messages, but I’m not sure why this is happening. I’ve checked my memory allocation settings and even tried reducing the number of active filters, but the issue persists.

Ideally, I expect the `can_add_rx_filter()` function to set up a filter that listens for CAN messages with a specific ID (in this case, `0x200`). Once the filter is added, the `can_recv()` function should capture the incoming message, allowing me to process it and adjust the robotic arm’s behavior based on data from the other arms.

  1. heidi.tech#0
  2. Dark AI#0000

    Hi @destynin The issue likely stems from an insufficient number of message buffers. Increase the maximum number of CAN filters by adjusting the `CONFIG_CAN_MAX_FILTER` setting in the Zephyr configuration (`prj.conf`)

  3. Dark AI#0000

    Also, try modifying `can_add_rx_filter()` to include a valid callback function for processing messages asynchronously.

  4. Dark AI#0000

    and then, ensure there is enough heap memory for the CAN filter buffer. You might need to increase `CONFIG_MAIN_STACK_SIZE` or adjust heap sizes. hope these help.

  5. Dtynin#0000

    alright @darkai042 thanks, I’ll try out your guides and will get back to you on my progress.

  6. Dtynin#0000

    @darkai042 Hey buddy, thanks I tried it out, and also ensured that the buffer and filter allocation matches my system’s needs.👍🏽

CONTRIBUTE TO THIS THREAD

Leaderboard

RANKED BY XP

All time
  • 1.
    Avatar
    @Nayel115
    1620 XP
  • 2.
    Avatar
    @UcGee
    650 XP
  • 3.
    Avatar
    @melta101
    600 XP
  • 4.
    Avatar
    @lifegochi
    250 XP
  • 5.
    Avatar
    @Youuce
    180 XP
  • 6.
    Avatar
    @hemalchevli
    170 XP