Например TDA7294

Форум РадиоКот • Просмотр темы - BOOTLOADER: вопросы
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт апр 19, 2024 01:35:03

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 67 ]  1, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 12:35:38 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
коллеги, а кто как делает логику работы загрузчика? или все на ардуино перешли и в ус не дуют?

вот после сброса загрузчик получил управление - как он должен узнать, надо ли просто перейти на нулевой адрес для старта прошивки или ждать получения новой прошивки?

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

наиболее красивым вариантом мне представляется второй, но я не представляю, как его на самом деле реализовать? как посчитать контрольную сумму прошивки во FLASH, я знаю, вопрос в другом: как узнать контрольную сумму ПЕРВОЙ прошивки, которая уже содержит загрузчик? есть, конечно, вариант прошивать В ПЕРВЫЙ РАЗ только загрузчик... но почему-то мне это кажется каким-то кривым решением.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 13:32:19 
Нашел транзистор. Понюхал.

Зарегистрирован: Пт окт 28, 2011 16:01:18
Сообщений: 184
Рейтинг сообщения: 0
Optiboot смотрит причину сброса в MCUSR, если он был ТОЛЬКО по пину RESET - ждет 1 секунду активности на USART (попытку залить прошивку).
Кстати, неплохой готовый загрузчик, велосипед можно не изобретать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 13:35:41 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
в конечном устройстве кнопка сброса обычно не предусматривается, как конечный пользователь будет обновлять прошивку?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 14:02:55 
Нашел транзистор. Понюхал.

Зарегистрирован: Пт окт 28, 2011 16:01:18
Сообщений: 184
Рейтинг сообщения: 0
А тут уже нужно думать применительно к конкретной конструкции, что там у нее есть из обвязки, на что можно воздействовать...
Из более-менее универсальных идей:
Тот же Optiboot можно чуть подправить, что бы он ждал прошивку в течении секунды, не только после ножки RESET, а и после подачи питания.
Или если там будет встроенный конвертер в RS-232C либо USB - завести с него на ножку RESET сигнал DTR.
Можно подключить RESET к RxD через RCD цепочку. Тогда для формирования RESET, нужно будет выдать с хоста сигнал BREAK перед заливкой прошивки.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 14:14:36 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
идея с завязкой RESET на RX мне не нравится - при нормальном обмене тоже сбрасываться будет, что ли? хочется сделать в базовом варианте так, чтобы никакие внешние воздействия не были нужны (кроме обычного обмена по UART).

Добавлено after 7 minutes 59 seconds:
я сделал загрузчик без задействования BOOTRST, который сразу встроен в рабочий код, т.е. соединение с компьютером происходит стандартно для устройства, и при получении команды "обновиться" происходит переход на адрес загрузчика, а дальше по схеме... но я не учел, что если вдруг в процессе обновления порвется связь или произойдет сбой, получится кирпич, т.к. "стандартный" вход из рабочей прошивки будет невозможен (ее попросту не будет внутри МК), а иного варианта не предусмотрено... вот и думаю над иным вариантом с использованием BOOTRST.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 14:17:52 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 2
Медали: 1
Получил миской по аватаре (1)
отдать 0 байт ЕЕПРОМ под служебную информацию, работаем в основной программе, если пришел спецпакет - заносим туда информацию о перепрошивке и уходим в бутлоадер (сразу или по перезагрузке)
бутлоадер или по совпадению к.с. или по спецпакету завершения программирования стирает этот флаг и запускает основной код
при включении по этому байту бутлоадер может определить необходимость прошивки
также там можно хранить версию (FF - надо прошить, иначе = версия прошивки-1)

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 14:26:44 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Ivanoff-iv, нормальный вариант. уже думал об этом, только не 0-й байт хотел занимать, а последний.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 14:35:43 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2804
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18079
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
насколько я знаю, все загрузчики требуют установки фьюзов, чтобы при старте переходить на загрузчик.
под стартом я имею в ввиду подачу питания или подачу ресета.
а с использованием BOOTRST или при нормальной работе приложения без внешних воздействий переход на загрузчик не представляется возможным.

я однажды позанимался с загрузчиком с сайта chip45boot. там можно скачать загрузчики под разные МК. я себе скачал конкретно под АТмега8.
он после старта ждет некоторое время связи с комповой программой.
если такая связь по USART не началась, то делается переход на нулевой адрес (на приложение).
комповую программу можно скачать там же.
плохо то, что задержку он делает программно, и время задержки зависит от тактовой частоты.
я его дизассемблировал, и нашел место отработки задержки. соответственно сделал два загрузчика - для частоты 1 МГц и для 8 МГц, чтобы задержка была примерно 2 секунды.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 14:39:26 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Starichok51, см.п.3 из моего первого поста - это оно. и оно как раз не очень радует ожиданием: пользователь включает девайс, а он молчит, как рыба об лед... аж 2 секунды. как с моей ловкостью, так и 5 секунд мало, чтобы все подключить и соединить/нажать. как запасной вариант в голове держу, но основной скорее по идее Ivanoff-iv сделаю.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 15:15:09 
Нашел транзистор. Понюхал.

Зарегистрирован: Пт окт 28, 2011 16:01:18
Сообщений: 184
Рейтинг сообщения: 0
При правильном формирователе, обычный обмен не будет вызывать сброса, только длительное непрерывное удержание RxD в нуле (сигнал BREAK).
Прошивальщик и загрузчик будут самописные? Если так, то можно еще проще.
Выставляем прошивальщиком BREAK, включаем девайс, прошивка проверяет состояние линии RxD, если там ноль - переходит на загрузчик.
Еще можно уведомить прошивальщик о готовности, выплюнов в USART любой байт, или даже просто импульс на ножку, по времени равный длительности стартового бита.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 15:15:52 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
я 0 байт бы занял, т.к. он наиболее подвержен стиранию...
и назначил бы его значение FF флагом программирования, 0-неизвестная версия, остальные значения "известная версия"
если бутлоадер обнаружит в этой ячейке FF, то будет ждать прошивки, скажем 5минут, если не дождётся - пишет туда 0 и идёт работать...
если дождётся - пишет прошивку и заносит туда номер её версии

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 15:43:36 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
~Dimon~ писал(а):
Выставляем прошивальщиком BREAK, включаем девайс, прошивка проверяет состояние линии RxD, если там ноль - переходит на загрузчик.
в этом что-то есть...
Ivanoff-iv писал(а):
я 0 байт бы занял, т.к. он наиболее подвержен стиранию...
avr-gcc распределяет EEPROM, начиная с нулевого адреса, если туда вмешиваться, снижается удобство написания самой прошивки...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 15:55:33 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
так в программе эта переменная тоже должна присутствовать, или по спецпакету или из меню в эту переменную заносится FF и устройство начинает ждать прошивку...
а так, там версия прошивки, которую можно тоже в свойствах системы показывать...

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 16:39:24 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2804
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18079
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
ARV писал(а):
и оно как раз не очень радует ожиданием: пользователь включает девайс, а он молчит, как рыба об лед... аж 2 секунды. как с моей ловкостью, так и 5 секунд мало, чтобы все подключить и соединить/нажать.
если у тебя собственный загрузчик, то ты можешь сделать любую задержку, чтобы успеть сделать все требуемые операции.
хотя, положено сначала привести девайс в полную готовность ДО подачи питания. а не делать всякие подключения и соединения после подачи питания.

у меня созрел такой вариант работы загрузчика:
МК запускается с нулевого адреса, то есть, работает основная программа. и программа постоянно проверяет прием вполне конкретного байта по UART.
если нужно перепрошить, подключаем к компу. комповая программа посылает этот вполне конкретный байт.
по факту приема этого управляющего байта прошивка переходит на загрузчик.
по окончании перепрошивки комповая программа дает команду перейти на нулевой адрес.

правда, остается та неприятность, что если прервалась загрузка, то МК работать на незаконченной прошивке не будет.
хотя, эта неприятность будет в любом случае, не зависимо от того, по какому признаку будет запускаться загрузчик. в любом случае незаконченная прошивка приведет к неработоспособности.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 17:49:59 
Нашел транзистор. Понюхал.

Зарегистрирован: Пт окт 28, 2011 16:01:18
Сообщений: 184
Рейтинг сообщения: 0
Что бы вот такого вот не было, надо стартовать в загрузчик (щьем фьюзы), там проверять условие, и если оно не выполнено - прыгать на основную прошивку, которая с нулевого адреса.
Собственно, Optiboot так и работает. Можно взять его за основу, там открытый исходный код, только переделать проверку условия под свой вариант.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Ср июн 29, 2022 19:33:32 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2804
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18079
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
а Optiboot сможет работать только с Arduino IDE? я так понимаю, что ТС (как и меня) это вообще не интересует.
и ТС уже высказался, что задержка на ожидание перехода в основную прошивку ему тоже не нравится.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Чт июн 30, 2022 08:41:39 
Нашел транзистор. Понюхал.

Зарегистрирован: Пт окт 28, 2011 16:01:18
Сообщений: 184
Рейтинг сообщения: 0
Я его не собирал, готовый пробовал.
Судя по описанию, надо avr-gcc 4.3.2 (можно из состава любой IDE), собирается он make-ом.

Если причина сброса любая иная, кроме воздействия на пин RESET - он запускает основную прошивку без какой либо задержки.
Если RESET - ждет команду по USART одну секунду, если не поступила - сброс по WDT и запуск основной прошивки.
Основная прошивка может быть полностью убита или отсутствовать, устройство удастся прошить, что и хотел ТС.

Проверку MCUSR, будет несложно заменить на проверку любого другого условия, нуля на пине RxD например, или на пине какой то кнопки (если в устройстве они есть).
Задержку то же можно уменьшить, вплоть до 15мс, описание говорит что она через WDT реализована, но смысла я не вижу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Чт июн 30, 2022 08:50:56 
Грызет канифоль

Зарегистрирован: Пн окт 26, 2020 08:37:51
Сообщений: 284
Откуда: г.Волгоград
Рейтинг сообщения: 0
Можно своим приобретенным опытом поделюсь? Может кому пригодиться.
К своему стыду не смотрел внутреннюю организацию bootloader (использую самый короткий Optiboot). Однако при активном фьюзе BootRst кроме адреса входа еще и вектора прерываний попадают в область загрузчика. Их тоже наверное надо будет коммутировать, если есть желание просто передать обратно управление bootloader.
По крайней мере в своих программах на 328p, установленных на Arduino подобных платах, на всякий случай делаю обратное действие - забираю вектора к себе после работы bootloader.
В режиме создания программы активно использую bootloader. Прошиваю прямо из командной сроки без Arduino IDE. На этапе разработки 2 секунды не самое большое зло. На финальном этапе просто один раз отключаю BootRst через USBasp.

_________________
ФУОЗ на платформе Ардуино: viewtopic.php?p=4366626#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Чт июн 30, 2022 09:03:29 
Нашел транзистор. Понюхал.

Зарегистрирован: Пт окт 28, 2011 16:01:18
Сообщений: 184
Рейтинг сообщения: 0
Вот еще подумал...
ТС к сожалению не объявил, чем девайс будет подключатся к компу.
Но если там что то вроде MAX232 или USB-TTL адаптера, то можно схитрить:
Подпорку на входе (или пине RxD) ставим так, что бы при отсутствии физического подключения к компу, RxD был в нуле (активный уровень!), и делаем соответствующую проверку в загрузчике.
При подключении к компу - RxD перейдет в единицу, что будет сигналом для загрузчика, о возможной попытке залить прошивку.
Это позволит использовать для прошивки готовый софт, без плясок с бубном для организации подачи в порт BREAK-а.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: BOOTLOADER: вопросы
СообщениеДобавлено: Чт июн 30, 2022 09:55:04 
Сверлит текстолит когтями

Карма: 20
Рейтинг сообщений: 296
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1222
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
См. Digispark (ATtiny85). Есть буутлоудер, вкл. через USB без USB-TTL адаптера, время точно можно уменьшить, через WDT. См. файл optiboot.c

А optiboot уже написан для много MCU. Берите то, что нужно. Arduino IDE не требуется. Просто оттуда легко и быстро, как инструмент. Возьмите из папки скомпилированный файл /или скомпилируйте сами/ и пользуйтесь.Например для ATTinyCore:
Код:
ATtiny441, 841, ATtiny1634, ATtiny87, 167, ATtiny25, 45, 85, ATtiny24, 44, 84, ATtiny261, 461, 861, ATtiny48, 88, ATtiny828, ATtiny2313, 4313, ATtiny43

https://github.com/Optiboot/optiboot


Вложения:
optiboot.zip [15.84 KiB]
Скачиваний: 54
Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 67 ]  1, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y