реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> MSP430F149 и NAND128W3A, Не получается полностью стереть флешку
foster2002
сообщение May 8 2009, 03:44
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 29-01-09
Пользователь №: 44 145



Написал небольшую программку для стирания данной флешки. Проблема в том, что все время остаются некоторые страницы не стертые.
Программатор ChipProg48 флешку стирает полностью.. а каждый раз выпаивать флешку и проверять на програматоре геморно. Читать процом флеш смысла нет, так как нет житага, можно конечно светодиодик припаять.
Возможно я где-то что-то упустил в командах работы с флешкой?
Стираю следующим образом: даю команду сброса, потом команду стирания блока (60h), два байта адреса блока, подтверждение (D0h), читаю регистр статуса на предмет ошибки стирания,если есть ошибка-пытаюсь еще 9 раз стереть этот блок, потом пропускаю и следующий и тд, всего блоков вроде как 1024, тоесть адрес просто инкрементрую каждый раз.
Прога писана на асме,так так для MSP ничего до этого не писал, да и С++ не очень дружу

CODE
#include <msp430x14x1.h>


;******************************************************************************
ORG 4000h
;******************************************************************************



RESET mov #0A00h, SP
mov #5A80h, &WDTCTL
bis #80h, SR
mov.b #60h, &DCOCTL
mov.b #84h, &BCSCTL1
clr.b &BCSCTL2
and.b #0E7h, &P2SEL

and.b #0E7h, &P2DIR

bis.b #18h, &CAPD
mov.b #2, &CACTL2
mov.b #6Ch, &CACTL1
mov.b #6, &CACTL2
mov #0Fh, R12
call #delay_by_R12

WER:
clr R14
mov #32h, R13

CABA:
mov R13, R15
mov R15, R13
add #0FFFFh, R13
tst R15
jeq CACE
bit.b #1, &CACTL2
jnc CABA
inc R14
jmp CABA

CACE:
cmp #32h, R14
jne CAD8
mov.b #1, R12
jmp dfg

CAD8:
clr.b R12
dfg:
tst.b R12
jeq WER

clr.b &P1DIR
clr.b &P1SEL


mov.b #80h, &P1OUT
bis.b #0FCh, &P1DIR
clr.b &P2DIR
clr.b &P2SEL
clr.b &P2OUT


bis.b #64h, &P2DIR

clr.b &P3DIR
clr.b &P3SEL
mov.b #6Ah, &P3OUT
bis.b #7Bh, &P3DIR
clr.b &P4DIR
clr.b &P4SEL
mov.b #0C0h, &P4OUT
bis.b #0EBh, &P4DIR
clr.b &P5DIR
clr.b &P5SEL
mov.b #98h, &P5OUT
mov.b &P5DIR, R10
mov.b #00FFh, &P5DIR
clr.b &P6DIR
clr.b &P6SEL
mov.b #4, &BCSCTL1
mov.b #0Ah, &BCSCTL2

C92:
bic.b #2, &IFG1
mov #0Ah, R12
call #delay_by_R12
bit.b #2, &IFG1
jc C92
bis.b #80h, &BCSCTL2
bic #80h, SR
bis.b #40h, &P2OUT
clr R9
;************************************* сброс флешки

mov.b #0B0h, &P5OUT
mov.b #0FFh, &P6DIR
mov.b #30h, &P5OUT
mov.b #0FFh, &P6OUT
mov.b #0B0h, &P5OUT
mov.b #98h, &P5OUT
clr.b &P6DIR

delay0:
tst.b &P2IN
jge delay0

;************************************** стирание флеш
mov.b #0000h, R14
erase_block:


mov.b #0B0h, &P5OUT
mov.b #0FFh, &P6DIR
mov.b #30h, &P5OUT
mov.b #60h, &P6OUT
mov.b #0B0h, &P5OUT
mov.b #0D0h, &P5OUT
mov.b #50h, &P5OUT
mov.b R14, R13

mov.b R13, &P6OUT
mov.b #0D0h, &P5OUT
mov.b #50h, &P5OUT
mov R14, R13
swpb R13
and #0FFh, R13

mov.b R13, &P6OUT
mov.b #0D0h, &P5OUT
mov.b #90h, &P5OUT
mov.b #0B0h, &P5OUT
mov.b #30h, &P5OUT

mov.b #0D0h, &P6OUT
mov.b #0B0h, &P5OUT
mov.b #98h, &P5OUT

delay:
tst.b &P2IN
jge delay
mov.b #0B0h, &P5OUT
mov.b #30h, &P5OUT
mov.b #70h, &P6OUT
mov.b #0B0h, &P5OUT
mov.b #98h, &P5OUT
clr.b &P6DIR
mov.b #80h, &P5OUT
mov.b &P6IN, R12
mov.b #98h, &P5OUT
;bic.b #40h, &P2OUT

bit.b #1, R12
jeq rto
inc R9
cmp #010h, R9
jne erase_block


rto clr R9
inc R14
cmp #0400h, R14
jne erase_block
loop jmp loop
;*******************************************
delay_by_R12:
mov R12, R15
time:
tst R15
jeq exitt
add #0FFFFh, R15
jmp time
exitt:
ret

ORG 0FFFEh ; MSP430 RESET Vector
DW RESET ;
END
Go to the top of the page
 
+Quote Post
foster2002
сообщение May 14 2009, 11:03
Сообщение #2





Группа: Новичок
Сообщений: 3
Регистрация: 29-01-09
Пользователь №: 44 145



Прочитал на программаторе флешку-стерта до F00000h, тоесть до 15МБ, адреса стираемых блоков делал от 0 до 1023, а F00000h это 960 блоков. Подскажите почему так получается, 2 дня уже бьюсь блин smile.gif
Go to the top of the page
 
+Quote Post
foster2002
сообщение May 20 2009, 06:03
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 29-01-09
Пользователь №: 44 145



вот я ступил, надо было адрес блока прибавлять не 1, а 32, в даташите на флеш же ясно было написано smile.gif)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 20 2009, 08:28
Сообщение #4


Гуру
******

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



Цитата(foster2002 @ May 20 2009, 09:03) *
вот я ступил
А как вы будете тупить, смотря через месяц в такой исходник: "что означают эти магические числа?". Согласитесь, что WDTPW | WDTHOLD куда понятнее, чем 0x5A80. И одна из причин того, что вы не получили ни одного ответа - никому не хочется лезть в даташит и переводить ваши магические числа в комбинации битов.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 14:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016