Здравствуйте!
Дано: C8051F340 и AT45DB161D, которые должны работать по SPI, но что-то ничего не получается.
В оригинальной версии схемы /RESET и /WP сидели на +VCC, затем я их оторвал и повесил на порты - в предыдущей схеме на AtMega именно так все и работало (по уверениям)
Кстати до этого из SPI0DAT упорно читалось только 0xFF, теперь читается 0х00
Я, на самом деле, конструктор плат, так что с C у меня проблэмы - фунция возвращает 0, хотя поставленные на контроль регистры показывают значения, правда совсем-совсем не ID Atmel, а вообще непонятно что и все врямя разное.
К MOSI, SCK, /RESET и /CS у меня подключены внутренние подтягивающие резисторы контроллера (push-pull)
Еще в начале вся схема работала от +5В от программатора, потом я ограничил до +3.6
При +3.3 флеш тоже не очень работает, только это еще и трудно контролировать: микросхема в консольном кабеле глючит от низкого напряжения.
Есть мнение, что неправильно запущен кварц - что бы обойтись без SCK написана функция следующего вида:
CODE
BYTE SPI_Byte_RW (BYTE OPCODE)
{
BYTE i,ret3 = 0;
for(i=0;i<8;i++)
{
MOSI = (OPCODE & 0x80) ? 1 : 0;
SCLK = 0;
OPCODE <<= 1;
ret3 <<= 1;
SCLK = 1;
ret3 |= MISO;
}
OPCODE = 0;
for(i=0;i<8;i++)
{
MOSI = (OPCODE & 0x80) ? 1 : 0;
SCLK = 0;
OPCODE <<= 1;
ret3 <<= 1;
SCLK = 1;
ret3 |= MISO;
}
return ret3;
}
Однако и тут никакого результата, кроме 0
В приложении схема и проект в Silabs IDE
Спасибо!
Ptest_01_Now.zip ( 27.07 килобайт )
Кол-во скачиваний: 120
Сообщение отредактировал DVasiliev - Nov 1 2009, 12:44