
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

Dolphin
11.07.2017
23:50:23

Ivan
11.07.2017
23:50:46
юзаю TPS76933
ему норм должно быть

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

Th0r
11.07.2017
23:54:23

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
нету