Using ngultra_memory_programmer.py

Write a file into memory

ngultra_memory_programmer.py --write_file <your_file> --address <start_address>

Writing a random file of 256B into the eRAM

dd if=/dev/urandom of=random.bin bs=256 count=1
ngultra_memory_programmer.py --write_file random.bin --address 0x3000000

Dump memory into a file into memory

ngultra_memory_programmer.py --dump <your_file> --address <start_address> --count <number of 32bits block>

Reading first 256B of the eRAM

ngultra_memory_programmer.py --dump random.bin --address 0x3000000 --count 64

Read a single 32bits register

ngultra_memory_programmer.py --read_register --address <start_address>

Reading status of the BitStream Manager

ngultra_memory_programmer.py --read_register --address 0xD701014
Result should be 0x0001000e

Writing a single 32bits register

ngultra_memory_programmer.py --write_register <value> --address <start_address>

Writing first 32bits of the eRAM with 0XA5A5A5A5

ngultra_memory_programmer.py --write_register 0XA5A5A5A5 --address 0x3000000

Register could be read to check the correct execution of the command.

Choosing the accessor for the memory access

All these commands could access the memory via:

  • the DAP APB (for Coresight registers);

  • the DAP AXI;

  • any of the 4 cores.

This could be done via adding respectively:

  • --coresight;

  • --axi;

  • --core N (where N is the idx of the core [0-3]).

The default accessor is: core 0.

© NanoXplore 2022