roboforum.ru

Технический форум по робототехнике.

MiniBot Bootloader

Re: MiniBot Bootloader

Vooon » 06 авг 2008, 10:33

Сижу с телефона. Бут совместим с авр109? Выложите скрин плз.

Re: MiniBot Bootloader

svp » 06 авг 2008, 12:31

Vooon писал(а):Сижу с телефона. Бут совместим с авр109? Выложите скрин плз.

Поясню, а-то, вижу. есть непонимание. Или может я чего не понимаю?
Прога предназначена для заливки новых прошивок в специально подготовленные контроллеры. Для подготовки в контроллер, например на заводе, вшивается т.н. BootLoader -- маленькая программка 1-2 кб, которая по какому-то событию начинает слушать уарт на предмет загрузки прошивки в основную флеш-память программ.
Дельфёвская прога, о которой тут идёт речь, всего лишь отправляет последовательно на выбранный комп-порт, а следовательно через какой-то преобразователь COM-UART в контроллер загрузчику содержимое HEX-файла. Вот и всё. Так что речи нет о том с каким контроллером совсместим этот загрузчик, всё зависит от токо какая прошивка и какой Bootloader предпрошит в контроллере.
Если не прав -- поправьте.
Вот скриншот
Вложения
BM_Flasher_scr.jpg
Скриншот к MiniBot Flasher'у

Re: MiniBot Bootloader

blindman » 06 авг 2008, 12:48

AVR109 - это атмеловский аппноут, описывающий протокол общения с бутлоадером. Этот пртокол используют многие программаторы(см. например AVR911), AVR studio, STK500 не использует. Де-факто стандарт. Бутлоадер, с которого начался этот топик, как раз использует этот протокол

Re: MiniBot Bootloader

EdGull » 06 авг 2008, 16:07

так, погодите!
а по какому событию мы будем переходить в режим самоперепрограммирования?

Re: MiniBot Bootloader

Myp » 06 авг 2008, 16:12

как обычно =)
включаемся и ждём команду по усарту
еси нет то загружаемся до конца

BootLoader -- маленькая программка 1-2 кб, которая по какому-то событию начинает слушать уарт на предмет загрузки прошивки в основную флеш-память программ.

Re: MiniBot Bootloader

blindman » 06 авг 2008, 16:21

EdGull писал(а):а по какому событию мы будем переходить в режим самоперепрограммирования?

После сброса в течение 1-2 секунд ждем прихода по усарту буквы 'P'. Если не дождались, переходим к исполнению основной программы. За эти 2 секунды надо успеть нажать на компе кнопку запуска программирования.

Re: MiniBot Bootloader

EdGull » 06 авг 2008, 16:24

это хорошо!
значит сегодня вчером будем пробывать всё собрать в кучу
если получится, то будем поставлять миниботы с мостом USB-UART и бутзагрузчиком :Bravo:

Re: MiniBot Bootloader

Myp » 06 авг 2008, 17:05

После сброса в течение 1-2 секунд ждем прихода по усарту буквы 'P'. Если не дождались, переходим к исполнению основной программы. За эти 2 секунды надо успеть нажать на компе кнопку запуска программирования.

:shock: данунафик проще застрелиться

1. как минимум нужно сделать автоматическую заливку
тоесть жмём в проге кнопку, она залипает и прога слушает момент ресета МК, потом неспеша жмём ресет в миниботе, и заливка стартует.
2. как максимум прошивка без ручного ресета МК по совету Тов. mandigit
подходит для варианта перепрошивки через блютус/зигби
запрещаешь прерывание,
меняешь битик, указывающий где находится таблица прерываний
вызываешь бутлоадер по абсолютному адресу


также Тов. bodja располагает обширной информацией по бутлоадеру а также имеет бутлоадер который может записывать не тока МК но и сразу заливать инфу во внешнюю флешку
но его тут давненько небыло...

Re: MiniBot Bootloader

blindman » 06 авг 2008, 17:16

Myp писал(а):
После сброса в течение 1-2 секунд ждем прихода по усарту буквы 'P'. Если не дождались, переходим к исполнению основной программы. За эти 2 секунды надо успеть нажать на компе кнопку запуска программирования.

:shock: данунафик проще застрелиться

Это стандартная процедура. Ее достоинство в том, что при написании программы не нужно думать о том, где у нас находится бутлоадер, и как к нему обратиться. Вообще о его существовании при программировании можно забыть.
Myp писал(а):1. как минимум нужно сделать автоматическую заливку
тоесть жмём в проге кнопку, она залипает, потом неспеша жмём ресет в миниботе и заливка стартует

Согласен, здравая мысль.
Myp писал(а):2. как максимум прошивка без ручного ресета МК по совету Тов. mandigit
подходит для варианта перепрошивки через блютус/зигби
запрещаешь прерывание,
меняешь битик, указывающий где находится таблица прерываний
вызываешь бутлоадер по абсолютному адресу


также Тов. bodja располагает обширной информацией по бутлоадеру а также имеет бутлоадер который может записывать не тока МК но и сразу заливать инфу во внешнюю флешку
но его тут давненько небыло...


См. выше. Кроме того, наверняка потеряется совместимость с существующим софтом, в частности AVR studio.

Re: MiniBot Bootloader

frig » 06 авг 2008, 22:46

Там нет ничего сложного. А выносить редко меняемые настройки (которые, по сути, раз и на всегда устанавливаются), в основное окно -- это наоборот усложнит интерфейс.
Устраивай голосование и референдум=). Иначе не соглашусь.


не надо нам в интерфейсе редкоменяемые настройки. их надо держать в ini файле. не для новичков это дело.

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

сделай, будь другом, просто одну формочку со списочком хексов в одной половине, мемо с описанием в другой, 2-мя выпадающими списками порт и скорость и одной кнопочкой "прошить". ни окошка хекса, ни сложных настроек в интерфейсе не надо. и даже можно обойтись без загрузки свежих прошивок попервам...

прошу от лица всех чайников. :beer:

Добавлено спустя 1 минуту 21 секунду:
можно это назвать "версия для чайников".

а то что сейчас - pro.

Re: MiniBot Bootloader

Myp » 07 авг 2008, 00:34

blindman
ну по поводу 2 пункта эт я уже не для простых смертных...


по 1 пункту я тоже совершенно согласен, это стандартная процедура, при ресете лить
я имел в виду что двумя руками жать кнопки и ловить один момент это не айс :)

вобще нуно добавить в программу МК которая обрабатывает управляющие команды от компа
исключение типа на команду "reset" делать ресет микроконтроллера(например завести соседнюю ногу мк на ресет)
тогда нажав кнопку прошить, комп посылает команду на ресет, робот ресетится и заливается проша :)

Re: MiniBot Bootloader

EdGull » 07 авг 2008, 12:28

ну короче, наваял я тут... :oops:

теперь ничего ни где жать ненадо.
запускаем бутлоадер на ПК, он как тока получил строку "Checkboot" шлет Р
и минибот переходит в режим программирования

так что давайте переписывайте бутлоадер для ПК под эту фичу

Код: Выделить всёРазвернуть
$regfile = "m32DEF.dat"
$baud = 38400
$crystal = 8000000


'светодиоды

Config Pinc.6 = Output : Led Alias Portc.6 : Led = 0


Dim S As Byte
Dim Tmp1 As Byte




For Tmp1 = 1 To 255
   Print "Checkboot " ; Tmp1
   Waitms 10
   S = Inkey()
   If S = 80 Then
      Print ""
      Print "programing!!!"
      'Jmp $3800
      Wait 3
   End If
Next

Do
   Led = 1 : Waitms 250
   Led = 0 : Waitms 250
Loop



















'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'                    B O O T  L O A D E R
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

'The fusebit FE is set so that we have 512 bytes for the boot code
'Only a part is used btw
'But it sets the bootstart address to 1E00 hex. which happens to be in the M161 too

'The $boot diretive will bind the code below into address specified
'This will generate large files with FFFF opcode from the end of the normal program to the start
'of the bootcode
'Note that the bootloader is written in ASM. This because the bootloader may not call routines from
'the main program. Why? Because during programming they get erased!
$boot = $3800

'no interrupts are allowed during bootloader programming
Disable Interrupts


'Standard Intel hex file can be sent
':10 0000 00 0C 94 2400189500001895000018950000 25
':00 0000 01 FF
' size , address,record type, data, checksum
'The sample bootloader does not use the checksum

'The same baudrate is used as the main program is using
'but we can change it here when we like. Just unremark the next line and/or change it
'But take in mind that the bootloader sender must use the same baud rate !!!
'Baud = 19200


clr r18                                          ; word counter for written data
clr r23                                          ; page counter

rcall _erase_page                                ; erase first page

_read_lines:
  rcall _rec_line                                ; get line into SRAM pointed by X
  ldi r26,$61                                    ; point to start of line
  clr r27
  ld r24,x+                                      ; get char in r24
  rcall _hex2number                              ; convert result in r17
  ld r24,x+
  rcall _hex2number2                             ; convert second char , r17 holds the number of hex pairs to get
  mov r19,r17                                    ; number of entries
  tst r19
  brne _readnext                                 ; not the end record
  rjmp _write_last_page                          ; final line so write the last page

_readnext:
  adiw xl,6                                      ; point to first pair
_readnextpair:
  ld r24,x+                                      ; get char in r24
  rcall _hex2number                              ; convert result in r17
  ld r24,x+
  rcall _hex2number2                             ; convert second char , r17 holds the data
  mov r0,r17                                     ; save in r0
  dec r19                                        ; adjust pair data counter
  ld r24,x+                                      ; get char in r24
  rcall _hex2number                              ; convert result in r17
  ld r24,x+
  rcall _hex2number2                             ; convert second char , r17 holds the data
  mov r1,r17                                     ; save data
  rcall _write_page                              ; write into page buffer
  cpi r18,64                                     ; page is 128 bytes is 64 words
  breq _writeit                                  ; write page since it is full
_lbl1:
  dec r19                                        ; adjust data pair
  brne _readnextpair                             ; more data
  rjmp _read_lines                               ; next line

_writeit:
  rcall _save_page                               ; save page
  rcall _erase_page                              ; erase next page
  Rjmp _lbl1                                     ; continue

_write_last_page:
  rcall _save_page                               ; save last page
  rjmp _exit_page                                ; exit needs a reset



' get 1 byte from serial port and store in R24
_recbyte:
  Sbis USR, 7                                    ; Wait for character
  rjmp _recbyte
  in r24, UDR                                    ; get byte
Ret

'get one line from the serial port and store in location pointed by X
_rec_line:
  ldi r26,$60                                    ; point to first location in SRAM
  clr r27
_rec_line5:
  sbis usr,5
  rjmp _rec_line5
  ldi r24, 63 ; ?
  !out udr,r24                                   ; show ? so we know we can send next line
_rec_line1:
  rcall _recbyte                                 ; get byte
  cpi r24,13                                     ; enter?
  breq _rec_line2                                ; yes ready
  st x+,r24                                      ; no so store in sram buffer
  rjmp _rec_line1                                ; next byte
_rec_line2:
  clr r24                                        ; string terminator
  st x,r24
ret

' convert HEX byte in r24 into bin value , on exit byte in r17
_hex2number:
  clr r17
_hex2number4:
  Subi R24,65                                    ; subtract 65
  Brcc _hex2number3                              ; in case carry was cleared
  Subi R24,249                                   ; not
_hex2number3:
  Subi R24,246
  Add R17,R24                                    ; add to accu
ret

';called for the second byte
_hex2number2:
  Lsl R17                                        ; shift data
  Lsl R17
  Lsl R17
  Lsl R17
  rjmp _hex2number4                              ; handle the conversion


'page address in z7-z13
_erase_page:
  mov r31,r23                                    ; page address
  lsr r31                                        ; get z8-z13 shift ls bit into carry
  clr r30
  ror r30                                        ; get z7
  ldi r24,3                                      ; page erase command
  rcall _do_spm
  clr r16 ; page cleared indicator
ret

_write_page:
  mov r31,r23                                    ; page address z8-z13
  lsr r31
  clr r30
  ror r30                                        ; carry to z7

  mov r24,r18                                    ; word address buffer counter
  lsl r24
  add r30,r24                                    ; z1-z6
  ldi r24,1                                      ; buffer fill
  rcall _do_spm
  inc r18
ret


_save_page:
'z0-z6 must be 0
'z7-z13 is the page address
'r0 and r1 are ignored
  mov r31,r23
  lsr r31
  clr r30
  ror r30

  ldi r24,5                                       ; write page
  rcall _do_spm
  clr r18                                         ; page word address counter
  inc r23                                         ; page counter
ret

_exit_page:
  in r24,spmcr
  sbrs r24,asb
  rjmp _exit_page1
  ldi r24,17
  rcall _do_spm
  rjmp _exit_page
_exit_page1:
End


'; execute spm instruction , data in R24
_do_spm:
  sbic eecr, eewe
  rjmp _Do_spm
!  Out Spmcr , R24
  spm
!.obj Ffff                                         ; needs FFFF according to datasheet
  nop
_wait_spm:
  In r24,spmcr
  sbrc r24, 0
  rjmp _wait_spm
ret

End

Re: MiniBot Bootloader

frig » 07 авг 2008, 12:38

Print "Checkboot " ; Tmp1


может тогда слать просто Checkout, без номеров?

Re: MiniBot Bootloader

EdGull » 07 авг 2008, 12:42

чем длинней строка, тем дольше ждем :wink:

Re: MiniBot Bootloader

MiBBiM » 08 авг 2008, 20:12

Чего-то уныло как-то.
Может что-нибудь в это роде наваять?
P.S. Работают кнопки: новый документ, смена скина, про разработчика.
P.P.S svp, либы плиз=)

Добавлено спустя 3 часа 57 минут 8 секунд:
Вот поменьше, с 4-мя скинами.
Вложения
MiniBotStudioSmall.rar
(533.93 КиБ) Скачиваний: 31
MiniBotStudio.rar
(856.67 КиБ) Скачиваний: 33


Rambler\'s Top100 Mail.ru counter