Cheaper & less complicated Owl hardware

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 /
MEMORY
{



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);
*(.gpmdata)
. = ALIGN(4);
} >GPMRAM

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

Welcome for valuable comment.
Thanks.

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")));

owlcontrol.c

uint16_t adc_values[NOF_ADC_VALUES] attribute ((section (".gpmdata")));

Owl.cpp

SampleBuffer buffer;

device.h

#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.

Question:

  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?

  1. 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.

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!

[1] http://uk.farnell.com/integrated-silicon-solution-issi/is61wv51216bll-10tli/sram-8mbit-10ns-44tsopii/dp/2253837

[2] http://www.rebeltech.org/shop/