|
|
  |
LPC2104 и RL-FlashFS, Помогите подружить |
|
|
|
Aug 29 2009, 09:33
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 3-12-08
Пользователь №: 42 171

|
Добрый день всем. Разведена платка с SD карточкой и 2104 камушком. Камушки пришли самой первой ревизии, без SSP. Написал драйверочек под простой SPI(кто осваивал RL-FlashFS знает, там надо 4 функции написать). Ставлю finit() в самом начале проги, при сбросе проц доджен пытаться инициализировать карту. Что интересно, два сброса finit возвращает 1(карта не инициирована) на третий сброс программа застревает внутри этого finit и сыплет какую то шелуху по спиайным ногам. И повторяется эта картина железно - сброс, сброс, застряла, сброс, сброс, застряла. Чтобы отсечь ненужные вопросы сразу скажу - с железом все в порядке. С карточками раньше работал. Взял программку инициации карточки из своего проекта на авр, посадил сверху на упомянутый драйверочек SPI, засунул в 2104 в этой проблеммной платочке - карта отзывается, инициализируется. Но хочется заставить её работать из под RL-FlashFS. Поэтому хочется услышать совет людей, портировавших сабж на камни 2104/05/06 с простым SPIем. Заранее спасибо. На всяки случай - виснет здесь:
U8 spi_send (U8 outb) { /* Write and Read a byte on SPI interface. */
/* Wait if TNF cleared, Tx FIFO is full. */ // while (!(SSPSR & TNF)); S0SPDR = outb;
/* Wait if RNE cleared, Rx FIFO is empty. */ while (!(S0SPSR &(1<<7))); return (S0SPDR); }
|
|
|
|
|
Aug 31 2009, 07:26
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Не работал ни с 2104, ни с FlashFS, ничего не понял про "простой SPI". Самое главное, не понял, зачем читать всякие TNF и RNE, если в SSP есть бит busy. Рабочий код выглядит так: Код int SPI_ProcessByte (unsigned char sym) { SSP0DR = sym; while (SSP0SR & BIT(4)); // ждём освобождения контроллера return SSP0DR; // и возвращаем принятый байт }
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Aug 31 2009, 09:21
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 3-12-08
Пользователь №: 42 171

|
Цитата(esaulenka @ Aug 31 2009, 14:26)  Не работал ни с 2104, ни с FlashFS, ничего не понял про "простой SPI". Самое главное, не понял, зачем читать всякие TNF и RNE, если в SSP есть бит busy. Камушки пришли самой первой ревизии, без SSP
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Aug 31 2009, 14:40
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Меня несколько смутили слова "FIFO" и упоминания SSPSR - это самый что ни на есть SSP. Открыл даташит на LPC2104, там уже всё расписано: Цитата Master Operation The following sequence describes how one should process a data transfer with the SPI block when it is set up to be the master. This process assumes that any prior data transfer has already completed. 1. Set the SPI clock counter register to the desired clock rate. 2. Set the SPI control register to the desired settings. 3. Write the data to transmitted to the SPI data register. This write starts the SPI data transfer. 4. Wait for the SPIF bit in the SPI status register to be set to 1. The SPIF bit will be set after the last cycle of the SPI data transfer. 5. Read the SPI status register. 6. Read the received data from the SPI data register (optional). 7. Go to step 3 if more data is required to transmit. Note that a read or write of the SPI data register is required in order to clear the SPIF status bit. Therefore, if the optional read of the SPI data register does not take place, a write to this register is required in order to clear the SPIF status bit.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Aug 31 2009, 17:54
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 3-12-08
Пользователь №: 42 171

|
Цитата(esaulenka @ Aug 31 2009, 21:40)  Меня несколько смутили слова "FIFO" и упоминания SSPSR - это самый что ни на есть SSP.
Открыл даташит на LPC2104, там уже всё расписано: Как же мне вам написать, чтобы вы меня поняли... Я умею работать с эспиай, я им окучиваю и памятешки, и ацпшки, и кан-контроллеры, и генераторы и часики и в АВРках, и в ПИКах и в ЭЛЬПИСИШНИКАХ. Абзац что вы привели я знаю почти наизусть. ФИФО в моем коде упоминается потому, что я ВЗЯЛ РАБОТАЮЩИЙ ПРИМЕР ДЛЯ 2141(он работает на SSP) И ПОПЫТАЛСЯ ЗАСУНУТЬ ЕГО В 2104. НО В ПЕРВЫХ РЕВИЗИЯХ 2104 НЕБЫЛО SSP, ПОЭТОМУ драйверок SSP-2141 я переписал по смыслу и по опыту для SPI-2104. Функцию spi_send из моего драйвера я вам показал и сказал что в ней виснет иногда. Вся проблема в том что функция finit для меня черный ящик(она сидит в библиотеке) и я не могу знать что она должна делать и не могу посмотреть поэтому осцилом правильность хода её выполненияю. Поэтому я попросил совета у людей, делавших это. Раз вы сами признались что ни с одним из сабжей моего топика вы не работали - давайте не будем теоретизировать. Всего хорошего.
|
|
|
|
|
Sep 1 2009, 07:40
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата(Пал @ Aug 31 2009, 21:54)  Как же мне вам написать, чтобы вы меня поняли... Аккуратно выкинув неиспользуемый код из приведённого кусочка. И комментарии там не к месту  Прошу прощения, не заметил, что обращение к SSPSR закомментировано. Возможно, кто-то зачем-то читает SSP0DR. Не отладчик, случаем? Точно такой же код, как и Ваш, работает на 2134/2138 без нареканий.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Sep 2 2009, 08:47
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 3-12-08
Пользователь №: 42 171

|
Цитата(DpInRock @ Sep 1 2009, 21:26)  Исходя из того, что в топике даже не попытались привести код инициализации делаю вывод, что люди вообще не в курсах. Ибо причин не работы SPI может быть крайне много. А так как приведен тривиальный фрагмент кода, и даже ни в одном месте не сделана попытка обойти это зависание и проверить на реальную работоспособность... Короче люди элементарно не умеют отлаживать свои собственные программы.
Ведь очень просто узнать - это сбрасывается по каким-то причинам флаг готовности (но SPI корректно завершает свою работу) или так клоки дохнуть или еще чего... Т.е. проделать элементарные вещи.
И при наличии осциллографа не увидеть как работает SPI - это вообще нереальная ситуация. Проще интерфейса очень трудно придумать... Постараюсь удержаться в парламентских выражениях. Хотя если про меня начинают говорить в третьем лице в моем присутствии я обычно не стараюсь. Вы со своего первого поста начали рубить категоричными выражениями не видя картинки, ну так получите. 1. На всяки случай - виснет здесь К флэшке это отношения не имеет. Вот и именно что имеет, пока не вставлена флешка все работает, посылки идут, зависания не происходит. 2 finit для меня черный ящик Так и надо было топик называть - научите работать с SPI. И не приплетать флэшку. Я сказал что не знаю что делает функция верхнего уровня(финит), для которой эспиайные функции только инструмент, и поэтому я не могу проверить правильность ее работы осциллографом. И из этого вы сделали вывод что я не умею работать с эспиай. Даже несмотря на то что я перичислил вкратце задачи, к-рые я окучивал с его помощью. У вас с адекватностью все в порядке? Над вашими постами, их категоричностью и оторванностью от ситуации пять человек ржет с этой стороны компа. 3. Ибо причин не работы SPI может быть крайне много. Проще интерфейса очень трудно придумать... Вы себя то слышите? Вы в одном посту себе противоречите. Рассуждаете с категоричностью тинэйджера и с его же уровнем знаний. 4. И при наличии осциллографа не увидеть как работает SPI - это вообще нереальная ситуация. см. пункт 3 Еще раз русским языком и после этого идите туда откуда пришли, ибо мне нужен совет делавших конкретное дело а не сентенции считающего что он все знает о том что он считает что он все знает. УМЕЮ. РАБОТАЛ. "С карточками раньше работал. Взял программку инициации карточки из своего проекта на авр, посадил сверху на упомянутый драйверочек SPI, засунул в 2104 в этой проблеммной платочке - карта отзывается, инициализируется. " - ЭТО ПОНЯТНО, ИЛИ ЭТО ДЛЯ ВАС СЛОЖНЕЕ В ПОНИМАНИИ ЧЕМ ЭСПИАЙ? "Вся проблема в том что функция finit для меня черный ящик(она сидит в библиотеке) и я не могу знать что она должна делать и не могу посмотреть поэтому осцилом правильность хода её выполненияю." - ЕСЛИ И ЭТО ТОЖЕ НЕ ПОНЯТНО, ТО РАЗГОВАРИВАЙТЕ С ОБОЯМИ. НИЧЕГО ЛИЧНОГО
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|