Чтение и запись обоих буферов DataFlash проходит, есть грабельки, но не смертельные.
Прямое чтение страницы MM из DataFlash как и запись MM через оба буфера - вообще без проблем.
Операции стирания страниц, запись содержимого любого из буферов в любую страницу MM, загрузка любой страницы MM в любой буфер - не проходят вообще.
Перебор уровней оптимизации IAR-овского компайлера не влияет, процедуры то простенькие, существенной разницы в ассемблерных листингах нет.
Передрал несколько вариантов инициализации порта, вот так выглядит самый устойчивый.
Код
// - initialisation spi1 UART module -----------
void spi1_init (void)
{
U1CTL |= CHAR + SYNC + MM + SWRST; // 8-bit, SPI, Master
U1TCTL |= CKPL + SSEL1 + STC; // Polarity, SMCLK, 3-wire
U1BR0 = 0x02; // SPICLK = SMCLK/2 ~ 4MHz
U1BR1 = 0x00;
U1MCTL = 0x00;
ME2 |= USPIE1; // Module enable
U1CTL &= ~SWRST; // Restart USART SPI, SPI enable
// IE2 |= URXIE1 + UTXIE1; // RX and TX interrupt enable
}
void spi1_init (void)
{
U1CTL |= CHAR + SYNC + MM + SWRST; // 8-bit, SPI, Master
U1TCTL |= CKPL + SSEL1 + STC; // Polarity, SMCLK, 3-wire
U1BR0 = 0x02; // SPICLK = SMCLK/2 ~ 4MHz
U1BR1 = 0x00;
U1MCTL = 0x00;
ME2 |= USPIE1; // Module enable
U1CTL &= ~SWRST; // Restart USART SPI, SPI enable
// IE2 |= URXIE1 + UTXIE1; // RX and TX interrupt enable
}
Опыта работы с DataFlash не так много. Собственно сами процедуры работы перенес с HiTech для pic18-го и DF AT45D011
Вторую неделю бъюсь и здравых мыслей уже нет. Остались только дурацкий колпак и бубен ...