Работаю с MAX3100 (УАРТ с SPI-интерфейсом).
У него есть фифо. так вот посылаю я туда по уарту последовательность
"12345678", а считываю по SPI из фифо "1357".
Вопрос: а почему через 1 байт считывается? что я не так делаю?
УРА (озарение пришло на сл. день)
Я все понял.
Я после считывания делал запись этого же байта (для эха), так вот эта запись подпольно считывает сл. байт (правда про это в даташите написано).
Как-то это они некрасиво сделали - работать неудобно будет
Вопрос снят
АдскийОдуванчик
May 25 2007, 21:18
хм... У меня появилась проблема со схожими симптомами, но, похоже, что с другими причинами.
Подключаю я через max3100 блютузку... Пытаюсь на оную послать строку: INQUIRY 5 NAME#d#a.
В результате, после получения символа #0a блютузка отдаёт мне строку, которую она получила, и говорит что в ней синтаксическая ошибка. Посмотрев на строку, я согласился. INUR AE#a(два пробела) То есть, до блютузки дошли первый, и все чётные символы... А нечётные ушли в небытие...
Посылка осуществляется по spi-ному прерыванию следующим образом:
(изначально запихнули read config и из ответа получили R и T)
Если T то посылаем (write data)
Иначе посылаем dummy_write (write data с битом nTE = 1)
Трассировка показала на следующее поведение:
шаг 1) T=1, посылаем "I" (0x8249)
шаг 2) T=1, посылаем "N"(0x824E)
шаг 3) T=1, посылаем "Q"(0x8251) <<--<<--<<--
шаг 4) T=0, посылаем dummy write (0x8600)
шаг 5) T=0, посылаем dummy write (0x8600)
шаг 6) T=0, посылаем dummy write (0x8600)
шаг 7) T=0, посылаем dummy write (0x8600)
шаг 8) T=1, посылаем "U"(0x8255)
шаг 9) T=1, посылаем "I"(0x8249) <<--<<--<<--
шаг 10) T=0, посылаем dummy write (0x8600)
шаг 11) T=0, посылаем dummy write (0x8600)
шаг 12) T=1, посылаем "R"(0x8252)
шаг 13) T=1, посылаем "Y"(0x8259) <<--<<--<<--
шаг 14) T=0, посылаем dummy write (0x8600)
шаг 15) T=0, посылаем dummy write (0x8600)
шаг 16) T=1, посылаем " "(0x8220)
шаг 17) T=1, посылаем "5"(0x8235) <<--<<--<<--
шаг 18) T=0, посылаем dummy write (0x8600)
шаг 19) T=0, посылаем dummy write (0x8600)
шаг 20) T=1, посылаем " "(0x8220)
шаг 21) T=1, посылаем "N"(0x824E) <<--<<--<<--
шаг 22) T=0, посылаем dummy write (0x8600)
шаг 23) T=0, посылаем dummy write (0x8600)
шаг 24) T=1, посылаем "A"(0x8241)
шаг 25) T=1, посылаем "M"(0x824D) <<--<<--<<--
шаг 26) T=0, посылаем dummy write (0x8600)
шаг 27) T=1, посылаем "E"(0x8245)
шаг 28) T=1, посылаем "#d"(0x820d) <<--<<--<<--
шаг 29) T=0, посылаем dummy write (0x8600)
шаг 30) T=0, посылаем dummy write (0x8600)
шаг 31) T=1, посылаем "#a"(0x820a)
Посылки помеченные (<<--<<--<<--) не дошли до блютуза...
Долго думал в чём причина... Пробовал вместо записи 0x8600 делать чтение 0х0000, однако результат был таким же самым...
Есть ли у вас какие-либо варианты решения или обоснования причины данной проблемы? Наверняка кто-то уже успешно запускал MAX3100. Помогите, плиз!