Да, фиктивную передачу делаю, иначе просто бит окончания приема/передачи никогда не установится (потому что передача не будет запущена, клоки не пойдут и т.д.

) и проблема в работе SPI тут же обнаружится. Причем какие данные загружаю при фиктивной передаче, такие и получаю на входе в качестве значения регистра статуса. Либо 0x00.
Проблема в том, что у нас несколько вариантов плат. Так получилось, что где-то RDY/BUSY заведен на одну ногу LPC2214/2138, а где-то - на другую. А у меня бутлоадер раньше был под все платы, с определением конкретного микроконтроллера, размера его секторов, доступной памяти и т.д. - всех необходимых данных, чтобы корректно перепрошить контроллер данными из этой DataFlash, если нужно. Теперь же получается, что я должен 1) делать программное сравнение вместо внутреннего аппаратного и 2) делать разные варианты бутлоадера для разных плат. Бред. Неужели это тупик? Так и свихнуться можно...
У меня чтение регистра состояния было реализовано по-разному. Сначала так:
Код
#define DF_CMD_STATUS_READ_SPI03 0xD7
unsigned char bLastStatus;
// *
// * additionally deactivates Chip Select signal before actual waiting,
// * places last status register value in bLastStatus
// *
void DF_Wait_Busy( void )
{
DF_ChipSelect_Stop();
bLastStatus = 0;
DF_ChipSelect_Start();
SPI_WriteByte( DF_CMD_STATUS_READ_SPI03 );
do {
bLastStatus = SPI_ReadByte();
} while( (bLastStatus & 0x80) == 0 );
DF_ChipSelect_Stop();
}
Потом, кстати, были ситуации, когда вышеописанная проблема возникала, но устранялась дополнительным "передергиванием" линии _CS. Поэтому я сделал так:
Код
void DF_Wait_Busy( void )
{
DF_ChipSelect_Stop();
bLastStatus = 0;
do {
DF_ChipSelect_Start();
SPI_WriteByte( DF_CMD_STATUS_READ_SPI03 );
bLastStatus = SPI_ReadByte();
DF_ChipSelect_Stop();
} while( (bLastStatus & 0x80) == 0 );
}
Однако теперь никакие передергивания не спасают... Что-то не так делаю...