# HG changeset patch # User David Douard # Date 1633791139 -7200 # Node ID f3070bd842cdbf290b90b831d9b0a4edcaaf806a # Parent 0c9f5038fc630a27f5ec6d176440365d380eb84a HP34970A - part 6 diff -r 0c9f5038fc63 -r f3070bd842cd content/hp34970a_5.rst --- a/content/hp34970a_5.rst Tue Jan 05 23:43:56 2021 +0100 +++ b/content/hp34970a_5.rst Sat Oct 09 16:52:19 2021 +0200 @@ -6,7 +6,7 @@ :Category: Electronics :Tags: HP, 34970A, HP34970A, DMM, repair, test equipment :series: HP 34970A repair -:series_index: 4 +:series_index: 5 After a loooong pause on this project, I have recently been able to work on it diff -r 0c9f5038fc63 -r f3070bd842cd content/hp34970a_6.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/content/hp34970a_6.rst Sat Oct 09 16:52:19 2021 +0200 @@ -0,0 +1,148 @@ +========================================== + HP 34970A Data Acquisition Unit - part 6 +========================================== + + +:Author: David Douard +:Category: Electronics +:Tags: HP, 34970A, HP34970A, DMM, repair, test equipment +:series: HP 34970A repair +:series_index: 6 + + +Quick follow up; I recently got back on this project to try to complete it and fix +remaining problems. + +The source code for the firmware is available here: + + https://hg.sdfa3.org/hp34970-firmware + +The Kicad project is available here: + + https://hg.sdfa3.org/hp34970-pcb + + +Making the USBDevice work +========================= + +As described in the `previous episode <{filename}/hp34970a_5.rst>`_, I could not make +the USBDevice of the STM32F303RD work with `mbed-os `_ framework I +use to write the firmware. + +The `STM32F303RD +`_ is not yet +officially supported by mbed-os (mainl because there is no `NUCLEO +`_ board with +this CPU. + +However the STM32F303RE is supported, at least partially. For example, the USBDevice is +not working at all in the latest version of mbed-os (6.15.0). But some `work has been +done recently `_ to enable USB_DEVICE on +CPUs of the STM32F3 family. But this last PR was not enoght to make the USB device work; +I have submitted a `PR `_ that needs to +be merged to make the USB device actually work. + +Also, the difference between the 2 being (as far as I know) only the size of the flash size +(384KB vs. 512 KB). + +So I had 3 problems to solve: + +- compile the code for a custom board using the mbed framework in platformio, +- use a custom CPU decription, +- use a patched version of the latest version of mbed-os in platformio (while the + officially supported version at this moment is only the 6.9.0). + + +Custom version of mbed in platformio +------------------------------------ + +Using a custom version of a framework (here mbed) in platformio is not properly +documented. But thanks to `the response +`_ +to my question on the `platformio forum `_, I could +make it work. Obviously, I submitted `a PR +`_ to `platformio-docs +`_. + +So now I have my (more or less) `up to date repository +`_ usable as `platform_packages` +config argument. + +Custom board and CPU description +-------------------------------- + +This part I am not completely sure how it should be done. There are actually 2 parts: +- tell mbed about the CPU description, +- tell platformio about is and use it. + +The platformio part is `documented here +`_ + +It mostly consists in creating a json file in the `boards/` directory of the platformio +project directory. + +For this project, I used the description of the NUCLEO_F303RE as starting point. The +file is `boards/hp34970_fp_f303rd.json +`_ in the +`firmware source code repository `_. + +Once the board is described, it can be used in the `platformio.ini` file: + +.. code-block:: bash + + ~/e/hp34970-firmware$ pio boards | grep hp34 + hp34970_fp_f303rd STM32F303RDT7 72MHz 384KB 64KB HP34970 Replace Front Panel Board (STM32F303RD, 64k RAM, 384k Flash) + + + +Then we need to tell mbed about this board. This is `documented there +`_ + +It is a matter of creating a `custom_targets.json` file with the board description. +Again, I used the existing NUCLEO_F303RE as starting point, then added/removed what I +needed for this project: + +.. code-block:: json + + { + "HP34970_FP_F303RD": { + "inherits": [ + "MCU_STM32F303xE" + ], + "overrides": { + "clock_source": "USE_PLL_HSE_XTAL" + }, + "device_has_add": [ + "USBDEVICE" + ], + "mbed_rom_size": "0x60000", + "bootloader_supported": true, + "device_name": "STM32F303RE" + } + } + +Then the actual description (pins, memory config, etc.) are C files put in a +`TARGET_HP34970_FP_F303RD` directory. Here again, started from files copied from the +`STM32F303xE target +`_. + + +End result +========== + +It took me some time, but in the end, I finally got a firmware that works OK, including +a working USB serial port. For now, this serial connection is still used only for +debugging purpose (and firmware upload in DFU mode), but it may be improved in the +future, if needs be. + +So I could put the HP34970A back together (at last). I drilled a couple of small holes +for the Reset and DFU buttons and a (not so) square hole for the USB plug in the blue +glass. + +The result looks very decent to me: + +.. image:: {static}/images/hp34970a/finished.jpg + :alt: finished look of the device with the replacement front panel + :class: image-process-large-photo + +.. peertube:: 14d0e7e2-74d5-44fe-90e9-d6b102ae01a1 diff -r 0c9f5038fc63 -r f3070bd842cd content/images/hp34970a/finished.jpg Binary file content/images/hp34970a/finished.jpg has changed