Question

I need to read the Asynchronous External Memory Interface (AEMIF) using a TMS320DM368 in an embedded linux environment on custom HW. I don't actually have the hardware yet so I am testing the vala code (below) on a Leopardboard 368. The 1st AEMIF is used by the bootloader to read nand flash. My code is trying to use the 2nd AEMIF to read SRAM that is not on the Leopardboard but will be on the custom HW. I suspect the segmentation fault is caused by the fact that I am trying to access protected memory. The actual custom HW will have several M of SRAM that needs to be read but I am trying to get this test code to read read 256 bytes. How can I fix the segmentation fault caused by the test code below? Do I need to add a driver to the kernel? I'd rather not mess with the kernel if possible. Is there an embedded-linux method to configure or declare certain address ranges as unprotected?

uint8 * source = (uint8 *)0x04000000; // AEMIF Data (CE1)
uint32 * pA2CR = (uint32 *)0x01D10014; // AEMIF 2 Config Reg (CS3 space)
const uint32 READ_SETUP = 1; // Read setup: EMIF clock cycles - 1
*pA2CR = (READ_SETUP << 13);
const size_t size = 256;
var dest = new uint8[size];
memset(dest, 0, size);
memcpy(dest, source, size);
Était-ce utile?

La solution

I am not familiar with DM386, but I used to work on DM6446. In DM6446, but I expect it to be the same also on DM368, physical addresses are remapped.

I don't know your scenario, but I think you could write a driver using the miscdevice and offer support for read and write operation to your userspace program.

In my kernel modules I use the IO_ADDRESS macro to do the remapping and to access the registers. To give you an example:

#define REG_PINMUX1     (*((volatile unsigned long *) (IO_ADDRESS(PINMUX1))))

and then in the code I have commands like

REG_PINMUX0 &= ~(0x01000000);

So I think you're getting segfault because you have a wrong pointer. And trying to access hw registers from a userspace program without a kernel module is not imho a good strategy.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top