-
• #2
take targetlibs_nrf5x_11.tgz from https://github.com/fanoush/ds-d6/tree/master/espruino and extract in espruino root folder via tar zxvf filename
-
• #4
Well, it is pretty old file, let's wait for @yngv126399 to check whether it still works. I haven't used it for quite some time too. If it still works it can be zipped and put there. However it is patched a bit already.
-
• #5
Just tried and there is some minor breakage but with some tweaking it works.
One issue is that
nrf_gpio_pin_port_decode
is mostly ifdef-ed forNRF_SD_BLE_API_VERSION>5
https://github.com/search?q=repo%3Aespruino/Espruino%20nrf_gpio_pin_port_decode&type=code
except for one place
https://github.com/espruino/Espruino/blob/e5617094e3480ada254d7771ad70f73b923a951a/targets/nrf5x/jshardware.c#L1680
Since this method appears to be defined in Espruino version of SDK12, it works. So not sure if the ifdef could be removed elsewhere or added in this one new place.Adding I2C slave support broke SDK11 too. SDK11 version of drivers throws error when i2c slave is not enabled
targetlibs/nrf5x_11/components/drivers_nrf/twis_slave/nrf_drv_twis.c:19:2: error: # error "TWIS driver included but none of TWIS devices is activated in the configuration file"
Can be patched out in the driver file by changing #error into #warning and adding #else/#endif around all the code definitions that followAlso the change of including i2c/spi/serial code only if their count in board file is >0 broke SDK11. However I wonder why it works even for other SDKs than 12 as the code handling SPI/I2C/USART _COUNT here https://github.com/espruino/Espruino/blob/e5617094e3480ada254d7771ad70f73b923a951a/targets/nrf5x/app_config.h#L126 is inside a big block of other definitions all used only for SDK12 https://github.com/espruino/Espruino/blob/e5617094e3480ada254d7771ad70f73b923a951a/targets/nrf5x/app_config.h#L65 (??) so for 532840/SDK15 this is not evaluated(?)
Quick workaround for me was adding
DEFINES+=-DTWI_ENABLED=1'
to board file but maybe those ifdef SPI/I2C/USART _COUNT>0 parts can be moved out of SDK12=only ifdef. I think I tried to configure out some of those on some 52840/SDK15 watches, not sure how it worked, will check. -
• #8
which should fix things.
Thanks! It did fix all errors and now it builds fine for me out of box.
I made a build for E104-BT5032A board (as it has SWD available to recover) with SDK11 softdevice/bootloader and flashed it over DFU and it works :-)
I can connect WebIDE to it over bluetooth and basic stuff works, it is running S132 2.0.1 (= ID 0x88)>process.env ={ VERSION: "2v18.566", GIT_COMMIT: "770e47fd9", BOARD: "E104BT5032A", RAM: 65536, FLASH: 524288, STORAGE: 81920, SERIAL: "cd728763-9f160e6b", CONSOLE: "Bluetooth", MODULES: "Flash,Storage,heatshrink", EXPTR: 318612 } >peek16(0x300c).toString(16) ="88"
@yngv126399 looks like it is moderately safe to try some watch :-)
-
• #9
If you want we can set it up like we do for the other SDKs (apart from 12) so we have a zip on EspruinBuildTools that the provision script pulls in?
In current state the file works as is so I could possibly make it into a zip an make a PR.
However there is no bootloader source to easily integrate and compile so only DFU zips would be buildable. However I just tried and the
adafruit-nrfutil
pip package conflicts withnrfutil
. When installed it basically overwrites newer nrfutil with older nordic libraries so both commands run old legacy version, how to solve that? Sometime ago I solved it by installingnrfutil
in python2 andadafruit-nrfutil
in python3 but nowadays python2 is really old so not sure how provision script could properly install both without any breakage. -
• #10
I could possibly make it into a zip an make a PR.
That would be great! Ideally we'd do it like we do for SDK15 with Nordic SDK files and a patchset, but SDK11 is niche enough I don't think that really matters.
adafruit-nrfutil pip package conflicts with nrfutil
Maybe just use
adafruit-nrfutil
from the Makefile, and leave how to install it up to the person building?Probably having only DFU zips for most people isn't a big deal since that's why you'd use SDK11 surely? If you could write via SWD you'd just use a newer SDK?
-
• #11
Maybe just use adafruit-nrfutil from the Makefile, and leave how to install it up to the person building?
Well, the point of
scripts/provision.sh BOARDNAME
is to get everything prepared, so next step ismake
that works. It installs nrfutil for other SDKs too. So in that sense it would do only half of the job for SDK11 and won't allow e.g. automated building from github pipelines. So adding symmetrical pip install adafruit-nrfutil would make better sense, otherwise adding automated SDK11 download is not that much useful.Well, except that it would break your existin nrfutil install when you are building locally. So my thinking/question was if both versions of the nrfutil could be installed in a better way.
Maybe by using venv https://docs.python.org/3/library/venv.html into some espruino folder? like arm gcc compiler or esp32 sdk or other parts downloaded by provision script.
-
• #12
Yes, having some way to install
adafruit-nrfutil
in a subfolder rather than globally definitely seems like the way forward.For stuff like ESP32 we do that and set up the path temporarily - then if someone wants to have it permanent without running the provision script at startup they can always copy the displayed paths into
.bashrc
/similar.
I'm putting Espruino on an older sports band which uses SDK11. I have a board file which indicates "NRF_SDK11=1" and have done a scripts/provision.sh with the board. The build stops immediately saying
No rule to make target 'targetslib/nrf5x_11/components/toolchain/gcc/gcc_startup_nrf52.o', needed by 'bin/espruino_2v18.69_ID130.elf'. Stop.
Sure enough, there is no targetlibs/nrf5x_11 directory; there is nrf5x, nrf5x_12, nrf5x_14. Is this the Nordic SDK11? Do I need to install that?