|
FatFS + LPC2148 + KEIL |
|
|
|
Dec 12 2008, 10:39
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 17-03-07
Из: Беларусь, Минск
Пользователь №: 26 249

|
Добрый день Хочу освоить работу с FAT16/32 для SD. Пробовал RTL Flash File System от Keil - показалась полным г...ом Мучал пример, все вроде как работает, но через раз. С директориями не работает. Хочу портировать fatFS на SSP1 LPC2148, работаю в KEIL. Нашел порт fatFS на SSP1 LPC2148 для IAR, думал переделать, но уж очень много гемора и не совместимостей (название регистров, битовый поля, да и с синтаксис не нравиться) Может у кого есть или где видел порт именно для keil
|
|
|
|
|
Dec 13 2008, 12:14
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(MaxEngee @ Dec 12 2008, 17:39)  Хочу портировать fatFS на SSP1 LPC2148, работаю в KEIL. Нашел порт fatFS на SSP1 LPC2148 для IAR, думал переделать, но уж очень много гемора и не совместимостей (название регистров, битовый поля, да и с синтаксис не нравиться) Может у кого есть или где видел порт именно для keil Какой порт??? FatFS, если имеется ввиду файловая система от ChaN, написана на чистейшем Си. Ни какого порта не надо. Единственное, нужно написать операции записи-чтения секторов для используемого носителя... Задача относительно простая.
--------------------
|
|
|
|
|
Dec 13 2008, 15:09
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(sonycman @ Dec 13 2008, 16:56)  А хоть одна из доступных файловых систем поддерживает длинные имена? Там какая-то борьбическая борьба с микрософтом. Вроде как длинные имена поверх FAT запатентованы и микрософт хочет за них денюжку. Но это обрывки моих воспоминаний - где-то читал в интернете. Может у того же Чана. P.S. Ага, точно у него: Цитата Long file name There is an extended feature to handle long file name (LFN) up to 255 characters in addition to 8.3 format file name on the FAT file system. To support this feature, 512 byte string buffer for file name and Unicode - Local code mutual conversion table which occupies 256KB is required. Therefore memory consumption of code and work area will be increased drastically. The FatFs module currently does not support this feature. The LFN on the FAT file system is a patent of Microsoft. When use it on the commercial products, you have to be licensed.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 13 2008, 20:34
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата and Unicode - Local code mutual conversion table which occupies 256KB is required. А-а-а! Держите меня семеро - 256 килобайт только для поддержки длинных имён??? OMFG! Без ARM9 соваться нечего... придётся пока распрощаться с этой затеей
|
|
|
|
|
Dec 14 2008, 01:39
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(sonycman @ Dec 13 2008, 23:34)  А-а-а! Держите меня семеро - 256 килобайт только для поддержки длинных имён??? OMFG! Без ARM9 соваться нечего... придётся пока распрощаться с этой затеей  Зачем 256 килобайт знает только сам Чан. А остальные пользуются LFN даже на мегах с 2Кб ОЗУ и 32 флеши. Правда Read only.
|
|
|
|
|
Dec 14 2008, 14:48
|
Участник

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

|
You can try the uC/FS from Micruim, it supports IAR and Keil MDK compiler!
|
|
|
|
|
Dec 14 2008, 15:35
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(sonycman @ Dec 14 2008, 13:28)  В смысле, это с поддержкой только кириллицы и латиницы? А можно пример подобной реализации? http://delanet.ru/content/view/438/46/Исходники внизу страницы. Я глубоко не вникал, но там однозначно обрабатываются цепочки LFN. Вот тут - http://www.robs-projects.com/filelib.html еще библиотека. Эта вроде даже писать умеет.
|
|
|
|
|
Dec 14 2008, 16:51
|

Любитель
    
Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695

|
Цитата(bigarmer @ Dec 14 2008, 18:48)  You can try the uC/FS from Micruim, it supports IAR and Keil MDK compiler! But where to get it`s sources? Цитата(Qwertty @ Dec 14 2008, 19:35)  http://delanet.ru/content/view/438/46/Исходники внизу страницы. Я глубоко не вникал, но там однозначно обрабатываются цепочки LFN. Вот тут - http://www.robs-projects.com/filelib.html еще библиотека. Эта вроде даже писать умеет. Ого, спасибо. Интересные странички. Буду изучать ЗЫ:Вообще хотелось бы сделать так: ARM с MMC картой, при подключении к ПК - mass storage device (или свой софт на HID) для записи на диск. Всё остальное время - самостоятельное устройство с произвольным доступом к диску...
|
|
|
|
|
Dec 15 2008, 09:34
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 17-03-07
Из: Беларусь, Минск
Пользователь №: 26 249

|
Всем большое спасибо за ценные советы Цитата(prottoss @ Dec 13 2008, 16:14)  Какой порт??? FatFS, если имеется ввиду файловая система от ChaN, написана на чистейшем Си. Ни какого порта не надо. Единственное, нужно написать операции записи-чтения секторов для используемого носителя... Задача относительно простая. На сколько я знаю портирование чего либо - переписывание низкоуровневых функций, работающих с конкретным железом + переопределние типов (если надо) + мелкие исправления синтаксиса В FAtFS требуется переписать: disk_ioctl disk_write disk_read disk_status disk_initialize В ff004b IAR.zip - mmc.c и mmc_ll_SPI1.c - не считаю что это просто. К тому же я обратился сюда в надежде что есть готовый порт и мне не потребуется несколько дней тратить (как повезет) на переработку Все спасибо за внимание Да особое спасибо bigarmer-у за пустую ссылку http://www.micrium.com/nxp/LPC21xx.html#fsports
Сообщение отредактировал MaxEngee - Dec 15 2008, 09:58
|
|
|
|
|
Dec 15 2008, 10:05
|
Местный
  
Группа: Участник
Сообщений: 242
Регистрация: 10-06-08
Из: Хочу в пампасы...
Пользователь №: 38 192

|
Цитата(sonycman @ Dec 14 2008, 20:51)  But where to get it`s sources? Ого, спасибо. Интересные странички. Буду изучать ЗЫ:Вообще хотелось бы сделать так: ARM с MMC картой, при подключении к ПК - mass storage device (или свой софт на HID) для записи на диск. Всё остальное время - самостоятельное устройство с произвольным доступом к диску... Дык все уже украдено до нас... http://www.sparkfun.com/commerce/product_i...roducts_id=8627Как раз то, что Вам хотелось. Работает. С исходниками.
|
|
|
|
|
Dec 15 2008, 10:05
|
Участник

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

|
You need to register for downloading the source code.
|
|
|
|
|
Dec 15 2008, 12:18
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 17-03-07
Из: Беларусь, Минск
Пользователь №: 26 249

|
Блин точно, извеняюсь, поспешил с вопросом. Действительно есть еще одна библиотечка с общими определениями и настройками.
|
|
|
|
|
Dec 16 2008, 11:41
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 17-11-08
Пользователь №: 41 692

|
А это сможет работать в IAR на lpc2478 ???
|
|
|
|
|
Dec 16 2008, 11:49
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(MaxEngee @ Dec 16 2008, 12:56)  //1 while(!SSPSR_bit.RNE); IAR while(!(SSPSR & 0x4)); KEYL Раскритикую нафиг. "Магические цифры" вроде этой 0x4 - великое зло. Наверняка у кейла в заголовочном файле есть описание бита RNE. Или как #define RNE (1<<4) или как #define RNE 4. В таком случае эта запись должна выглядить либо while(!(SSPSR & RNE)) либо while(!(SSPSR & (1 < RNE))). Иначе уже через пару дней вы полезете копать user manual чтобы понять, какой же бит эта четверка означает. Цитата(MaxEngee @ Dec 16 2008, 12:56)  //1 PINSEL1_bit.P0_17 = PINSEL1_bit.P0_18 = PINSEL1_bit.P0_19 = 2; PINSEL1 |= 2<<2; PINSEL1 |= 2<<4; PINSEL1 |= 2<<6; PINSEL1 объявлен как volatile. Оба этих варианта приводят к совершенно лишним чтениям PINSEL1, а первая еще и к наложению масок (один из минусов объявления регистров как битовых структур). PINSEL1 |= (2<<1*2) | (2<<2*2) | (2<<3*2); Или сразу вынести в глобальную инициализацию и прописать сразу весь регистр через '=' (в ущерб модульности). Цитата(MaxEngee @ Dec 16 2008, 12:56)  Может можно хедеры ИАРа в кейле использовать? Можно, но полагаю у кейла заголовочные файлы не хуже. Цитата(MaxEngee @ Dec 16 2008, 12:56)  #define KHZ *1000l int freq=15KHZ; //для иара - 15 000
Кейл воспринимает только через пробел int freq=15KHZ; //для кейла - 15 int freq=15 KHZ; //для кейла - 15 000 Очень, очень странно. 15KHZ - единый токен, подстановки быть не должно. Оба должны были выдать ошибку. gcc поступает правильно: Цитата invalid suffix "KHZ" on integer constant Цитата(MaxEngee @ Dec 16 2008, 12:56)  На следующую запись Кейл ругаеться 208 for (Int32U Busy = 0, i = Twr; i && (Busy != 0xFF); --i) Это С99, возможно Кейл поддерживает только С89. Ненаказуемо.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 16 2008, 17:58
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 17-11-08
Пользователь №: 41 692

|
Меня походу проигнорировали... это сможет работать на lpc-2478 ? кто-нить может поделиться исходниками ? - буду очень признателен!
|
|
|
|
|
Dec 16 2008, 21:07
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Hermes @ Dec 16 2008, 19:58)  Меня походу проигнорировали... Или просто не знают ответ. Цитата(Hermes @ Dec 16 2008, 19:58)  это сможет работать на lpc-2478 ? За это время можно было просмотреть исходник на предмет используемой периферии, открыть два юзер мануала и сравнить описание этой периферии.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 17 2008, 10:08
|
Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 17-03-07
Из: Беларусь, Минск
Пользователь №: 26 249

|
Цитата(Hermes @ Dec 16 2008, 15:41)  А это сможет работать в IAR на lpc2478 ??? Слабо понятно что значит "это". Если вы имеете ввиду портированный FatFS - ff004b IAR.zip, и сможет ли он работать на lpc2478 --> Ответ НЕТ, Так как в ff004b IAR.zip низкоуровневые функции написаны для модуля SSP LPC2148. Цитата(Сергей Борщ @ Dec 16 2008, 15:49)  Можно, но полагаю у кейла заголовочные файлы не хуже. По поводу хедеров в Кейле. Там только определенны адреса регистров(что очень не удобно): /***********************************************************************/ /* This file is part of the uVision/ARM development tools */ /* Copyright KEIL ELEKTRONIK GmbH 2002-2005 */ /***********************************************************************/ /* */ /* LPC214X.H: Header file for Philips LPC2141/42/44/46/48 */ /* */ /***********************************************************************/ #ifndef __LPC214x_H #define __LPC214x_H /* Vectored Interrupt Controller (VIC) */ #define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000)) #define VICFIQStatus (*((volatile unsigned long *) 0xFFFFF004)) #define VICRawIntr (*((volatile unsigned long *) 0xFFFFF008)) #define VICIntSelect (*((volatile unsigned long *) 0xFFFFF00C)) #define VICIntEnable (*((volatile unsigned long *) 0xFFFFF010)) #define VICIntEnClr (*((volatile unsigned long *) 0xFFFFF014))
|
|
|
|
|
Dec 17 2008, 13:25
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 17-11-08
Пользователь №: 41 692

|
Цитата(Сергей Борщ @ Dec 17 2008, 00:07)  Или просто не знают ответ. За это время можно было просмотреть исходник на предмет используемой периферии, открыть два юзер мануала и сравнить описание этой периферии. Т.е. просто переопределить адреса регистров? простите за возможно глупые вопросы...
|
|
|
|
|
Dec 17 2008, 13:57
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 17-11-08
Пользователь №: 41 692

|
сегодня вечером попробую переопределить регистры... будем надеяться прокатит... если что буду еще спрашивать.... я пока что новичок.... Спасибо за ваши ответы!
|
|
|
|
|
Jul 27 2009, 12:10
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Всем привет! Нашел тут проект с ФатФс для Keil + GNU компилятор (проект под LPC2148). Попробывал его переделать под родной кейловский компилятор, инлайны заменил на __inline, вроде все скомпилилось, в дебаггере смотрю (окно VIC) - прерывания от Таймера0 и УАРТ регистрируются, но в уарт ничего не пишет. Стартап файл создал новый с помощью граф. редактора (все по Тревору) - вроде все норм, но в терминале прога ничего не пишет...
--------------------
Разработчик
|
|
|
|
|
Jul 27 2009, 13:55
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Походу дело в функции IrqEnable(); коорая в случае GCC компилятора объявлена в asmfunc.s файле как: Код .equ SWI_IRQ_EN, 1
IrqEnable: SWI SWI_IRQ_EN BX LR Вставляю это в свой проект - не пашет ...
--------------------
Разработчик
|
|
|
|
|
Jul 27 2009, 16:10
|

Местный
  
Группа: Свой
Сообщений: 307
Регистрация: 6-02-08
Из: Россия, Екатеринбург
Пользователь №: 34 798

|
Цитата(aaarrr @ Jul 27 2009, 20:39)  Дык а сделали то что? Или нужно угадать по рабочему проекту для GCC, почему он не работает у Вас под RV? Прпробывал вместо IrqEnable() вписать __enable_irq(). Прерывания от Uart0 и Timer0 в VIC регистрируются - а в терминале по-прежнему ничего нету...
--------------------
Разработчик
|
|
|
|
|
Aug 4 2009, 17:54
|
Частый гость
 
Группа: Участник
Сообщений: 161
Регистрация: 22-06-09
Из: Москва
Пользователь №: 50 531

|
Переделываю для LPC2478 на Кроссстудии, похоже все ассемблерные программы работают криво. Надо их полностью переписывать.
--------------------
Ты можешь знать все что угодно, но пока ты не доказал это на практике, ты не знаешь ничего!© Ричард Бах
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|