Код
DFChipSelect();
AT91F_PDC_DisableRx(pPdc);
AT91F_PDC_SetRx(pPdc, (char *) &(), bCmdSize);
AT91F_PDC_SetNextRx(pPdc, pData, dDataSize);
AT91F_PDC_DisableTx(pPdc);
AT91F_PDC_SetTx(pPdc, (char *) &(pDataFlash->commandS), bCmdSize);
AT91F_PDC_SetNextTx(pPdc, pData, dDataSize);
AT91F_PDC_EnableRx(pPdc);
AT91F_PDC_EnableTx(pPdc);
AT91F_PDC_DisableRx(pPdc);
AT91F_PDC_SetRx(pPdc, (char *) &(), bCmdSize);
AT91F_PDC_SetNextRx(pPdc, pData, dDataSize);
AT91F_PDC_DisableTx(pPdc);
AT91F_PDC_SetTx(pPdc, (char *) &(pDataFlash->commandS), bCmdSize);
AT91F_PDC_SetNextTx(pPdc, pData, dDataSize);
AT91F_PDC_EnableRx(pPdc);
AT91F_PDC_EnableTx(pPdc);
В качестве команды засылается запрос на статус регистр (0xD7) размер команды 2 (bCmdSize=2)
Глядя на диаграмму передачи со статус регистра видно, что статус регистр должен передаваться по MISO сразу же после 8го тика SCK. Судя по всему так и происходит. Но сам статус регист оказывается не в ((char*)pDataFlash->command) [1], а в ((char*)pDataFlash->command) [0] !!! Как будто датафлэш передаёт данные во время прохождения запроса. Как будто PDC для приёма курит один байт, перед тем как начать приём.
Что не учёл, где накосячил?
Процессор sam7s256 код из атмеловского апноута для sam7x.
Очевидно, что это проявляется не только с датафлэш, тк для АЦП запросы короткие то там я тупо подстроился под эту систему и заставил всё работать. Но это ведь может плохо кончиться!