STM205: Гибнет или уходит в астрал?

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

Добрый день: столкнулся с такой проблемой.
Плата самодельная на STM32F20RB (64 ноги).
На порт B подключено АЦП AD9220. Запитано: Цифровая часть 3.3V (контроллер запитан тем же), Аналоговая 5V.
Ноги микроконтроллера и АЦП соединены напрямую.
Пока порт B висит в исходном состоянии - все хорошо: Идет отладка, все работает.
Но как только выполняется следующий код (инициализация и бесконечный цикл), кристалл уходит в астрал и далее не определяется отладчиком.
Есть призрачные подозрения что конфигурация пина BP2, он же BOOT1 делает что то нехорошее :-)

Инициализация

Код: Выделить всё

void FastADC_ConfigPin(void) 
{
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
// с этих пинов будем читать данные
  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.GPIO_Pin = 
     GPIO_Pin_0 |     GPIO_Pin_1 |      GPIO_Pin_2 |      GPIO_Pin_14| 
     GPIO_Pin_15|     GPIO_Pin_5 |      GPIO_Pin_6 |      GPIO_Pin_7 | 
     GPIO_Pin_8 |     GPIO_Pin_9 |     GPIO_Pin_10 |      GPIO_Pin_11; 
  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IN;
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_DOWN;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_Init(GPIOB, &GPIO_InitStruct);
  
  //на этот пин будут подаваться клоки
  GPIO_InitStruct.GPIO_Pin = 12; 
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_Init(GPIOB, &GPIO_InitStruct);
}
и собственно майн

Код: Выделить всё

 FastADC_ConfigPin();  
 uint32_t i = 0;  
 while(1) {
   GPIOB->BSRRL |= 1<<12; //set   bit
   for (i=0;i<100;i++){};
   GPIOB->BSRRH |= 1<<12; //reset bit
   for (i=0;i<100;i++){};
 }
сейчас буду проверять возможность попадания 5V на ногу контроллера :-(
В связи с подозрениями интересует такой вопрос: при попадании 5V на вход выйдет ли из строя только порт или весь кристалл?
Шоб я польку танцевал..
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

Как насчет экспериментального выяснения конкретной команды, которая вешает контроллер? Заткните все комментариями (кроме цикла) и затем освобождайте по одной. Так гораздо проще будет понять что происходит.
FPGAlover писал(а):В связи с подозрениями интересует такой вопрос: при попадании 5V на вход выйдет ли из строя только порт или весь кристалл?
Зависит от мощности источника этих 5V. Вероятно сгорит защитный диод, и, может входной триггер Шмитта. Если на пине был жестко выставлен 0, сгорит внутренний транзистор. Для остальной части МК, по идее, это все не страшно.
Изображение only pure true norwegian blackx Изображение
Реклама
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

LOGIC OUTPUTS
DVDD = 5 V
High Level Output Voltage (IOH= 50μA)
High Level Output Voltage (IOH= 0.5 mA)
для 3х вольтов то же самое.. даташит тут http://www.analog.com/static/imported-f ... 3_9220.pdf
blackx писал(а):Если на пине был жестко выставлен 0
имеется ввиду пин настроен на выход?
Шоб я польку танцевал..
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

Ну так что по поводу поиска злосчастной инструкции в коде? Вы можете дебаггером по этому коду пройтись пошагово?

Да, я имел ввиду что пин настроен на выход и выставлен на низкий уровень. Возникает конфликт уровней, кто слабее - сгорает. И обычно это пин МК.

ЗЫ. Я не спец по кортексам. Так, мимо проходил, ибо такие темы часто игнорируют вовсе.
Так что в даташит или куда-нибудь подальше меня отправлять смысла мало :)

ЗЫ2. А, это ток выхода АЦП. Не сразу понял. Тогда ок все должно быть.
Изображение only pure true norwegian blackx Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

Это даташит к АЦП :)

Попробовал я вытащить кварц (в прошивке разогнано на 120мгц) пусть на HSI поработает (танцы с бубном). Однако не помогло. Отладчик в упор не видит...
Вставил назад... Посмотрел осциллографом частоту на кварце: половина питания постоянки... Помянем усопшего : :cry:
Однако, осталось 3 живых камня!

хотя не факт... как кварц должен себя вести при включенном HSI?
Шоб я польку танцевал..
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

Смотреть на осциллографе частоту кварца - это то еще развлечение. Пробовал - либо видно быстрозатухающую синусоиду, либо постоянное напряжение. К тому-же амплитуда этой синусоиды совсем не велика. Боюсь соврать, но порядка сотен милливольт.

Про 5V.
Большинство GPIO ног у STM32 - "FT - 5V tolerant", тоесть на них можно подавать 5V напряжение, а они не будут сгорать. PB2 нога тоже обладает таким свойством. (Смотрел правда по даташиту на F103)
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

balmer писал(а):Смотреть на осциллографе частоту кварца - это то еще развлечение. Пробовал - либо видно быстрозатухающую синусоиду, либо постоянное напряжение.
Делитель на щупе переключи в 1:10 . :)))
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

В общем кристалл не гибнет, просто отрекается от отладчика...
Зашитая программа замечательно продолжает работать.
С АЦП шли законные 3.3V но я на всякий случай шину порезал и 47омные резисторы воткнул.
В общем дело не с наружи, а с нутри...

После выполнения этого кода камень перестает определяться отладчиком.

Код: Выделить всё

void FastADC_ConfigPin(void) 
{
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.GPIO_Pin = 12; 
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_Init(GPIOB, &GPIO_InitStruct);
}

uint8_t str[8];
int main(void)
{  
 FastADC_ConfigPin();  
 uint32_t i = 0;  
 for (uint32_t j=0;j<1000000;j++) {
   GPIOB->BSRRL |= 1<<12; //set   bit
   for (i=0;i<100;i++){};
   GPIOB->BSRRH |= 1<<12; //reset bit
   for (i=0;i<100;i++){};
 }
далее идет полноценное функционирование платы..
правда до майна еще какой то код от STM выполняется(настройка PLL и еще что то), но до этого он не мешался. Обращений к порту B там нет...

Вопрос : Ни у кого такой проблемы не возникало? как реанимировать камень (например почистить флешь или еще что)?
Шоб я польку танцевал..
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

Непонятно - из сообщения. Сейчас ты можешь подключиться отладчиком? Если можешь подключиться отладчиком, значит можешь и flash перезаписать...
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

balmer писал(а):Сейчас ты можешь подключиться отладчиком?
нет, не могу :-)
Программа выполняется, кристалл работает, но отладчик его не видит.

привожу лог от SEGGER J-FLASH ARM
Connecting ...
- Connecting via USB to J-Link device 0
- J-Link firmware: V1.20 (J-Link ARM-Pro V1.x compiled Oct 12 2012 19:11:20)
- JTAG speed: 5 kHz (Fixed)
- Initializing CPU core (Init sequence) ...
- Initialized successfully
- JTAG speed: 5 kHz (Auto)
- WARNING: Unexpected core ID. (Found: 0x00000000, Expected: 0x4BA00477, Mask: 0xFFFFFFFF)
- J-Link found 0 JTAG device. Core ID: 0x00000000 (ARM9)
- Connected successfully
оно конечно коннектится но с ошибкой. Попытки что то сделать ни к чему не приводят.
Шоб я польку танцевал..
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

Теоретически должно помочь "Connect under Reset" или, что-то подобное. Ну либо можно пинцетом на время закоротить Reset пин на землю, пока отладчик коннектится.
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

balmer писал(а): Ну либо можно пинцетом на время закоротить Reset пин на землю, пока отладчик коннектится.
Огромное спасибо!!!! Помогло!!!
Правда у меня разводка та еще :-( пришлось ногу отгибать :-)
Шоб я польку танцевал..
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

Ядро то находит... а на флешь писать не получается...
Шоб я польку танцевал..
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

Впаял предпоследний кристалл :-)
В стартапе благоразумно поставил пустой цикл секунд на 10 сразу после ресета. В этот момент вполне шьется, если пропустить та же история... Но теперь можно разбираться кто виноват :-)
Шоб я польку танцевал..
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

жесть... грусно и печально..
PB3 он же (JTDO/TRACESWO)
почувствуйте разницу.... :shock:
GPIO_InitStruct.GPIO_Pin = 12; //12 = GPIO_Pin_2 | GPIO_Pin_12
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
Нефик после стакана программировать... :beer:
Шоб я польку танцевал..
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

Нда, я тоже не заметил ошибки на листинге :( .

Хотя и так должно работать. Правда всего пару раз JTAG пользовался, в основном SWD. Там важны лишь пины PA13 (SWDIO), PA14 (SWDCLK). Остальные можно перепрограммировать как хочешь.
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

Тут появилась следующая проблема... Код работает, миандр идет, но амплитуда у него всего 0.35V (0-логический 0 и 0.35 - лог 1)
Сейчас же настройки следующие:
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;

Сначала я выход конфигурировал как опен дрейн и работал он через 47 ом на тактовый вход АЦП. По идее спалиться не должен.
В чем может быть ошибка?

Подтянул к верху - все стало хорошо, хотя странно это...
Ну в общем эта тема себя исчерпала :-)
Шоб я польку танцевал..
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

FPGAlover писал(а):Впаял предпоследний кристалл :-)
В стартапе благоразумно поставил пустой цикл секунд на 10 сразу после ресета. В этот момент вполне шьется, если пропустить та же история... Но теперь можно разбираться кто винов
Подключать через SWD . Если затрагиваешь пины SWD - выставить коннект через RESET и подключить таки RESET .
У меня так же JLink - никаких проблем, все через SWD .
Ответить

Вернуться в «ARM»