ΣSigmaStudio Ask AI Русский Log in

How to enable second page of DM?

SigmaDSP & SigmaStudio Richardmy Jan 27, 2026 00:00 4 replies Original on forum ↗
Thread Summary

Thread Summary

The user encountered issues accessing the upper page of DM0 memory on ADAU1467 devices via SPI. The solution involved implementing the safeload procedure as described in the ADAU1467 datasheet, which resolved the problem. The user also found it helpful to use Sigma Studio's capture window to observe the exact sequence of SPI transactions for upper page access.
AI Generated Content
Subscribe
Richardmy Question
Jan 27, 2026 00:00

Hi,

I'm experiencing an issue with writing to and reading from the upper page of DM0 memory on my ADAU1467 devices.

Current Setup:

I have two ADAU1467 DSP chips controlled by an STM32F446 uC via SPI. I've implemented a custom SIGMA_WRITE_REGISTER_BLOCK macro that works as follows: I pull the SS low to address one of the ICs, then send a message:
[ 0x00 for write or 0x01 for read | addr1 | addr0 | data ]
This implementation worked perfectly for both IC's.

The Problem:

As my project has grown, the SigmaStudio compiler has started using the upper page of DM0 on the second IC to store algorithms. The default_download_IC_2 function has following algorithm for writing to second page:

SIGMA_WRITE_REGISTER_BLOCK(DEVICE_ADDR_IC_2, REG_SECOND_PAGE_ENABLE_IC_2_ADDR,
REG_SECOND_PAGE_ENABLE_IC_2_BYTE, R61_SECOND_PAGE_ENABLE_IC_2_Default);
SIGMA_WRITE_REGISTER_BLOCK(DEVICE_ADDR_IC_2, DM0_UPPER_ADDR_IC_2,
DM0_UPPER_SIZE_IC_2, DM0_UPPER_Data_IC_2);
SIGMA_WRITE_REGISTER_BLOCK(DEVICE_ADDR_IC_2, REG_SECOND_PAGE_ENABLE_IC_2_ADDR,
REG_SECOND_PAGE_ENABLE_IC_2_BYTE, R63_SECOND_PAGE_ENABLE_IC_2_Default);

So we can see that to write or read from second page you need to set 0xF899 control register to 0x01, then send data, then disable second page with 0xF899 going 0x00.

My Implementation:

I attempted to apply the same approach (+ - new lines):

project_V1_IC_2_PARAM.h

#define MOD_OUTPUT16_INV_EQS300INVERT16INVERT_ADDR 1772

project_V1_IC_2.h

#define DM0_UPPER_ADDR_IC_2 1764

project_my_code.c

+ const uint8_t data_second_page_enable[2] = {0x00, 0x01};
+ const uint8_t data_second_page_disable[2] = {0x00, 0x00};

+ SIGMA_WRITE_REGISTER_BLOCK(DEVICE_ADDR_IC_2, REG_SECOND_PAGE_ENABLE_IC_2_ADDR,
REG_SECOND_PAGE_ENABLE_IC_2_BYTE, data_second_page_enable);

read_or_write_algo(MOD_OUTPUT16_INV_EQS300INVERT16INVERT_ADDR);

+ SIGMA_WRITE_REGISTER_BLOCK(DEVICE_ADDR_IC_2, REG_SECOND_PAGE_ENABLE_IC_2_ADDR,
REG_SECOND_PAGE_ENABLE_IC_2_BYTE, data_second_page_disable);

The Issue:

When I add this code, the second IC stops working entirely. Removing these lines restores normal operation, but the algorithms on the upper page remain inaccessible.

Could you help me identify what I'm doing wrong? Is there something I've overlooked in the second-page access procedure, or should I search for a problem in my custom SIGMA_WRITE_REGISTER_BLOCK implementation?

Edit Notes
Fixed spacing

[edited by: Richardmy at 11:12 AM (GMT -5) on 27 Jan 2026]

Audio Signal Processors

SECOND_PAGE_ENABLE

software

adau1467

sigma studio 4.7

SigmaDSP Audio Processors

0xF899

Show More

Harishgowtham Reply
Jan 27, 2026 00:00

Hello Richardmy,

Could you please attach your project?

It will be easy for us to use your project to try the read and writes with the upper page, instead of creating such a big project ourselves and try.

Also, have you had a look at the capture window while accessing the upper page content from SS? If you haven't, then try accessing (R/W) an upper page module and immediately access the lower page module and watch the capture window of SS, the transactions are there in the SS capture window and you can see the SECOND_PAGE_ENABLE register change. You can also realize that the read/write to upper page continued by the lower page has impacted the particular module. So, if you can follow the exact same order as SS and try from your uC then you may see something.

If that doesn't work, then we will have to probe the SPI line and see what commands, addresses are sent when we access the upper page.

We will discuss this further, once we get the project.

Regards,

Harish

Richardmy Reply
Jan 27, 2026 00:00

Ok, nice suggestion. I checked capture window and discovered that SS does safeload when I change algo value. I implemented safeload procedure from ADAU1467 datasheet Table 55 and everything worked! Thanks a lot!

ChristopherH Reply
Jan 27, 2026 00:00

Hello,

I like to use Sigma Studio scripting to emulate microcontroller reads/writes. I've attached a project that has an FIR in lower page of DM and an FIR in the upper page of DM.

I've attached script that will read the FIRs coefficients, below is a result of running the script in Matlab. You can see the page switching and read operations. If you dont have Matlab, this can also be done in Python.

It's instructive to look at the SS capture window after running the script to see all the operations. Hope this helps ;)

>> SS_DMTest
lower:
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
11.0
12.0
13.0
14.0
15.0
16.0
upper:
-1.0
-2.0
-3.0
-4.0
-5.0
-6.0
-7.0
-8.0
-9.0
-10.0
-11.0
-12.0
-13.0
-14.0
-15.0
-16.0
>>

SS_DM0Test.zip

Richardmy Reply
Jan 28, 2026 00:00

Thanks! I think I will definetly try it. Also didn't know about SSServer. Will look into it, maybe to write some debug scripts.