cheaper & less complicated Owl hardware

Home Forums OWL OwlWare cheaper & less complicated Owl hardware

This topic contains 3 replies, has 2 voices, and was last updated by  Martin Klang 3 years, 4 months ago.

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
  • #2000


    Existing Owl hardware is very expensive. STM32F407ZET6 ($10/piece) & 1MB RAM $5/piece also making PCB is very complicated. Double sided PTH PCB is required.

    I want to make a cheaper & less complicated Owl hardware which will run on Internal SRAM only (no external SRAM). So that low cost less complicated single sided PCB may be used.
    I have selected STM32F405RG (LQFP64) for $4/piece for this purpose. Now controller, Codec, Switches, & POTs PCBs are in modular form, finally I will put all the stuff in a single one layer PCB.

    Now I need to modify OwlWare source (master branch) to run on Internal SARM as follows.

    STM32F407ZET6 has 192KB internal SRAM
    64KB = CCM
    128KB = General Purpose SRAM

    Memory maping:
    1) Put Stack & all all program data (variable, constant etc) in CCM
    2) Put audio sample buffer used by codec & DMA and other buffer used by peripherals in General Purpose SRAM
    3) Rest General Purpose SRAM approx 120KB used for patch audio buffer.
    For this same I need to modify flash.ld & other c/cpp files.

    Can any body help me in this regards.



    I have modified flash.ld as follows:

    _estack = 0x10010000; /* end of CCM RAM */

    /* Specify the memory areas */
    RAM (rwx) : ORIGIN = 0x10000000, LENGTH = 64k
    GPMRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 16K /* buffer used by DMA */
    ABRAM (rwx) : ORIGIN = 0x20004000, LENGTH = 112K /* buffer used by Patch */


    /* GPM (General Purpose Memory) section, vars must be located here explicitly */
    /* Example: int foo __attribute__ ((section (“.gpmdata”))); */
    .gpmdata (NOLOAD) :
    . = ALIGN(4);
    . = ALIGN(4);
    } >GPMRAM

    /* AB (Audio Buffer) section, vars must be located here explicitly */
    /* Example: int foo __attribute__ ((section (“.abdata”))); */
    .abdata (NOLOAD) :
    . = ALIGN(4);
    . = ALIGN(4);
    } >ABRAM

    Welcome for valuable comment.

    • This reply was modified 3 years, 4 months ago by  jagspaul.


    source code modification as follows:

    1) Removed all USB & MIDI related stuff. Actually I don’t want this Owl to be controlled via MIDI/USB rather I decided to connect rotary encoder/switches & Text LCD display to control the Owl.

    2) CodecController.cpp:
    /* DMA buffers for I2S */
    uint16_t tx_buffer[AUDIO_BUFFER_SIZE] __attribute__ ((section (“.gpmdata”)));
    uint16_t rx_buffer[AUDIO_BUFFER_SIZE] __attribute__ ((section (“.gpmdata”)));

    uint16_t adc_values[NOF_ADC_VALUES] __attribute__ ((section (“.gpmdata”)));

    SampleBuffer buffer;

    #define AUDIO_BLOCK_SIZE 128 /* size in samples of a single channel audio block */
    //#define AUDIO_MAX_BLOCK_SIZE 2048 /* size in samples of a single channel audio block */
    #define AUDIO_MAX_BLOCK_SIZE 256 /* size in samples of a single channel audio block */

    Finally build successfully the Owl.


    1) in device.h AUDIO_BLOCK_SIZE defined as 128 & AUDIO_MAX_BLOCK_SIZE is defined as 2048. why AUDIO_MAX_BLOCK_SIZE is set 16 times of AUDIO_BLOCK_SIZE?

    To reduce GPMRAM usage I AUDIO_MAX_BLOCK_SIZE = 256 (two times of AUDIO_BLOCK_SIZE). Is it harmful by any chance?

    2) In Owl source some where it is found that __attribute__ ((section (“.coderam”))) used just before a method.

    as example PatchProcessor.cpp:

    __attribute__ ((section (“.coderam”)))
    void PatchProcessor::setParameterValues(uint16_t *params){




    What is the significance of this? If this __attribute__ is not used how difference it makes.

    Please comment if anything more is required to port Owl for internal SRAM only.

    Thanks & Regards.


    Martin Klang

    Actually the fast external SRAM we use is more like USD 20.00 [1] and the digital board is not two but four layers – and yes it is complex!

    I’ve just added the OWL digital board (manufactured by our supplier in Portsmouth, UK) to our webshop [2], for people who want to build it into their own projects.

    Good luck with your project. I suggest you create a fork of OwlWare on Github for development and code discussions. And don’t forget to send pull requests if you fix any bugs or make improvements!



Viewing 4 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic.

Latest News


Follow us on Twitter