LINUX.ORG.RU
решено ФорумTalks

Продукция Nordic Semiconductor — говно (но это не точно).

 , , nordic semiconductor, nrf52,


2

2

Мира и благополучия всем честным эмбеддерам-линуксоидам!

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

Поделие данной фирмы, конкретно NRF52832 не может даже нормально посчитать импульсы от внешнего источника с частотой 4МГц. То у него события на смену уровня на пине не всегда срабатывают, то наоборот, два перывания дёргает.

И вообще, список официально признанных багов для контроллера, выпущенного в продакшен уже не первой ревизией, неприлично большой:

https://infocenter.nordicsemi.com/topic/errata_nRF52832_Rev3/ERR/nRF52832/Rev...

Перемещено xaizek из development

★★★★★

Последнее исправление: Harald (всего исправлений: 2)

Ответ на: удаленный комментарий

при том, что я писал код, конпелял и запускал прошивающую программу для сабжа под гнулинуксом

Harald ★★★★★
() автор топика

Поделие данной фирмы, конкретно NRF52832 не может даже нормально посчитать импульсы от внешнего источника с частотой 4МГц. То у него события на смену уровня на пине не всегда срабатывают, то наоборот, два перывания дёргает.

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

vaddd ★☆
()
Ответ на: комментарий от vaddd

Сигнал 4МГц на один пин, тактирует счётчик, при переполнении счётчика переключаем другой пин, всё средствами периферии, процессор не задейстован. При изучении на осциллографе второй сигнал выходит неравномерным, период может быть как больше расчётного, так и меньше. Поддержка ничего внятного посоветовать не может.

Harald ★★★★★
() автор топика
Ответ на: комментарий от Harald

То есть просто делите входные 4 мгц на емкость счетчика? Ну не согласна душа с виной контроллера и все. Если контроллер точно ничего помимо счета не делает, больше похоже на что-то аппаратное. Выражение «при изучении на осциллографе второй сигнал выходит неравномерным» вообще какое-то непрофессиональное - нужно оценить количественно. И еще , системные проблемы МК, типа тех, которые попадают в эрраты (хоть их там в самом деле безобразно много) - почти всегда строго детерминированные и при подобном тупом счете дают систематические ошибки, а не случайное брожение результата туда-сюда (максимум допустимо плюс-минус один импульс)

обязательные несложные эксперименты:

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

а. подать 4 мгц от другого источника, с другими фронтами, другим уровнем, оценить погрешность от уровня, от выходного сопротивления источника

б. подать сигнал другой частоты, меньше, больше, оценить зависимость погрешности от частоты

в. изменить тактовую контроллера, тоже оценить изменение погрешности

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

vaddd ★☆
()
Ответ на: комментарий от vaddd

Выражение «при изучении на осциллографе второй сигнал выходит неравномерным» вообще какое-то непрофессиональное - нужно оценить количественно.

ширина импульсов выходного сигнала не совпадает с расчётной, должно быть, скажем, 93 микросекунды, а на деле 46 или или наоборот, 160

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

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

а. подать 4 мгц от другого источника, с другими фронтами, другим уровнем, оценить погрешность от уровня, от выходного сопротивления источника

другого подходящего нет

б. подать сигнал другой частоты, меньше, больше, оценить зависимость погрешности от частоты

но я таки вспомнил, что у моего USB осциллографа есть тестовый генератор импульсов, на 2КГц, так вот там проблема проявляется точно так же, чуть реже, но всё равно проявляется

в. изменить тактовую контроллера, тоже оценить изменение погрешности

не меняется, она жёстко задана

и вообще, контроллер слишком умный, сам решает, какую ненужную периферию отключать, от кварца тактоваться или от внутреннего генератора в целях экономии

ему только намекать можно

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

Источник питания - usb от компа, девборда. Не, ну можно ещё от батарейки попробовать ради интереса. Но я уже предложил заказчику считать деньги, вложенные разработку на NRF проэтосамленными и выбрать теперь продукцию Microchip :)

Harald ★★★★★
() автор топика
Последнее исправление: Harald (всего исправлений: 1)
Ответ на: комментарий от Harald

ширина импульсов выходного сигнала не совпадает с расчётной, должно быть, скажем, 93 микросекунды, а на деле 46 или или наоборот, 160

Кратно что ли? Где-то пропускается фронт переполнения сигнала счетчика.

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

другого подходящего нет

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

но я таки вспомнил, что у моего USB осциллографа есть тестовый генератор импульсов, на 2КГц, так вот там проблема проявляется точно так же, чуть реже, но всё равно проявляется

То есть при сигнале частотой в две тысячи раз меньше получаете такие же кратные скачки, но уже плюс-минус пару секунд? Опять же - пропускается фронт сигнала переполнения счетчика

и вообще, контроллер слишком умный, сам решает, какую ненужную периферию отключать, от кварца тактоваться или от внутреннего генератора в целях экономии

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

vaddd ★☆
()
Ответ на: комментарий от vaddd

Кратно что ли? Где-то пропускается фронт переполнения сигнала счетчика.

скорее, смена уровня на входной ноге не всегда вызывает инкремент счётчика, или наоборот, инкрементирует два раза

Harald ★★★★★
() автор топика
Ответ на: комментарий от vaddd

А ещё в даташите вообще ничего не сказано, сколько циклов занимает реакция на входной сигнал на ножке, какого качества должен быть сигнал для гарантированного срабатывания. У атмеломикрочипов всё это подробно расписано с графиками.

Harald ★★★★★
() автор топика

только cc2640 только хардкор

Jetty ★★★★★
()
Ответ на: комментарий от Harald

скорее, смена уровня на входной ноге не всегда вызывает инкремент счётчика, или наоборот, инкрементирует два раза

Маловероятно. Плавало бы в более широких, некратных пределах. Но тем более нужен эксперимент с источником сигнала - уровни и фронты. И осциллограф - не самый удобный прибор для анализа. Я бы на вашем месте написал утилитку, которая бы считала длительности импульсов на выходе и выдавала статистику по длительностям.

А ещё в даташите вообще ничего не сказано, сколько циклов занимает реакция на входной сигнал на ножке, какого качества должен быть сигнал для гарантированного срабатывания. У атмеломикрочипов всё это подробно расписано с графиками.

Занявшийся нордиками должен страдать. Но в ваши задачи, как я понимаю, входит либо решить проблему, либо более-менее достоверно обяснить заказчику причину, а не валить все на МК только потому что он не удобен. Экспериментируйте с сигналом, со способами подсчета импульсов, трясите суппорт и даташиты на предмет того как работает «умная» микропрограмма, и как отключить ее, чтобы обеспечить полноценный rtos. А то не посчитать 4мгц сгнал с помошью 64мгц мк - ну дикость же. Не верю в такой глюк.

vaddd ★☆
()
Ответ на: комментарий от vaddd

А то не посчитать 4мгц сгнал с помошью 64мгц мк - ну дикость же. Не верю в такой глюк.

вдруг там поделие как esp32.

это примерно как на малинке через GPIO делать. там эти пины, очень тупые и медлительные.

не ну на выход можно настроить боль-менее скоростное. но полноценный bit-bang не выйдет.

n_play
()
Ответ на: комментарий от n_play

очень тупые и медлительные

Тс на нем даже 2 килогерца не может нормально посчитать - это вообще ни в какие ворота. Еще немного и на арифмометре можно будет успеть считать

vaddd ★☆
()

Продукция Nordic Semiconductor — говно.

Поздравляю с прозрением.

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

Oberstserj ★★
()
Ответ на: комментарий от vaddd

То есть при сигнале частотой в две тысячи раз меньше получаете такие же кратные скачки, но уже плюс-минус пару секунд? Опять же - пропускается фронт сигнала переполнения счетчика

Читаю твою выскапзывания в защиту…ты вообще держал в руках иэти контроллеры?

Oberstserj ★★
()
Ответ на: комментарий от Oberstserj

Читаю твою выскапзывания в защиту

Какую защиту?

ты вообще держал в руках иэти контроллеры?

Зачем? Я не сношаюсь ни на лыжах, ни в гамаках. У ТС есть задача победить процессор, выбранный заказчиком и если вы с ним работали и знаете тонкие места, то лучше бы подсказали решения. Это достаточно массовый мк и на нем не может быть нерешаемой задача счета импульсов.

vaddd ★☆
()
Ответ на: комментарий от Harald

Выше уже написал: постоянные траблы по питанию. То ему 0,1В отклонения уже критичепски, то просто живет своей жизнью на непонятной частоте. Нужно было примитивно шим организовать, так и тот через задницу работал. Я так понял в каждой партии свои приколы. А такое я отправляю фтопку.

Oberstserj ★★
()
Ответ на: комментарий от vaddd

Какую защиту?

Это достаточно массовый мк и на нем не может быть нерешаемой задача счета импульсов.

Ага.

Oberstserj ★★
()

посчитать импульсы от внешнего источника с частотой 4МГц

А давай ты начнёшь с уровней, какие считал.
Но я мимокрокодил и в руках не держал.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Harald

У вас то, что вы называете «внешний источник» - от чего запитан? Питание с мк общее или отдельное? Развязка гальваническая есть? Обеспечьте для чистоты эксперимента или одно или другое.

vaddd ★☆
()
Ответ на: комментарий от vaddd

Тоже по USB, от того же компа. Земля соединена припаянным проводком, до 10 см.

Развязка гальваническая есть? Обеспечьте для чистоты эксперимента или одно или другое.

Нету. Могу для эксперимента запитать от батареи, из интереса. Но сабж уже списан и в разработке применяться не будет.

Harald ★★★★★
() автор топика
Ответ на: комментарий от Harald

Что тебе поддержка должна посоветовать?

Поставь себя на из место. Какой-то необразованый косолап что-то куда-то подключил, сигнал в реальности конечно непонятно какой, и орет что ничего не работает.

Им по кофейной гуще гадать?

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Какой-то необразованый косолап

4.2, образованный, у меня диплом есть, хоть и по программерской специальности, но с курсами электроники и микропроцессорных систем :)

сигнал в реальности конечно непонятно какой

скриншоты pulseview с изображением сигнала были приложены в тикет в достаточных количествах

Harald ★★★★★
() автор топика
Последнее исправление: Harald (всего исправлений: 1)
Ответ на: комментарий от Harald

Но сабж уже списан и в разработке применяться не будет.

Аллилуйя!

Oberstserj ★★
()
Ответ на: комментарий от Harald

Могу для эксперимента запитать от батареи, из интереса.

Тут это никому кроме вас не интересно )

Но сабж уже списан и в разработке применяться не будет.

Быстро вы сдались на элементарной проблеме. А из каких вообще соображений заказчик первоначально решил делать на нордиках?

vaddd ★☆
()
Ответ на: комментарий от vaddd

Быстро вы сдались на элементарной проблеме.

А зачем жрать кактус, когда есть фуагра?

Oberstserj ★★
()
Ответ на: комментарий от vaddd

Быстро вы сдались на элементарной проблеме.

ну как быстро, минимум две недели пердолился

А из каких вообще соображений заказчик первоначально решил делать на нордиках?

не знаю, рекламы начитался наверное

Harald ★★★★★
() автор топика
Ответ на: комментарий от Harald

ну как быстро, минимум две недели пердолился

Йопт. Если это ваша работа - под рукой должна быть куча программируемых источников сигнала, включая автономные, гальванически развязанные, логические анализаторы, и за пару дней вы бы локализовали проблему. Иначе какой же вы гей ембеддер, вы обычный кодер )

vaddd ★☆
()
Ответ на: комментарий от vaddd

До сегодняшнего дня реальной необходимости ни в чём из перечисленного не возникало, даже осциллограф только сейчас понадобился, для пруфов. Раньше всё работало ожидаемым образом.

Harald ★★★★★
() автор топика
Ответ на: комментарий от Harald

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

Кстати, что за хрень на верхнем графике третьего скрина? Какой-то выпад немного левее середины

vaddd ★☆
()
Последнее исправление: vaddd (всего исправлений: 1)

Воткни триггер Шмитта перед входом к МК и крути его параметры. Ну или читай эррату до просветления (мне читать лень).

Ещё потрогай свой 32МГц кристал.

tyakos ★★★
()
Последнее исправление: tyakos (всего исправлений: 1)
Ответ на: комментарий от vaddd

Тогда лучше начните как тут уже советовали - с влияния параметров входного сигнала - уровни, частота, фронты.

Я могу поискать идеальный сигнал, с которым всё возможно будет работать. Но железка-то должна с реальным сигналом дело иметь, и быть максимально толерантной к отклонениям.

И вообще не исключено что с режимами мк непорядок - какой-нибудь активный дебаг или трэйсинг может мешать.

Сейчас питание было от батарейки, с отключённым от компа USB. Так что никакого дебага или трейсинга не должно быть.

Кстати, я начинаю догадываться, зачем они поместили батарейный отсек и батарейку в комплекте на девборду :)

Harald ★★★★★
() автор топика
Ответ на: комментарий от Harald

Я могу поискать идеальный сигнал, с которым всё возможно будет работать. Но железка-то должна с реальным сигналом дело иметь, и быть максимально толерантной к отклонениям

Идеальный сигнал нужно искать не для того, чтобы с ним заработало, а чтобы локализовать причину. Исходите из того, что довольно известный и массовый мк не может иметь толерантность к параметрам входного сигнала в доли процентов - это нонсенс. То есть виноваты либо условия эксплуатации, либо некорректный режим использования (как видите, я довольно интеллигентно выразился). Поскольку ни у вас, ни у заказчика нет ни инструментария для изучения проблемы, ни эксплуатационного опыта по этому семейству мк, ни реальной потребности (уже) в преодолении всего этого - забейте. Лучший процессор - всегда тот, который вы знаете как облупленный.

vaddd ★☆
()
Ответ на: комментарий от vaddd

либо некорректный режим использования (как видите, я довольно интеллигентно выразился).

т.е. руки из жопы :D

но поддержка в режиме использования, т.е. в приведённом тестовом коде ничего некорректного не нашла же )

Harald ★★★★★
() автор топика

Перемещено xaizek из development

нетехнические разговоры о Linux/Unix

Хрюкнул, почитывая нетехническую дискуссию …

UVV ★★★★★
()
Ответ на: комментарий от vaddd

ща все тут будете смеяться, но с другим МК точно такая же проблема наблюдается :D

скорее всего помехи по питанию, хз как фиксить

все девайсы, включая осциллограф, подключены к компу по USB

Harald ★★★★★
() автор топика
Ответ на: комментарий от Harald

Никто смеяться не будет. Это замечательно. Предлагаемый порядок действий:

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

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

Если эффект остается, то:

ц. Заняться вплотную тем самым внешним источником сигнала. Заменить его на какой-нибудь заведомо корректный источник с более-менее регулируемыми параметрами

д. Исключить дебильные причины типа, что ваш компьютерный инструментарий не подходит для таких целей. Например либо источник, либо счетчик отвлекается на что-то еще, выключаясь на посторонние прерывания, посторонние задачи и пропуская при этом нужные счетные фронты. В связи с этом еще раз спрошу (вы не ответили) - что за хрень на верхнем графике третьего скрина? Выглядит как скачок фазы на 180 в исходной импульсной последовательности. Само оно может и не страшно, но полагаю, что такого быть не должно.

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

vaddd ★☆
()
Ответ на: комментарий от Harald

В питание как причину проблемы я верю меньше всего. Плавало бы в гораздо более широких пределах. И в проблемы с входным сигналом не очень верю. Они бы тоже проявлялись вплоть до полного пропадания счета и на результат влияло бы все, начиная от щупа осциллографа. Вы именно пропускаете иногда фронт сигнала переполнения счетчика. Выясняйте почему

vaddd ★☆
()
Последнее исправление: vaddd (всего исправлений: 1)
Ответ на: комментарий от Harald

Для начала исключить банальную перезагрузку МК (проверить добавив какое-то действие при включении и мониторить его).

Но вообще без схемы тебе тут только телепаты могут погадать, ну и vaddd.

Кстати, получается не

Продукция Nordic Semiconductor — говно.

а у тебя руки кривые. Качай навыки.

tyakos ★★★
()
Последнее исправление: tyakos (всего исправлений: 1)
Ответ на: комментарий от vaddd

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

тестовый код для Atmel SAM4S, настраивает таймер-счётчик и переключает пин PA16 по достижению счётчиком 37

в реальной осциллограмме на каждый выходной имппульс от 21 до 42 входных

#include "asf.h"
#include "stdio_serial.h"
#include "user_board.h"

void TC0_Handler(void)
{
        if ((tc_get_status(TC0, 0) & TC_SR_CPCS) == TC_SR_CPCS) {
                ioport_toggle_pin_level(PIO_PA16_IDX);
        }
}

int main(void)
{

        sysclk_init();
        wdt_disable(WDT);
        pmc_disable_all_periph_clk();
        pmc_disable_udpck();

        sysclk_enable_peripheral_clock(ID_PIOA);
        //sysclk_enable_peripheral_clock(ID_PIOC);
        sysclk_enable_peripheral_clock(ID_TC0);

        ioport_init();
        ioport_set_pin_mode(PIO_PA4_IDX, IOPORT_MODE_MUX_B);
        ioport_disable_pin(PIO_PA4_IDX);

        ioport_set_pin_level(PIO_PA16_IDX, 0);
        ioport_set_pin_dir(PIO_PA16_IDX, IOPORT_DIR_OUTPUT);


        tc_init(TC0, 0,
                        TC_CMR_TCCLKS_XC0 /* Clock Selection */
                        | TC_CMR_ETRGEDG_NONE
                        | TC_CMR_CPCTRG

        );


        NVIC_DisableIRQ(TC0_IRQn);
        NVIC_ClearPendingIRQ(TC0_IRQn);
        NVIC_SetPriority(TC0_IRQn, 0);
        NVIC_EnableIRQ(TC0_IRQn);

        tc_write_rc(TC0, 0, 37);
        tc_enable_interrupt(TC0, 0, TC_IER_CPCS);
        tc_start(TC0, 0);
        while(1)
        {
        }
}

Harald ★★★★★
() автор топика
Ответ на: комментарий от vaddd

Вы именно пропускаете иногда фронт сигнала переполнения счетчика.

он же унутре контроллера, в микросхеме бегает

новый МК бегает на 120МГц, запас по циклам на выполнение прерывания точно есть

Harald ★★★★★
() автор топика
Ответ на: комментарий от vaddd

https://ibb.co/CmsSv5r

если посмотреть на оба сигнала крупным планом, на них обоих явно накладывается какой-то другой сигнал частотой поменьше

здесь сверху выходной импульс, снизу входной

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

может и артефакты оцифровки, хз

Harald ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.