@ru_arduino

Страница 2807 из 7737
Ivan
11.07.2017
23:18:20
в свойствах устройства

Alm
11.07.2017
23:19:25
Нету смотрел уже

Ivan
11.07.2017
23:20:37
значит есть вероятность, что их в принципе нет)

Alm
11.07.2017
23:21:20
Хреново

Google
Ivan
11.07.2017
23:50:46
юзаю TPS76933

ему норм должно быть

Dolphin
11.07.2017
23:53:09
кондеры стоят?

Th0r
11.07.2017
23:54:23
ему норм должно быть
а в даташите написано +1в должно быть

Ivan
11.07.2017
23:54:25
да, на 1 мкФ, и на 100 нФ. также на 1 мкФ стоит не только на 3.3В, но и на 5В, и на входе от аккумулятора

> Dropout Voltage Typically 71 mV at 100mA

нет

Dolphin
11.07.2017
23:56:03


Тут мало того что 4.7 указан, еще и требования к ESR

Не верил бы ты ;)

Че за проблема в питании то епт? Возми от роутера БП, он стабильней

... чаще всего )

Google
Ivan
11.07.2017
23:58:35
ну вообще по задумке девайс будет питаться от аккумулятора ?

кстати, аккумулятор я нашёл

и оно сначала весьма шустро заработало, а потом после нескольких перепрошивок (я вносил небольшие изменения, которые никак не трогают SPI), перестало, после отката изменений, лучше уже не стало

и тут мне почему-то вспоминается про мой опыт с MSP430, когда они могли удерживать содержимое ОЗУ ещё несколько минут после отключения питания (ибо очень мало жрут в спящем режиме)

а не может ли там что-то не до конца сбрасываться после перепрошивки?

Dolphin
12.07.2017
00:02:20
врядли, обычно после пирсинга - холодный старт

ты же можешь проверить полным отключением, зачем спрашивать?

Ivan
12.07.2017
00:07:22
ну... если переткнуть питание в течении 5-10 секунд, то оно гарантированно виснет, если через несколько минут, то немного работает, а потом виснет

хотя вряд ли проблема в питании

я тут запилил маячок на SoftDevice

он работает идеально

а ведь радиопередача должна быть потребовательнее к питанию, чем всякие там SPI

так то контроллер вроде не сложный, да и SDK неплохое... но блин... что за магия с SPI

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

а потом в какой-то момент перестало

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

и теперь рандомно - то работает, то нет

хоть блин bitbang'ом делай SPI... но это как-то тупо...

Dolphin
12.07.2017
00:16:57
всмысле ты убрал СПИ и рандомно работает теперь?

Ivan
12.07.2017
00:17:32
нет, сначала с SPI нормально работало, я потихоньку пилил функционал

Google
Ivan
12.07.2017
00:17:40
и в какой-то момент оно перестало нормально работать

при этом оно виснет обычно вообще на первой же передаче, а я редактировал то что происходит сильно потом (инициализацию АЦП, которые подключен по SPI я написал с самого начала)

я откатил все правки, оставив только то что было сначала - но оно не прекратило ключить

если закомментить все посылки по SPI, то в 100% случаев не глючит

Dolphin
12.07.2017
00:18:57
ну дык, чтобы проверить железо, дай тестовую прошивку какую нибудь

проверь отдельно SPI, потом с передачей

Ivan
12.07.2017
00:19:59
расчитано на использование nRF5_SDK_12.3.0 (в комплект не входит)

чисто инициализация SPI ничего не вешает

вешает всегда передача (nrf_drv_spi_transfer)

при этом висит всегда внутри spi_xfer (файл nrf_drv_spi.c) в цикле: while (!nrf_spi_event_check(p_spi, NRF_SPI_EVENT_READY)) {}

(я смотрел отладчиком)

так-то МК работает, например, если инициализирован SoftDevice, то маячок не прекращается обнаруживаться

просто main висит в цикле ожидания события от SPI, которое по неизвестной причине в 90% случаев не приходит

пробовал и SPI0, и SPI1 - ничего не меняется

Dolphin
12.07.2017
00:23:12
о нихуя, писарь вменяемый ))

Ivan
12.07.2017
00:23:40
там щас закомменчено всё, что вешает

чтобы зависло надо раскомментить хотя бы вызов external_adc_init() в main

его уже достаточно чтобы прошивка не ушла в цикл мигания светодиодом

Dolphin
12.07.2017
00:24:52
а ты перед отправкой вызываешь: APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi, tx_buf, tx_count, rx_buf, rx_count));

код возврата есть?

Google
Ivan
12.07.2017
00:25:19
оно ж зависает внутри этой функции

кода возврата нет поэтому

Dolphin
12.07.2017
00:25:30
оно зависает в цикле

я имею ввиду код проверки на ошибки

Ivan
12.07.2017
00:25:49
который внутри функции

я смотрел отладчиком именно вообще что происходит. там такой стек вызовов: main -> external_adc_init -> external_adc_simple_command -> spi_transfer -> nrf_drv_spi_transfer -> nrf_drv_spi_xfer -> spi_xfer

а уже внутри самой последней функции цикл, в котором всё крутится бесконечно и не выходит

начиная с nrf_drv_spi_transfer и дальше это уже не мой код, а код из nrf_drv_spi.c из состава SDK

код SDK явных ляпов не содержит (в части SPI, где я смотрел), к тому же ИНОГДА он таки срабатывает нормально

на всех линиях данных АЦП висят резисторы по 1 кОм (типа для уменьшения помех на АЦП от бросков тока)

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

Dolphin
12.07.2017
00:30:29
оптимизацию отключал?

Ivan
12.07.2017
00:30:45
да, пробовал компилить с -O0

Dolphin
12.07.2017
00:31:14
то же самое видимо?

Ivan
12.07.2017
00:31:56
ага

щас попробую ещё раз на всякий случай)

Dolphin
12.07.2017
00:32:26
указатели проверял отладчиком?

стек?

static void external_adc_simple_command(uint8_t command) { uint8_t dummy; spi_transfer(&command, sizeof(command), &dummy, sizeof(dummy)); } пустышку объяви статиком

Ivan
12.07.2017
00:34:17
1) оно не падает в HardFault, SoftDevice вообще нормально работает и после зависания основного кода 2) внутри функций SPI указатели на первый взгляд валидные

Google
Dolphin
12.07.2017
00:34:43
у меня интуитивное подозрение на нарушение доступа к данным

Ivan
12.07.2017
00:34:59
объявление пустышки статиком ничего не даёт

а вообще на самом деле по документации эта пустышка не нужна - там можно указать NULL и 0, если мы ничем не хотим считывать, только отправлять

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

просто суть в том что после записи байта в регистр TXD модуля SPI, он так и не взводит никаких битиков в регистре статуса (а должен сообщить, что байт ушёл)

Dolphin
12.07.2017
00:38:13
а байт приходит в дестинейшн?

Ivan
12.07.2017
00:38:21
нечем посмотреть

Dolphin
12.07.2017
00:38:36
кто получатель?

Ivan
12.07.2017
00:38:49
АЦП ADS1298

Dolphin
12.07.2017
00:39:30
А зачем у тебя все функции объявлены статиком?

Ivan
12.07.2017
00:39:55
ну вообще это типа хороший стиль, не засоряется глобальное пространство имён при линковке

Dolphin
12.07.2017
00:40:09
это в крестах

Ivan
12.07.2017
00:40:17
в Си тоже

Dolphin
12.07.2017
00:40:21
а здесь статик играет другую роль )

Ivan
12.07.2017
00:40:43
он играет роль другую для переменных внутри функций

для глобальных переменных и функций - такую же

во всяком случае в GCC

могу пруфануть: [kiv@thinkpad-x230t tmp]$ cat 1.c #include <stdio.h> #include <stdbool.h> static void test(void); int main() { test(); return 0; } [kiv@thinkpad-x230t tmp]$ cat 2.c #include <stdio.h> static void test(void) { printf("Test\n"); } [kiv@thinkpad-x230t tmp]$ gcc -c -o 1.o 1.c 1.c:4:13: предупреждение: «test» используется, но нигде не определена static void test(void); ^~~~ [kiv@thinkpad-x230t tmp]$ gcc -c -o 2.o 2.c [kiv@thinkpad-x230t tmp]$ gcc -o test.elf 1.o 2.o 1.o: In function `main': 1.c:(.text+0x5): undefined reference to `test' collect2: ошибка: выполнение ld завершилось с кодом возврата 1

если убрать статик, то оно скомпилилось бы ?

если есть под рукой такой контроллер, то ты мог бы (если совсем делать нечего) залить туда мою прошивку и посмотреть, что будет. ведь SPI в принципе не важно, есть ли получатель с другой стороны - просто считается 0xFF вместо нормальных данных и всё.

Dolphin
12.07.2017
00:46:23
нету

Страница 2807 из 7737