Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/79: Рейтинг темы: голосов - 79, средняя оценка - 4.56
hozi
0 / 0 / 0
Регистрация: 16.11.2015
1

spi_mmc на asm(е) по Ревичу

18.02.2011, 15:38. Просмотров 14208. Ответов 17
Метки нет (Все метки)

Всем привет!!
Вот решил поучиться assembler(у) по Ю.Ревичу - Практическое программирование микроконтроллеров Atmel AVR. По книге - в целом хорошая, да вот только водится за автором косячок - время от времени делать ошибки в коде и алгоритмах. Самый яркий пример, когда автор говорит, что процедура умножения 16 разрчдных чисел из апноутов НЕ ВЕРНА! И нахальным образом правит алгоритм :))) (см. стр. 143 гл.7). Впрочем здесь есть явная польза! Приходится думать и исправлять за автором ошибки и доводить задачи до ума.
Примерчики я решаю используя avr studyo + PROTEUS. Весьма неплохо выходит! Споткнулся на гл. 11 второй задаче - Запись и чтение flash карт. Пользую ATmega48. Откомпилил в studyo, в PROTEUSe подрубил на spi линию spi debugger. Сначала вообще флэха не инициализировалась. Доработал код инициализации - просто добавил перед CS=0 посылку 10 байт FF:
Код
MMC_ini:
;вот сюда добавил
ser temp;0xFF
rcall WR_spi;
ser temp;0xFF
rcall WR_spi;
ser temp;0xFF
rcall WR_spi;
ser temp;0xFF
rcall WR_spi;
ser temp;0xFF
rcall WR_spi;
ser temp;0xFF
rcall WR_spi;
ser temp;0xFF
rcall WR_spi;
ser temp;0xFF
rcall WR_spi;
ser temp;0xFF
rcall WR_spi;
ser temp;0xFF
rcall WR_spi;

cbi PORTB,CS;CS=0
ser temp;0xFF
rcall WR_spi
ldi temp,0x40;CMD0
rcall WR_spi;GO_IDLE_STATE
clr temp
rcall WR_spi;
clr temp
rcall WR_spi
clr temp
rcall WR_spi
clr temp
rcall WR_spi
ldi temp,0x95;CRC
rcall WR_spi
ser temp;0xFF
rcall WR_spi
ser temp;0xff
rcall WR_spi;
ldi count,8
delay_80:
ser temp;0xff
rcall WR_spi
dec count
brne delay_80
clr AdrHH
clr AdrHL
clr AdrLH
clr AdrLL

sd_ini:
ldi CMD,0x41;CMD1
;ldi CMD,0x58;CMD=write_btock

rcall Send_sommomd
cpi temp,0
brne sd_ini
;rcall out_som;
ser temp;0xff
rcall WR_spi;
sbi PORTB,CS;CS=1
ret
В PROTEUS в ответ шлет 01 и потом 00 как положено!
Далее запись-чтение, сначала пробую отработать запись:
Код
Read_write_MMC:

cbi PORTB,CS

clr AdrHH;
clr AdrHL
clr AdrLH
clr AdrLL
cmd1:
ldi CMD,0x58;CMD=write_btock
rcall Send_sommomd

cpi temp,0
brne cmd1

ser temp;0xff
rcall WR_spi

;rcall out_som
ldi temp,0xFE;
rcall WR_spi

;sbi PORTB,CS;CS=1

clr count;count=0
repeat_write1:
mov temp,count
rcall WR_spi
yms count;
brne repeat_write1:

clr count;count=0
repeat_write2:
mov temp,count
dec temp;
rcall WR_spi;
dec count
brne repeat_write2

ser temp;0xff
rcall WR_spi
ser temp;0xff
rcall WR_spi
ser temp;0xff
rcall WR_spi

ldi CMD,0x4D;CMD=write_btock
rcall Send_sommomd

woyt_write:
ser temp;0xff
rcall WR_spi
sbis PINB,MISO;
rjmp woyt_write

ser temp;0xff
rcall WR_spi
ser temp;0xff
rcall WR_spi

sbi PORTB,CS
На саму команду записи шлет ответ R1=00 - то бишь вск ОК. Далее псоле данных присылает 0D - то бишь data rejected due to a write error (согласно спецификации на mmc - data response). Тут я добавил команду CMD13=GET_STATUS=4D, чтобы понять в чем ошибка и получаю ответ типа r2 формата 2 байта: 00 24 = 00000000 00100100 - error и wp violation.
Как вылечить не могу найти, может кто знает как надо корректно писать и в чем ошибка??


<Изображение удалено>

Там на рисунке у меня по прерыванию кнопки происходит запись и должно чтение (т.е. вызывается эта процедура).
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2011, 15:38
Ответы с готовыми решениями:

Delphi и ASM - не работает вызов функции Invoke через asm
В Delphi не работает вызов функции Invoke через asm. часть кода: asm ...

Создание проекта с участием c++ и asm модулей. Ошибка asm модуля
Доброго времени суток! Подскажите, пожалуйста, как исправить данную ошибку...

pascal+asm, не подключается модуль asm
Не получается подключить модуль ассмблера ( находится в каталоге с .pas)). Для...

При сборке выдает ошибку "MASM: fatal error A1000: : 1.asm.asm"
&quot;MASM : fatal error A1000: : 1.asm.asm :\1&gt;link16 /TINY 1.asm.obj,...

IDE для для работы с STM8 (на ASM и C) и STM32 (на C, ASM)
Планирую перезод на МК от STM. Сегодня стал обладателем платки...

17
hozi
0 / 0 / 0
Регистрация: 16.11.2015
18.02.2011, 18:18 2
Прикрепил проект в studyo + схемку для протеуса. Может кто посмотрит и поймет че к чему.

[33.57 Кб]
0
hozi
0 / 0 / 0
Регистрация: 16.11.2015
20.02.2011, 15:39 3
Может кто кодом процедуры записи поделится? На asmе не могу найти.
0
ROYDIR
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 132
20.02.2011, 18:02 4
я тут немного не в тему. Просто я сеичас тоже по этой книге занимаюсь и остановился на примере на странице 110. Там про прерывания. Я код написал а в протеусе он почему то не работает. Не подскажешь что да как там. Код компилируется без ошибок.
0
botu_dork
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
20.02.2011, 18:22 5
to Hozi: кодом записи куда? Если в карту - то он у вас есть. приведен выше (Read_write_MMC:). в карту данные идут дуплексом - послали бит и получили ответный одновременно. если вы про работу с файловой системой - то я тоже не видел на асме - только на С. В асме нереально работать со структурами с тем же удобством как и на С. поэтому особо никто и не шарил исходники. да и убивши несколько недель в реализации файловой системы на асме - мало кто пожелает положить во фри такую работу. народ стал уважать свой труд и свое время.

В догонку о записи - для работы с фатом на запись - необходимо держать в памяти минимум 2 блока по 512(обычно) байт, плюс сам записываемый блок( еще 512). тоесть контроллер должен иметь на борту минимум 2К ROMа. Ну сами понимаете что даже о меге8 речь в таком случае не идет.
0
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
20.02.2011, 21:27 6
(в ужасе) Хуле там писать? Во время ДОСа реализация ФАТа была курсовиком для студентов, и обсосана до косточек в десятке книжек.
И как уважение своего труда коррелирует со свободой исходника? (Ваши слова огорчают коммунити линуксоидов.)
0
botu_dork
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
20.02.2011, 23:37 7
ну дык - кто счас юзает фат12 то? который в досе был темой курсовиков? фат32 ужо давно. 16й очень трудно - но можно найти еще. задача то скорее всего стоит перед человеком не дискетку 360 кбайт записать. а поди как минимум сд карту. плюс не всегда сектор 512байт - есть и 4 килобайта. а проблема в том - чтотаблица ссылок на кластеры - она не маленькая. можно все делать кусками по 512 байт - но сколько времени сожрет чтение заново таблиц перед каждой записью блока?
Файл то - может и не уместится в количество подряд идущих секторов. допустим надо записать мегабайт на карту - скажем логический анализатор какой. сэмплирует и пишет в реалтайме состояние 8бит входов на карту?
я не говорю что на асме и с малым обьемом памяти - это нельза сделать. Я говорю что человек которому надо запустить быстро комерческий продукт в серию - этим заниматься не будет. А для себя любимого - да , можно и реализовать. И упиваться своей крутизной. Я считаю что это будет действительно круто. Сам - точно не возьмусь, буду юзать С ( мне так проще). Но зауважаю человека который это сделает. Хотя и жаль его время. :(
0
botu_dork
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
20.02.2011, 23:51 8
Цитата Сообщение от Гарнист
И как уважение своего труда коррелирует со свободой исходника? (Ваши слова огорчают коммунити линуксоидов.)
Нука - поподробнее плиз какой процент из комунити - пишет драйвер файловой системы не на "гребаном С" а на "тру пацанском ASM" ? :) я говорю не про обычный кодинг :) я говорю про ***блю в особо извращенной форме - в лыжах, противогазе, с ручкой переключения передач от "Белаза" в заднице, все это внутри спального мешка лежащего под водой на глубине 10 метров. :) Я понимаю что мы русские любим создавать себе трудности - чтобы потом их с гордостью преодолевать - но не до такой же степени? Как корелируется опенсорс в принципе и неоправданная по количеству жопочасов работа? простите если чел будет год заниматься изобретением обычного круголого колеса - кто будет кормить его семью????
0
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
21.02.2011, 00:51 9
Батхёрт детектед?
Вдохните. Выдохните. Успокойтесь. Такое впечатление, что вас плётками гонят делать все те ужасные вещи, что вы описали. Не хотите? Не умеете? Так не делайте, и всё, какие проблемы?
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
21.02.2011, 01:10 10
Ну я написал на асме. И никаких 3 блоков по 512 байт не нужно, если не SDHC (да и то, одним можно обойтись). А вот выкладывать свой код я не буду, поскольку:
1. Могу (может быть, если будет настроение ) рассказать общую идею, подсказать по мелочам.
2. Кому очень надо - есть библиотека от Чена.
3. Студентам в курсовиках/дипломах я не помогаю.
4. Как бы ни было обидно опенсорс комунити линуксоидов - 99% быдлокод, сдобренный поддержкой немерянного количества компиляторов.
0
botu_dork
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
21.02.2011, 01:19 11
собсно я както не напрягался и выдыхать не нужно. я спокоен аки вода в болоте :) и тролить тоже - небыло желания. а предыдущий чел - все адекватно расписал :)
0
botu_dork
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
21.02.2011, 01:35 12
Цитата Сообщение от Гарнист
Не хотите?
Не хочу :) и честно в этом признался. :) вопрос был ЗАЧЕМ это делать? зачем оправдывать свою лень в изучении С тем что ASM кошернее? когда было времени валом - я и писал на ASM. а как задачи выросли - молча полез пилить С. Время разработки и тем более переноса проекта с одной платформы на абсолютно другую( типа с AVR на ARM или MIPS, про DSP вообще молчу) - сократилось в десятки раз. а сложность самих проектов - выросла.
Я вообще не про это все говорил. Я говорил о необходимости расширять кругозор и изучить хотя-бы на уровне понимания - чего что делает язык С, в добавок к любимому асму. Ведь досих пор полно успешных контор - делающих успешные проекты на асме на С51м ядре. но я невидел например - кассовых терминалов с этим ядром, не видел paybox`ов на нем. зато на том же арме - они презент. дык человеку - знающему не только асм конкретной платформы но и базовый С не надо будет ждать когда его заменят мальчиком после универа в случае перехода конторы на новое ядро. Ему будет монопенисуально под какую платформу писать код. ну а если развиваться лень.....

кто хочет - ищет возможность,кто не хочет - ищет причину. :)
я лично - флудить прекращаю :) ибо вроде не письками мерялись :) просто пытался донести мысль - что однобокость мышления и собственная лень - есть тормоз в развитии спеца.
0
botu_dork
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
21.02.2011, 01:38 13
Цитата Сообщение от THI BIOST
Ну я написал на асме. И никаких 3 блоков по 512 байт не нужно, если не SDHC (да и то, одним можно обойтись).
хочу уточнить правильно ли я понял- речь идет именно о записи файла контроллером на носитель форматированный в ФАТ32? и файл большого размера - пишется в свободные - не идущие подряд сектора?

Добавлено позже :
Так - сыплю голову пеплом на тему рама. давненько не заходил сюда( вернее с год а то и с полтора года) http://itm-chan.org/fsw/ff/pf/appnote.html
Все чудненько умещается в 44 байта ROM :) сымаю шляпу. но написано на С ;) и скорость записи - обнять и плакать. кода отжирает относительно немного : 5 килов из флэши при компиляции со всеми опциями.
ну уже в мегу 8ю помещается. :) в этом плане был не прав - каюсь. :)

Но С учить - надо!!!! :D и не раскрыта тема со случаями больших файлов на сильно фрагментированном диске. возможно будет притормаживать.
0
hozi
0 / 0 / 0
Регистрация: 16.11.2015
21.02.2011, 08:11 14
Цитата Сообщение от ROYDIR
я тут немного не в тему. Просто я сеичас тоже по этой книге занимаюсь и остановился на примере на странице 110. Там про прерывания. Я код написал а в протеусе он почему то не работает. Не подскажешь что да как там. Код компилируется без ошибок.
Нашел проект 5_13 (я так понял это тот самый на стр. 110). Сейчас не вдавался что и как там работало. Проверил работает в ПРОТЕУСЕ, светодиоды мигают при нажатии кнопки. Для ПРОТЕУСА схемка немного урезана для работоспособности. Надеюсь это то что надо.

[27.92 Кб]
0
hozi
0 / 0 / 0
Регистрация: 16.11.2015
21.02.2011, 08:52 15
У меня создается впечатление, что задача на самом деле сложнее и требует более глубоких знаний, чем предполагает автор. Я же надеялся с наскока сделать примерчик. И про всякие там FATы я особо и знать не знаю. Знаю, что при форматировании диска нужно выбрать одно из двух: FAT или NTFS :)). В общем наверно пропущу этот пример и пойду дальше, тем более практичекой цели у меня не стоит работать с MMC картой.
Процедура чтения похоже рабочая. Потому как если заменить файл образа mmc из чужого рабочего проекта на Си, то какие-то данные читаются из указанной области. С созданием mmc файлов тоже особого желания разбираться не было.
Разве что кто-нибудь попробует на пальцах вкратце описать чайнику проблему в общих чертах?
0
botu_dork
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 544
21.02.2011, 15:12 16
В общих чертах - карточку можно использовать как обычную dataflash - если стоит задача просто сохранять данные больших обьемов. Вернее если не обязательно потом считывать с карты как с диска(есть альтернативный способ - на свеже отформатированную карточку пишется заголовок файла а потом подрят пишутся сектора. Тогда с карты можно будет считать файл если после записи сектора обновлять длину файла). Многие вообще не заморачиваются с файловой системой. Карта позволяет выбрать сектор в который будет идти запись. просто читаеш данные о размере карты и потом по кольцу или до конца ее размера посекторно пишеш данные. получается чтото типа EEPROM на компе карта видется не будет если снесеш данные разметки файловой системы. Поэтому надо будет делать ридер для компьютера. Если твое устройство подключено к компу непосредственно - достаточно использовать UART с преобразователем уровня( или чипом usb2som) или реализовать USB непосредственно самим контроллером. Если устройство где-то стоит в другом месте - надо делать ридер на контроллере. но это только при случае что данные из карты - надо както анализировать на компе.
0
Tobki
0 / 0 / 0
Регистрация: 21.02.2011
Сообщений: 25
26.02.2011, 03:05 17
Самый яркий пример, когда автор говорит, что процедура умножения 16 разрчдных чисел из апноутов НЕ ВЕРНА! И нахальным образом правит алгоритм :)))
Вообще то он все правильно делает. Я вставлял себе в программу эти процедуры. Там действительно ошибка в исходниках апнота.
0
ptsyst
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 287
26.02.2011, 15:07 18
В общих чертах - карточку можно использовать как обычную dataflash - если стоит задача просто сохранять данные больших обьемов.
... на компе карта видется не будет если снесеш данные разметки файловой системы. - надо делать ридер на контроллере. но это только при случае что данные из карты - надо както анализировать на компе.
Карты памяти без файловой системы можно без труда считывать/записывать через обычный внешний картосчитыватель с помощью программ, имеющих функциональность прямого чтения карт для снятия образа - типа:
- универсальной WinHex (в меню надо открыть ММС как физический диск и считать/записать образ)
- или узкоспециализированной под S7 S7imgwr (то есть каждый может написать свою под себя)

Пример считываемой особоформатированной карты ММС для контроллеров Сименс - используется штатно для хранения программы и записи данных во время работы
(карта объёмом 16 мбайт представляется как 64 КБайтная не РС-карта с резервированием областей - фирменная штучка Сименса)


<Изображение удалено>
*картинка не моя нашёл поиском: сообщение об ошибке - может глючить на некоторых встроенных в нотебук картосчитывателях, при этом нормально читается на внешних картосчитывателях.
0
26.02.2011, 15:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2011, 15:07

ASM в С++
Здравствуйте! Нужна помощь!!! Всем откликнувшимся заранее спасибо! Как работать...

asm
Как поместить в адрес &quot;0047C248&quot; значение $A0?

asm в C#
Ребята всем привет, вопрос такой: У меня есть ассемблеровская программа, можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru