Перейти к содержанию

    

LPC2104 и RL-FlashFS

Добрый день всем. Разведена платка с 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);

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
На всяки случай - виснет здесь

К флэшке это отношения не имеет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не работал ни с 2104, ни с FlashFS, ничего не понял про "простой SPI".

Самое главное, не понял, зачем читать всякие TNF и RNE, если в SSP есть бит busy.

 

 

Рабочий код выглядит так:

 

int SPI_ProcessByte (unsigned char sym)
{
    SSP0DR = sym;
    while (SSP0SR & BIT(4));        // ждём освобождения контроллера
    return SSP0DR;                    // и возвращаем принятый байт
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Не работал ни с 2104, ни с FlashFS, ничего не понял про "простой SPI".

Самое главное, не понял, зачем читать всякие TNF и RNE, если в SSP есть бит busy.

 

Камушки пришли самой первой ревизии, без SSP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Меня несколько смутили слова "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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Меня несколько смутили слова "FIFO" и упоминания SSPSR - это самый что ни на есть SSP.

 

Открыл даташит на LPC2104, там уже всё расписано:

 

Как же мне вам написать, чтобы вы меня поняли...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Как же мне вам написать, чтобы вы меня поняли...

Аккуратно выкинув неиспользуемый код из приведённого кусочка. И комментарии там не к месту :)

Прошу прощения, не заметил, что обращение к SSPSR закомментировано.

 

Возможно, кто-то зачем-то читает SSP0DR. Не отладчик, случаем?

 

 

Точно такой же код, как и Ваш, работает на 2134/2138 без нареканий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
finit для меня черный ящик

Так и надо было топик называть - научите работать с SPI. И не приплетать флэшку.

А там все просто. В еррате написано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скачал, полистал. Это где, простите?

 

S0SPSR - это status, а совсем не interrupt, регистр.

Да и записи в регистры SPI в момент передачи не видно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Исходя из того, что в топике даже не попытались привести код инициализации делаю вывод, что люди вообще не в курсах.

Ибо причин не работы SPI может быть крайне много.

А так как приведен тривиальный фрагмент кода, и даже ни в одном месте не сделана попытка обойти это зависание и проверить на реальную работоспособность... Короче люди элементарно не умеют отлаживать свои собственные программы.

 

Ведь очень просто узнать - это сбрасывается по каким-то причинам флаг готовности (но SPI корректно завершает свою работу) или так клоки дохнуть или еще чего... Т.е. проделать элементарные вещи.

 

И при наличии осциллографа не увидеть как работает SPI - это вообще нереальная ситуация. Проще интерфейса очень трудно придумать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Исходя из того, что в топике даже не попытались привести код инициализации делаю вывод, что люди вообще не в курсах.

Ибо причин не работы SPI может быть крайне много.

А так как приведен тривиальный фрагмент кода, и даже ни в одном месте не сделана попытка обойти это зависание и проверить на реальную работоспособность... Короче люди элементарно не умеют отлаживать свои собственные программы.

 

Ведь очень просто узнать - это сбрасывается по каким-то причинам флаг готовности (но SPI корректно завершает свою работу) или так клоки дохнуть или еще чего... Т.е. проделать элементарные вещи.

 

И при наличии осциллографа не увидеть как работает SPI - это вообще нереальная ситуация. Проще интерфейса очень трудно придумать...

 

Постараюсь удержаться в парламентских выражениях. Хотя если про меня начинают говорить в третьем лице в моем присутствии я обычно не стараюсь. Вы со своего первого поста начали рубить категоричными выражениями не видя картинки, ну так получите.

 

1.

 

На всяки случай - виснет здесь

 

К флэшке это отношения не имеет.

 

Вот и именно что имеет, пока не вставлена флешка все работает, посылки идут, зависания не происходит.

 

2

 

finit для меня черный ящик

 

Так и надо было топик называть - научите работать с SPI. И не приплетать флэшку.

 

Я сказал что не знаю что делает функция верхнего уровня(финит), для которой эспиайные функции только инструмент, и поэтому я не могу проверить правильность ее работы

осциллографом. И из этого вы сделали вывод что я не умею работать с эспиай. Даже несмотря на то что я перичислил вкратце задачи, к-рые я окучивал с его помощью. У вас с адекватностью все в порядке? Над вашими постами, их категоричностью и оторванностью от ситуации пять человек ржет с этой стороны компа.

 

3.

 

Ибо причин не работы SPI может быть крайне много.

 

Проще интерфейса очень трудно придумать...

 

Вы себя то слышите? Вы в одном посту себе противоречите. Рассуждаете с категоричностью тинэйджера и с его же уровнем знаний.

 

4.

 

И при наличии осциллографа не увидеть как работает SPI - это вообще нереальная ситуация.

 

см. пункт 3

 

 

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

 

НИЧЕГО ЛИЧНОГО

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
"Вся проблема в том что функция finit для меня черный ящик(она сидит в библиотеке) и я не могу знать что она должна делать и не могу посмотреть поэтому осцилом правильность хода её выполненияю."

 

ну так попробуйте посмотреть скомпиленный код этого куска, не думаю, что там уж такая прорва инструкций

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация