Error adding custom board

I’m testing the custom board feature following the docs:

http://docs.platformio.org/en/latest/platforms/creating_board.html

  • Create boards folder in `~/.platformio’
  • create my_own_board.json with example json:
{
    "myboard": {
        "build": {},
        "frameworks": ["%LIST_WITH_SUPPORTED_FRAMEWORKS%"],
        "name": "My test board",
        "platform": "%PLATFORM_TYPE_HERE%",
        "upload": {},
        "url": "http://example.com",
        "vendor": "My Company Ltd."
    }
}

When I run platformio boards I get the following error:

platformio boards

Platform: %PLATFORM_TYPE_HERE%
----------------------------------------------------------------------------------------------------------------
Type                  MCU            Frequency  Flash   RAM    Name
----------------------------------------------------------------------------------------------------------------
Error: Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/platformio/__main__.py", line 107, in main
    cli(None, None, None)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 700, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 680, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 1027, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 873, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 508, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/platformio/commands/boards.py", line 78, in cli
    type=click.style(type_, fg="cyan"), mcu=data['build']['mcu'],
KeyError: 'mcu'

Is this a bug / error in the docs or am I missing something? I’m running 2.9.4 on a raspi3 with python 2.7.9. Also tested on Ubuntu with python 2.7.10. Same error.

Hi @glynhudson

No, this is not a bug, all of these fields should be filled, for example, config for a board based on atmega328p:

{
    "my_mega_uno": {
        "build": {
            "core": "arduino",
            "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_AVR_MY_BOARD",
            "f_cpu": "16000000L",
            "mcu": "atmega328p",
            "variant": "standard"
        },
        "frameworks": ["arduino"],
        "name": "My board name",
        "platform": "atmelavr",
        "upload": {
            "maximum_ram_size": 2048,
            "maximum_size": 32256,
            "protocol": "arduino",
            "require_upload_port" : true,
            "speed": 115200
        },
        "url": "http://www.example.com",
        "vendor": "My company"
    }
}

You can find a lot of examples here.

Thanks for your help.

I’ve just tried the exact config file you posted above added in:

~/.platformio/boards/test.json

and I still get error :frowning: :

Error: Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/platformio/__main__.py", line 107, in main
    cli(None, None, None)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 700, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 680, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 1027, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 873, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 508, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/platformio/commands/boards.py", line 35, in cli
    for type_, data in get_boards().items():
  File "/usr/local/lib/python2.7/dist-packages/platformio/util.py", line 394, in get_boards
    boards = _lookup_boards()
  File "/usr/local/lib/python2.7/dist-packages/platformio/util.py", line 103, in __call__
    value = self.func(*args)
  File "/usr/local/lib/python2.7/dist-packages/platformio/util.py", line 389, in _lookup_boards
    boards.update(load_json(join(bdir, json_file)))
  File "/usr/local/lib/python2.7/dist-packages/platformio/util.py", line 129, in load_json
    return json.load(f)
  File "/usr/lib/python2.7/json/__init__.py", line 290, in load
    **kw)
  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 369, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 10 - line 22 column 1 (char 9 - 634)

Sorry, there was an extra comma, I updated my comment above.

I’m very sorry, even without the comma I still get error. Slightly different this time:

Error: Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/platformio/__main__.py", line 107, in main
    cli(None, None, None)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 700, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 680, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 1027, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 873, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 508, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/platformio/commands/boards.py", line 36, in cli
    if data['platform'] not in grpboards:
TypeError: list indices must be integers, not str

============================================================

Oops, sorry, the field platform was missed, please try this one:

{
    "my_board": {
        "build": {
            "core": "arduino",
            "extra_flags": "-DARDUINO_ARCH_AVR -DARDUINO_AVR_MY_BOARD",
            "f_cpu": "16000000L",
            "mcu": "atmega328p",
            "variant": "standard"
        },
        "frameworks": ["arduino"],
        "name": "My board name",
        "platform": "atmelavr",
        "upload": {
            "maximum_ram_size": 2048,
            "maximum_size": 32256,
            "protocol": "arduino",
            "require_upload_port" : true,
            "speed": 115200
        },
        "url": "http://www.example.com",
        "vendor": "My company"
    }
}
1 Like

Yah! Thanks a lot :tada:

It would probably be a good idea to update the example on the documentation page to be a full working example. The Json formatting sees quite picky

http://docs.platformio.org/en/latest/platforms/creating_board.html

Keep up the good work, love patformio. I’ve just donated.

Bountysource :slight_smile:

1 Like