По мотивам кодов в данной теме составил такой код:
Код
unsigned int i;
alt_u8 data[16];
// адрес EPCS контроллера
const alt_u32 EPCS_ADDR = EPCS_FLASH_CONTROLLER_0_BASE + EPCS_FLASH_CONTROLLER_0_REGISTER_OFFSET;
// смещение параметров модуля в EPCS - 0 байт
const alt_u32 EPCS_PARAMS_OFFSET = 0;
// режим байтов для EPCS
const alt_u32 EPCS_BYTE_MODE = 0;
epcs_read_buffer(EPCS_ADDR, EPCS_PARAMS_OFFSET, &data, 16, EPCS_BYTE_MODE);
for(i=0;i<16;i++)
{
IOWR_8DIRECT(ONCHIP_MEMORY2_0_BASE, 16+i, data[i]);
}
Вроде всё нормально, но компилятор в Eclipse выдаёт предупреждение:
warning: passing argument 3 of 'epcs_read_buffer' from incompatible pointer type [enabled by default]
Что бы это значило?
В EPCS записан .jic с таким .map файлом:
BLOCK START ADDRESS END ADDRESS
Page_0 0x00000000 0x0006AD41
ПЛИС Cyclone 4 GX с этого файла нормально стартует, правильно грузится прошивка и правильно выполняется программа НИОСа.
Судя по всему если я буду читать эту EPCS с нулевого смещения , то первые три байта должны быть 0x4a 0x49 0x43, что соответствует кодам букв JIC ?
Потому что эти 3 буквы я вижу с нулевого смещения в .jic файле если посмотреть его в HEX Editor.
А чтение EPCS с нулевого смещения вышеприведённым кодом даёт первые 16 байт равные 0xFF.
По более старшим адресам ( читаю окнами по 16 байт ) в EPCS лежат уже не 0xFF, но прочитанные значения не находятся в .jic файле если поискать их с помощью HEX Editor.
UPD
Сделал запись в область со смещением , а потом чтение, всё верно получается - прочитанное совпало с записанным.
Код
int i;
int j;
alt_u8 data_A[16];
alt_u8 data_B[16];
// адрес EPCS контроллера
const alt_u32 EPCS_ADDR = EPCS_FLASH_CONTROLLER_0_BASE + EPCS_FLASH_CONTROLLER_0_REGISTER_OFFSET;
// нулевое смещение параметров модуля в EPCS
const alt_u32 EPCS_PARAMS_OFFSET = 16*65536;
// режим байтов для EPCS
const alt_u32 EPCS_BYTE_MODE = 0;
for(i=0;i<16;i++)
{
data_A[i]=i;
}
epcs_write_enable(EPCS_ADDR);
epcs_sector_erase(EPCS_ADDR, EPCS_PARAMS_OFFSET, EPCS_BYTE_MODE);
epcs_write_buffer(EPCS_ADDR, EPCS_PARAMS_OFFSET, &data_A, 16, EPCS_BYTE_MODE);
epcs_read_buffer(EPCS_ADDR, EPCS_PARAMS_OFFSET, &data_B, 16, EPCS_BYTE_MODE);
for(j=0;j<16;j++)
{
IOWR_8DIRECT(ONCHIP_MEMORY2_0_BASE, 16+j, data_B[j]);
}
Почему же прочитанный из EPCS .jic не совпадает с .jic файлом?