Jump to content

    

Kurt

Свой
  • Content Count

    63
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Kurt

  • Rank
    Участник
  • Birthday 06/10/1979

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1783 profile views
  1. Bootloader для MSP430

    Мои пять копеек. Вариант, если в устройстве есть внешняя память (в моем случае AT45DB или FRAM33). Посредством основной программы по существующему протоколу связи заливаем образ прошивки во внешнюю память (с проверкой версии прошивки, аппаратуры, контрольных сумм и пр.). Затем передаем управление ассемблерной процедуре, которая копирует себя в ОЗУ и затем оттуда быстро и тупо копирует образ из внешней памяти во FLASH. Исходник для msp430f2x и at45db: #include <msp430.h> #include "hardware_config.h" #include "fwupdate.h" // Forward declarations of segments. RSEG CSTACK:DATA:NOROOT RSEG DATA16_I:DATA:NOROOT MODULE FW_UPDATE_ROUTINES PUBLIC fw_at45_update WD_EXT_STB MACRO xor.b #(1<<PIN_WD_STROBE), &WD_EXT_PORT ENDM AT45_ENABLE MACRO bic.b #(1<<PIN_AT45_CS), &AT45_CS_PORT ENDM AT45_DISABLE MACRO bis.b #(1<<PIN_AT45_CS), &AT45_CS_PORT ENDM SPI_WRITE MACRO N mov.b N, r12 call r8 ENDM RSEG CODE fw_at45_update dint nop mov.w #(WDTPW|WDTHOLD), &WDTCTL ftg_w_ready bit #BUSY, &FCTL3 jnz ftg_w_ready mov #SFE(CSTACK), sp // copy to RAM mov.w #FW_INIT, r12 mov.w #SFE(DATA16_I), r14 push.w r14 copy_2_ram: mov.w @r12+, 0(r14) incd.w r14 cmp.w #FW_UPDATE_END, r12 jnc copy_2_ram ret FW_INIT WD_EXT_STB // Init DCO mov.b &CALBC1_12MHZ,&BCSCTL1 // Set DCO to 12MHz clr.b &BCSCTL2 // MCLK = SMCLK = DCOCLK mov.b &CALDCO_12MHZ,&DCOCTL mov.w #(FWKEY|FSSEL_1|FN5), &FCTL2 // Flash clock = MCLK/35 ~ 360kHz // configure SPI module mov.b #(UCSSEL_2|UCSWRST), &UCB1CTL1 // SMCLK mov.b #(UCMST|UCSYNC|UCMSB|UCCKPL), &UCB1CTL0 // 3-pin, 8-bit SPI master mov.b #1, &UCB1BR0 mov.b #0, &UCB1BR1 bic.b #(1<<2), &P5DIR bis.b #((1<<1)|(1<<3)), &P5DIR bis.b #((1<<1)|(1<<2)|(1<<3)), &P5SEL // P5.1,2,3 option select bic.b #UCSWRST, &UCB1CTL1 // Initialize USCI state machine // configure AT45DB AT45_DISABLE mov #(SFE(DATA16_I) + (spi_wr-FW_INIT)), R8 // R8 = &spi_write // wait for ready at45db wait_at45db AT45_ENABLE SPI_WRITE #0x57 SPI_WRITE #0x00 AT45_DISABLE bit.b #(1<<7), r12 jnc wait_at45db // erase main memory mov.w #3, r12 // erase cycles count meras_loop mov.w #(FWKEY | MERAS), &FCTL1 // Set Mass Erase bit mov.w #(FWKEY), &FCTL3 // Clear Lock bit mov.w #0xFFFF, &fw_at45_update // write stuff byte to flash meras_wait bit #BUSY, &FCTL3 jnz meras_wait dec.w r12 jnz meras_loop WD_EXT_STB // at45db start read AT45_ENABLE SPI_WRITE #0xE8 // Continues Array Read(Legacy Command) SPI_WRITE #0x00 // upper part of page address SPI_WRITE #0x04 // lower part of page address and MSB of int.page adr. mov.b #0, R12 call r8 // LSB byte of internal page address call r8 // perform 4 dummy writes call r8 // in order to initiate DataFlash call r8 // address pointers call r8 // -- mov.w #FW_FIRST_ADDR, r14 mov.w #FWKEY,&FCTL3 // Clear LOCK prg_blocks WD_EXT_STB mov.w #(FWKEY|BLKWRT|WRT),&FCTL1 // Enable block write prg_bytes SPI_WRITE #0x00 // Read byte from dataflash mov.b r12, 0(r14) // Write location prg_wait bit #WAIT, &FCTL3 // Test WAIT jz prg_wait // Loop while WAIT=0 inc.w r14 // Point to next byte jz prg_finish bit.b #0x3F, r14 // end of block (addr % 0x40) == 0 jne prg_bytes mov.w #(FWKEY|WRT), &FCTL1 // Set BLKWRT=0 prg_busy bit #BUSY, &FCTL3 jnz prg_busy jmp prg_blocks prg_finish mov.w #(FWKEY|WRT), &FCTL1 // Set BLKWRT=0 prg_finb bit #BUSY, &FCTL3 jnz prg_finb mov.w #FWKEY, &FCTL1 // Clear WRT bit mov.w #(FWKEY|LOCK), &FCTL3 // Set Lock Bit AT45_DISABLE mov.w #0, &WDTCTL // RESET! spi_wr bit.b #UCB1TXIFG, &UC1IFG jnc spi_wr mov.b r12, &UCB1TXBUF ?w_txend: bit.b #UCB1RXIFG, &UC1IFG jnc ?w_txend mov.b &UCB1RXBUF, r12 ret FW_UPDATE_END ENDMOD END
  2. Как верно заметил rezident, утилита работает с MSP430UIF только через msp430.dll. Реализация jtag-интерфейса сделана только для параллельного порта. Подозреваю, что разбирать TI'шный USB-транспорт занятие не менее увлекательное, но к сожалению сейчас у меня нет столько свободного времени. Попробую покурить MspDebug. На первый взгляд, мощный и функциональный продукт. Если вдруг получится что-то туда добавить, с удовольствием поучаствую. Вот еще интересная ссылка http://travisgoodspeed.blogspot.com/2009/0...msp430-fet.html
  3. в начале "критической секции" значение флага разрешения прерываний нужно считать и сохранить, а в конце его восстановить. в IAR есть intrinsics функции для работы с флагом. istate_t int_state = __get_interrupt_state(); __disable_interrupt(); // critical section code... __set_interrupt_state(int_state); или использовать спецификатор __monitor для функции (см. хелп). В этом случае генерируется оптимальный код типа push.w SR dint nop ... pop.w SR reta
  4. На сайте обновил до версии 1.6.0013 Исправлено: - bug с BSL (неправильно рассчитывалась контрольная сумма и ошибки синхронизации из-за этого) - bug с установкой режима Spy-By-Wire. BSL пока проверить не могу - нет оборудования.
  5. Еще раз про BSL

    Через интерфейс BSL нет возможности автоматически определить модель МК, только его семейство. Для чтения прошивки в файл через командную строку можно использовать: mspfet +r \"psw.txt\" -o \"dump.hex\" -BSL=COM1\n
  6. После трехлетнего перерыва возникла необходимость воспользоваться mspfet и пришлось залезть в архивы и пересобрать утилиту. Может быть, это уже не совсем актуально, но если настрой не пройдет, то буду обновлять. Версия 1.6.0012 (26 Nov 2009): - добавлен выбор интерфейса протокола JTAG (4-Wire, 2-Wire) в GUI и в командную строку - исправлена работа с командной строкой. Добавлена опция '-o <file>' - указать выходной файл для операций чтения. Известные баги: - не работает "Проверка на чистоту" после стирания памяти для МК с функцией защиты области INFО . Для подавления ошибки необходимо в настройках отключить стирание INFO. Версия 1.6.0011 (25 Nov 2009): - легкий рефакторинг кода - расширен список поддерживаемых камней (из msp430.dll v2.4.1.0) - добавлен русский язык Скачать можно с сайта http://kurt.on.ufanet.ru/.
  7. про контроль вершины стека, простой примерчик для компилятора IAR: //--------------------------------------------------------- void sys_check_stack_init(void) { #pragma segment="CSTACK" unsigned short * p = (unsigned short *)__segment_begin("CSTACK"); *p++ = 0xDEAD; *p = 0xDEAD; } //--------------------------------------------------------- void sys_check_stack(void) { #pragma segment="CSTACK" unsigned short * p = (unsigned short *)__segment_begin("CSTACK"); if( (p[0] != 0xDEAD) || (p[1] != 0xDEAD) ) WDTCTL=0x00; }
  8. up. вакансия актуальна з/пл 15-25 т.р.
  9. Подозреваю, что если девушка собралась вращать свой магнитный компас в азимутальной плоскости, то основное требование к стенду помимо точности - его исполнение из немагнитных материалов. Так как любой паршивый винтик даже из нержавейки, может очень сильно удивить )). Специальные стенды изготавливает и продает, например, вот эта контора. С другой стороны, нужен ли Вам такой стол для компаса на магниторезисторах HMC и MEMS-ах. Точности вам не важны, выше давали сцылки на алгоритмы калибровки, которые не требуют точного позицирования. А поверить прибор, причем с офиц. бумажкой, можете в ближайшей в геофизике. ))
  10. Требования к кандидату (квалификация): * Умение читать схемы. * Опыт монтажа радиоэлектроники от года. * Поверхностный монтаж. Расположение работы: Уфа, Черниковка Компенсационный пакет: * Оформление согласно ТК РФ, ОМС. * График работы с 9-00 до 18-00. Выходные: суббота, воскресенье * з/пл от 15 тр.р по результатам собеседования Контакты: Свое резюме Вы можете прислать по адресу hellos@mail.ru
  11. пример работы с SPI. тактирование от внешнего кварца без использования прерываний http://kurt.embedders.org/wiki/sources:spi0 может быть, поможет.
  12. это также можно сделать c extenden keywords компилятора IAR __root const unsigned char mes[] @ 0x1000 = {1,2,3,4,5}; // или, чтобы не трогать настройки при обновлении прошивки __root __no_init const unsigned char mes[5] @ 0x1000;
  13. 2rezident: я восхищен силой вашего воображения ))
  14. Для USB-адаптера нужно установить драйвера. Для LPT msp430.dll дрыгает аппаратурой через hil.dll, а тот в свою очередь пользует драйвер DriverX.sys для прямого доступа, так вот этот driverx.sys прописывается в систему при установке IAR или другой IDE c msp430.dll. Надо выдрать этот sys, написать для него inf-файл (или вытащить его из инстальника) и сделать инсталятор и тогда IAR не нужен.
  15. Совершенно неправильно меня поняли, отсюда сарказм. Я уверен, что Вы непременно добьетесь своей цели с нашей помощью или нет. Отсутствие некоторого опыта с лихвой заменяет здоровый энтузиазм и настойчивость. )) Я постараюсь Вам помочь, надо пошукать в закромах.