Цитата(Andrew-S @ Dec 18 2006, 14:52)

Вы не могли поподробнее рассказать о внутрисхемном(ISP) и внутрипрограммном программировании(IAP) контроллеров XC167? Очень актуальна данная тема. Любые ссылки будут полезны.
Сорри, но XC167 у меня весьма поверхностно.
The startup behavior of the XC167 can be configured in three ways:
• apply a fixed default configuration (source = Startup ROM)
• read the configuration from user memory (ROM, Flash)
• read the configuration from configuration pins
Использую только последний вариант (у меня всегда используется внешняя ФЛЭШ и для С167 и для ХС167), процедура входа в bootstrap выглядит так.
1. Для входа в ISP необходимо притянуть пин P0L.4 к земле через резистор до 10ком, расчетное 8,2к.
2. Выполнить РЕСЕТ процессора.
3. Передать на CPU байт 0 (скорость использую 57600, а CPU по этому байту фиксирует скорость).
3. CPU переходит в bootstrap режим о чем и сообщает передачей на UART ID кода процессора по UART.
4. CPU переходит в режим ожидания 32 байт кода на UART, т. е. сидит в цикле пока не примет 32 байта.
Эти 32 байта есть начальный загрузчик. Один из вариантов, которые я использую для С167:
?PR?BSL SECTION CODE; WORD 'NCODE'
main PROC NEAR
org 0FA40h
mov r0, #0FA60h
LOOP:
jnb S0RIR, $
movb [r0], S0RBUF
bclr S0RIR
movb S0TBUF, [r0]
jnb S0TIR, $
bclr S0TIR
cmpi1 R0, #(0FA60h + CODESIZE - 1)
jmpr cc_NE, LOOP
nop
main ENDP
?PR?BSL ENDS
Возможны и модификации, примеров достаточно в аппл. нотах.
грузить надо уже в машинном коде конечно. И главное выровнять по размеру на 32 байта.
Назначение этого кода - загрузить основной загрузчик. с достаточным "интеллектом" и передать ему управление.
CODESIZE - размер его кода.
Ну а основной загрузчик уже примет и запустит код самой программирующей процедуры,
которая будет прошивать ФЛЭШ.
Все это справедливо и для XC167.
Цитата(Andrew-S @ Dec 18 2006, 14:52)

При внутрипрограммном программировании как я понимаю в процессор первоначально в режиме загрузки (bootstrap loader) загружается программа "заргузчик". При следующем внутреннем старте запускается основная программа,
Не совсем так.
Не "При следующем внутреннем старте",
а Куда и как стартует процессор определится состоянием "Reset Configuration Register" на момент сброса процессора и только.
Цитата(Andrew-S @ Dec 18 2006, 14:52)

а если ее нет осуществляется переход на собственный "загрузчик". Свой "загрузчик" прошивает основную программу без bootstrap-режима в процессе нормальной работы контроллера. Загрузчик и основная программа обе находятся во внутренней flash. Интересуют варианты реализации и возможно какие-то подводные камни в этой схеме.
Посмотрите AP163703 от Инфинеон.
Поскольку для ХС1657 отдельно ничего внятно не описано (я в свое время не нашел), думаю это справедливо и для него.
Цитата(Andrew-S @ Dec 18 2006, 14:52)

При внутрисхемном программировании вопросов в принципе нет. Есть программа Memtool, которая по RS загружает HEX файл. Не очень понятно, bootstrap loader контроллера позволяет сразу принимать прошивку по RS или он только готовит ОЗУ, чтобы пользователь по RS загрузил свою программу загрузки в ОЗУ, которая затем будет порциями принимать прошивку и писать ее во FLASH? То есть интересует что делает Memtool. И можно ли его аппаратно эмулировать через другой контроллер, подключенный к программируемому через линии Tx Rx?
Я думаю уже ответил.
Может я и не прав, но мне кажется что не получится выполнить код программирования ФЛЭШ, из самой ФЛЭШ.
Обычно он перемешается в RAM и исполняется оттуда.
У Кейла есть соответствующие аппл. ноте для С.
Но я делал эти процедуры на ассемблере - так легче управлять линкером.
В ХС167 уже есть специальная область PSRAM для кода, не спроста наверное.
То что Вы хотите, я не видел внятного описания.
что такое "8K Start up ROM" так и не опеделил.
Возможно, это может быть custom исполнения.
ИМНО, стоит ли заморачиваться на внутрипрограммном программировании, какая от этого польза в данном процессоре.
Я имею ввиду смену прошивки кода, а не запись во ФЛЭШ констант.
Вариант когда приложение по специальной команде готовит (конфигурирует) процессор к переходу в
бутстрап лодер режим не считаю IAP.
Как пример, простейший вариант (но со своими минусами), то что используется в некоторых программаторах (и у меня), хорошо описан в мануале дл FLASHhit от HSE.
Можно это делать и не от линий RS а програмно, управляя из приложения, через внешние регистры.
Работает очень хорошо, за три года не зафиксировано ни одного сбоя, пользователи сами меняют прошивку прибора, не осозновая что они делают :-).
ИМНО, это наименее трудозатратный механизм - аппаратно или спец. командой из хост программы на РС переводите процессор в бутстрап лодер, грузите из хоста в RAM загрузчики и потом сам код прошивки.
Затем "освобождаете" процессор от бутстрап конфигурации и программный ресет - приложение будет запущено.
И последнее, ресурс внутренней ФЛЭШ у инфинеон весьма мал (гарантированный), поэтому
"много не наперешиваешь", так стоит ли городить.