|
Ищу функции работы с SD картой, написанные для KEIL и SAM7 |
|
|
|
May 21 2010, 09:24
|

Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 8-08-08
Из: Новосибирск
Пользователь №: 39 488

|
Цитата(zheka @ May 21 2010, 16:17)  в проекте есть строка __ramfunc void timer0_c_irq_handler(void); ругается на __ramfunc. Что это я знаю, чем заменить это в KEIL - нигде информации не нашел. Можете подсказать? вы свою ветку давно смотрели?
|
|
|
|
|
May 21 2010, 09:40
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zheka @ May 21 2010, 13:17)  в проекте есть строка __ramfunc void timer0_c_irq_handler(void); ругается на __ramfunc. Что это я знаю, чем заменить это в KEIL - нигде информации не нашел. Можете подсказать? Если знаете что это, то могу предложить два варианта замены: 1. #define __ramfunc /* Ничего, поживет и во флеши, нам проект пока собрать надо */ 2. Перед timer0_c_irq_handler написать: #pragma arm section code = "ramfunc", после - #pragma arm section code В области RAM scatter-файла добавить запись * (ramfunc) Ну, минут 20 надо на чтение документации, не больше. Цитата(igorenja @ May 21 2010, 13:24)  вы свою ветку давно смотрели? CARM давно упразднили.
|
|
|
|
|
May 21 2010, 09:57
|

Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 8-08-08
Из: Новосибирск
Пользователь №: 39 488

|
Цитата(aaarrr @ May 21 2010, 16:40)  CARM давно упразднили. Да... Я просто не читал что там Вот ещё: Цитата Take a look to the on-line file
C:\Keil\ARM\Hlp\RVI.CHM - Embedded Programs - Specific Memory Areas.
Example in: C:\Keil\ARM\Examples\RAM_Function взято отсюда
|
|
|
|
|
May 21 2010, 10:21
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Лады, сделал. Ругается на __inline void AT91F_SSC_SetBaudrate ( Ругается так: "lib_AT91SAM7S64.h(52): error: #77-D: this declaration has no storage class or type specifier" кто-то мне наоборот советовал inline заменить на __inline Я сделал так же как с ramfunc. Компилируется. Но чем чревато отключение inline? Вот только думаю, будет ли работать, когда доберусь до отладочной платы. Биботека MMC.c: Код static void power_on (void) { // PORTE &= ~0x80; /* Socket power ON */ // for (Timer1 = 3; Timer1; ); /* Wait for 30ms */ // PORTB = 0b10110101; /* Enable drivers */ // DDRB = 0b11000111; // SPCR = 0b01010000; /* Initialize SPI port (Mode 0) */ // SPSR = 0b00000001; } Скачал с этого форума. Автор утверждает, что код "на ходу".
|
|
|
|
|
May 21 2010, 10:42
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zheka @ May 21 2010, 14:21)  Ругается на __inline void AT91F_SSC_SetBaudrate ( Сдается мне, что с дефайнами в вашем проекте капитальный бардак. P.S. Я бы советовал вообще выбросить всю lib_BLA-BLA-BLA вместе с ее безмозглым содержимым, но это на будущее. Цитата(zheka @ May 21 2010, 14:21)  Вот только думаю, будет ли работать, когда доберусь до отладочной платы. На то он и код "с интернета", чтобы терзаться подобными сомнениями.
|
|
|
|
|
May 21 2010, 14:11
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zheka @ May 21 2010, 17:58)  а куда же без lib_bla-bla-bla? Без нее ругается. Ее нехитрое содержимое лучше заменить на написанное руками и головой. Цитата(zheka @ May 21 2010, 17:58)  в общем код - каша! Вот именно. И тут уже никто не поможет.
|
|
|
|
|
May 21 2010, 14:41
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Головой... это если с нуля самому. А что делать если в отладочной плате olimex входы card_presence и card_write_protect это 15 и 25 пины, а в поставляемой производителем же библиотеке: Код while(((m_pPio->PIO_PDSR) & BIT15)) { /*put your card present event here*/ } //WP - write protect while(((m_pPio->PIO_PDSR) & BIT16)) { /*put your write protect event here*/ } имея исходные данные, в правильности которых уверен, было бы намного проще работать руками и думать головой.
|
|
|
|
|
May 21 2010, 16:42
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Ошибку в olimex'совском примере исправил, предлагаемые функции запичи и чтения блоков работают. Но это не подходит для FatFS... Ковыряюсь дальше... Так, решил еще раз штурмом взять пример c сайта elm. Дошел вот до каких ошибок: Код #ifndef RTC_H_
#include <stdint.h> #include <stdbool.h>
typedef struct { uint16_t year; /* 1..4095 */ uint8_t month; /* 1..12 */ uint8_t mday; /* 1.. 31 */ uint8_t wday; /* 0..6, Sunday = 0*/ uint8_t hour; /* 0..23 */ uint8_t min; /* 0..59 */ uint8_t sec; /* 0..59 */ uint8_t dst; /* 0 Winter, !=0 Summer */ } RTC_t; //* ОШИБКА rtc.h(15): error: #256: invalid redeclaration of type name "RTC_t" (declared at line 15)
int rtc_init(void); bool rtc_gettime (RTC_t*); // ОШИБКА rtc.h(18): error: #147-D: declaration is incompatible with "bool rtc_gettime(RTC_t *)" (declared at line 18) bool rtc_settime (const RTC_t*); // ОШИБКА rtc.h(19): error: #147-D: declaration is incompatible with "bool rtc_settime(const RTC_t *)" (declared at line 19)
#endif Ну помогите же мне, я почти у цели!!
Сообщение отредактировал zheka - May 21 2010, 17:40
|
|
|
|
|
May 21 2010, 18:51
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(zheka @ May 21 2010, 22:42)  Дошел вот до каких ошибок: "... Саня Дрозд дошел до буквы «И» в слове «передовую»." © Стругацкие, «Понедельник начинается в субботу». Цитата Ну помогите же мне, я почти у цели!! Мне почему-то кажется, что если бы вы не тратили столько времени на написание вопрошающих постов, а просто сели и спокойно подумали, то уже давно бы во всём разобрались.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
May 21 2010, 18:52
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Когда Вы пишете Код #ifndef RTC_H_ следующей строкой должно быть Код #define RTC_H_ чтобы содержимое данного файла не подключалось к проекту дважды
|
|
|
|
|
Jun 17 2010, 09:52
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

|
Цитата(toweroff @ Jun 9 2010, 19:15)  попробовал. Все компилится, функции в IRAM не размещаются... Короче вывод такой(в кейле): сколько десятков раз на форуме про это спрашивали, так ничего путёвого и не сказали. Походу выход один : Alt+F7 на файле, Code/Const в IRAM. Осилить премудрости scatter-а может и можно,но ....
|
|
|
|
|
Jun 28 2010, 11:12
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
To zheka: я "портировал" FatFs на at91sam7s256 месяца 3 назад. Это был экспериментальный проект. Со скачанным кодом я не разбирался, просто почитал описание основных процедур ну и добавил низкоуровневые ф-ции чтения-записи на SDшку. С 2Гб Kingston'ом все работало. Скорость там была, конечно, не ахти, но работало. Если хотите, могу скинуть Вам проектик в Keil'е. Там, конечно, неопрятно все, но при желании разобраться можно. Если, это интересно еще кому-нибудь, могу выложить архивчиком.
Сообщение отредактировал Nikitoc - Jun 28 2010, 11:12
|
|
|
|
|
Jun 29 2010, 07:46
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Цитата(sonycman @ Jun 29 2010, 07:13)  А почему скорость "не ахти"? В районе скольки КБ/сек? Честно скажу - скорость не помню. Возможно, конечно, тестирование было не слишком объективным: я записывал через картридер файл, а во время тестирования ARM создавал на карточке еще один и копировал в него содержимое первого файла. Дело занимало несколько секунд, но я не помню размера файла-источника, чтобы даже примерно ответить, какая была скорость. Честно говоря, самому досадно. Когда понадобится применить это в каком-нибудь проекте придется заново разбираться Помню, правда, что в значительной мере, скорость работы ограничивалась SD-картой (в частности, процессом чтения).
|
|
|
|
|
Jun 29 2010, 12:10
|

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

|
Цитата(Nikitoc @ Jun 29 2010, 14:41)  Возможно. Тактовая частота 25Мгц. Резисторы согласования (33 Ом) я не ставил. Наблюдалась такая странность: при потоковом чтении между считыванием секторов приходилось делать задержку ~100us (и это не ожидание 0xFE, а именно пауза без тактирования !). Иначе не читалось. Возможно это была особенность той карточки. При потоковой записи такого не наблюдалось. Вполне возможно, что это нормально. Карте надо время, чтобы подготовить данные. Зато потом они идут практически сплошным потоком. А в Вашем случае токен начала передачи 0xfe что, совсем отсутствовал без снятия клока?
|
|
|
|
|
Jun 29 2010, 13:26
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Цитата(sonycman @ Jun 29 2010, 15:10)  А в Вашем случае токен начала передачи 0xfe что, совсем отсутствовал без снятия клока? Ну, точно не помню, конечно, но чтение зависало на первом же буфере (2048 байт) после первого или второго сектора, если не было паузы. Цитата Вполне возможно, что это нормально. Карте надо время, чтобы подготовить данные. Зато потом они идут практически сплошным потоком. Это было бы классно, если бы можно было предугадать - когда нужна пауза, а когда нет.
Сообщение отредактировал Nikitoc - Jun 29 2010, 13:26
|
|
|
|
|
Jun 29 2010, 18:00
|

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

|
Цитата(Nikitoc @ Jun 29 2010, 17:26)  Это было бы классно, если бы можно было предугадать - когда нужна пауза, а когда нет. Согласно документации: Block Read Access Time 0.5 ms - 100 ms (max). Алгоритм мультисекторного чтения простой: 1. Даём команду CMD18, через NCR (максимум 64 клока) получаем ответ. 2. Ждём токен 0xfe (он появится через 0.5 ms - 100 ms). 3. Читаем 512 байтный сектор. 4. переходим на п.2 пока не прочтём все сектора. 5. Прекращаем чтение командой CMD12. Мне пришлось поработать всего с несколькими карточками, но проблем с тормозами не было - прямое мультисекторное чтение давало скорость в 1.4 мегабайта в сек. на 12 МГц (или 18 МГц - уже не помню) SPI.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|