• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

JL SoC

nikolz

Well-known member
Интересует SDK и документация не на китайском к чипам KT1025A, AC69xx.
и примеры любые.
надо сделать радио+плеер+часы - с озвучкой управления (для незрячих)
 

olegnv

New member
SDK и документацию выкладывали в этом форуме, а примеры я бы сам посмотрел, как подключиться и прошить
 

nikolz

Well-known member
нашел на просторах инет 1 Gb собранного по данным чипам. Но все на китайском. В том числе и комментарии к примерам и ответы на вопросы.
Теперь проблема в переводе. Позову гугл пусть переводит.
 

nikolz

Well-known member
на этом сайте есть примеры
 

nikolz

Well-known member
Чип Jerry 6905A с использованием метода обновления T-карты (перевод Гугл)
Не так уж много глупостей:
мы сначала подходим к передней части основной функции, чтобы увидеть эту функцию:
set_update_file_name("/jl_690x.bfu");
  • 1
Здесь отмечено имя обновленного файла. Где этот файл? В каталоге apps_soundbox \download \ac690x \

post_build Мы видим, что есть два файла с таким именем, только суффикс отличается, так в чем же разница между ними? Файл .bin используется для записи во время массового производства, а файл .bfu-для обновления с помощью T-карты.
Так как же использовать этот файл .bfu? Сначала нам нужно подготовить карту T, которую машина может использовать нормально раньше, перетащить файл .bfu непосредственно в корневой каталог карты T (не помещайте его в файл), затем вставить карту T и включить ее, чтобы убедиться, что машина обновляется, вы можете загрузиться нормально раньше, но вы не можете обновить, если вы не можете загрузиться нормально. Затем вы услышите короткий звуковой сигнал. Когда обновление будет успешным, здесь будет 6 звуковых сигналов; однако не каждый чип может быть успешно обновлен. Если есть два длинных звуковых сигнала, это означает, что обновление не удалось. , этот чип не может использовать программу обновления T-карты, но может использовать только метод записи USB для обновления программы (спросите агента, я не могу объяснить, почему это происходит, когда он покидает завод).
 

nikolz

Well-known member
Настройки pin-кода чипа Jay 6905A (перевод Гугл)

Чип Jeremia 6905A имеет всего 24 контакта, и большинство из них уже установлены. После того как указанные контакты израсходованы, остаются только последние несколько портов.
IR (порт дистанционного управления): ir_key_init() в key_drv_ir.c найдите IR_PORTC(4) (здесь установлен PC4), если вы хотите изменить его, вы можете изменить его в соответствии с вашими потребностями.
AD (аппаратная кнопка): найдите массив ad_table[] в key_drv_ad.c, вы увидите AD_KEY_PB9 (этот параметр-PB9) Нажмите на источник insight, чтобы увидеть настройки других портов, установленных на соответствующие.
Настройки ИК-и AD-портов описаны выше. Далее описываются настройки для отдельных контактов:
Вот ножки ПК в качестве примера:
#define MIO_API_IO_PORT_DIR JL_PORTC->DIR //Direct Input:|= Output: &= ~
#define MIO_API_IO_PORT_DIE JL_PORTC->DIE //Enable bit
#define MIO_API_IO_PORT_OUT JL_PORTC->OUT //Output High:|= Low: &= ~
#define MIO_API_IO_PORT_PU JL_PORTC->PU //Upward Pull On:|= Off: &= ~
#define MIO_API_IO_PORT_PD JL_PORTC->PD // Pulldown On:|= Off: &= ~

Например, установите PC5 на выход high:
JL_PORTC->DIR &= ~BIT(5);
JL_PORTC->OUT &= ~BIT(5);
If the input is low, just change JL_PORTC->OUT &= ~BIT(5); to JL_PORTC->OUT |= BIT(5);

Есть некоторые контакты, которые разделяют два контакта для двух портов ввода-вывода, таких как PA3 и PB13. PA3 должен быть установлен в высокое сопротивление при установке PB13. Просто добавьте перед while(1) функции mian: JL_PORTA->PD &=~BIT(3); вы можете установить PA3 в high impedance.
Существует также случай, когда пин-код совместно используется с пинами DM и DP. Один раз необходимо добавить функцию linein. Linein нуждается в двух выводах, один-обнаружение linein, а другой-передача данных linein. Просто оставьте PC3 и PA4 ноги, и эти две ноги совместно используются с DM и DP.
In dev_linein.h, измените обнаружение linein на PC3. Конкретные настройки следующие:
#define AUX_IO_BIT BIT(3)
#define AUX_DIR_SET (JL_PORTC->DIR |= AUX_IO_BIT)
#define AUX_PU_SET (JL_PORTC->PU |= AUX_IO_BIT)
#define AUX_IN_CHECK (JL_PORTC->IN & AUX_IO_BIT)
В файле linein.c измените вывод данных linein в aux_dac_channel_on() на PA4. Конкретные настройки следующие:JL_PORTA->DIR |= (BIT(4));
JL_PORTA->DIE &= ~(BIT(4));
JL_PORTA->PU &= ~(BIT(4));
JL_PORTA->PD &= ~(BIT(4));
//This sets PA4 to a high-impedance state. The same is true for a normal IO port with an IO port.

Представьте метод установки USB DM и DP в высокоимпедансное состояние:
В sys_detect.c измените usb_2_io() следующим образом:
USB_DM_PU(0);
USB_DM_PD(0);
USB_DM_DIR(1);
//This sets the DM pin to a high impedance state.
 

nikolz

Well-known member
Jerry AC692X - Sleep Wake (перевод Гугл)

Пробуждение Джерри от сна отличается от некоторых других микросхем. После того, как IC Джерри просыпается, указатель ПК указывает на начальный адрес кода вместо инструкции перед сном, аналогичной reset, поэтому некоторые важные переменные должны быть сохранены. Он должен быть записан в виртуальную машину перед переходом в спящий режим, а затем считан обратно при сбросе.
//include_lib\common\flash_api.h
//------Please add a new VM item under the secondary dividing line-----//
//++++++Users apply for flash
user_VM_XM_rtc_task,
user_VM_XM_system_status_flag,
VM_MAX_INDEX,
s32 vm_write(u8 hdl, const void *data_buf, u16 len);
s32 vm_read(u8 hdl, void *data_buf, u16 len);

vm_write(user_VM_XM_system_status_flag,user_system_status_flag_buffer,11);
vm_read(user_VM_XM_system_status_flag,user_system_status_flag_buffer,11);

Существует два типа пробуждения покоя Джерри: один-пробуждение PR-порта, другой-пробуждение общего IO-порта, два разных спящих режима имеют разные функции входа в спящий режим и не могут использоваться взаимно.
PR порт
//Initialize to wake up on falling edge
void PR2_configure_wakeUP(void)
{
//PR2 io output
PORTR_PU (PR2, 1);
PORTR_PD (PR2, 0);
PORTR_DIR(PR2, 1);
PORTR_DIE(PR2, 1);
RTC_SFR_SET(RTC_CON_ADDR04, 0, 8, 0x22);//Allow PR2 port falling edge to wake up
IRTC_WKIE(1);
}
//Sleep function, as long as the PR2 port is pulled down to wake up
void user_task_enter_power_off_status(void)
{
printf("user_task_enter_power_off_status\n");
vm_write(user_VM_XM_system_status_flag,user_system_status_flag_buffer,11);
adc_mux_ch_set(0); //Close the ad function of the PR port to prevent the crystal oscillator from not working
set_lowpower_keep_32K_osc_flag(1); //The 32k crystal oscillator must be kept working before entering rtc sleep
enter_sys_soft_poweroff();// Shut down, power down can only be awakened through PR port rtc
}

Обычный порт ввода-вывода Возьмите PA0 в качестве примера, вы можете изменить его в соответствии с руководством
//Interrupt function
static void user_wakeup_isr(void)
{
JL_WAKEUP->CON2 |= BIT(0);
if (!read_wakeup){//Read io port level

printf("prot A0 input intrrupt trigger\n");
}
}
IRQ_REGISTER(IRQ_PORT_IDX, user_wakeup_isr);
void wakeup_init(void)
{
// PA0 configuration input The only difference between the sdk configuration and its own configuration is that I configure the pull-up input, which is configured with high resistance
JL_SYSTEM->LDO_CON1 = 0;
JL_WAKEUP->CON0 = 0; //wakeup enbale
JL_WAKEUP->CON1 = 0; //wakeup edge
JL_WAKEUP->CON2 |= BIT(0);

wakeup_INIT_EN();
JL_PORTA->DIE |= BIT(0);

JL_IOMAP->CON2 &= ~0x1F;
// JL_IOMAP->CON2 |= BIT(0); //Map PA1 port to wake up IO corresponding to IOMAP2[5:0] 000001
JL_WAKEUP->CON1 |= BIT(0); //Falling edge
JL_WAKEUP->CON0 |= BIT(0); //Enable

IRQ_REQUEST(IRQ_PORT_IDX, user_wakeup_isr); //Interrupt
printf("PA0 is confingured the wake up interrupt port\n");
}
void enter_sleep_mode_set(void)
{
close_wdt();
dac_toggle(0); //close dac mudule
while (!(BIT(7) & JL_ADC->CON));
JL_ADC->CON = 0;

JL_AUDIO->LADC_CON = 0;
JL_AUDIO->ADA_CON0 = 0;
JL_AUDIO->ADA_CON1 = 0;

JL_AUDIO->DAA_CON0 = 0;
JL_AUDIO->DAA_CON1 = 0;
JL_AUDIO->DAA_CON2 = 0;
JL_AUDIO->DAA_CON3 = 0;
/* JL_SYSTEM->LVD_CON = 0; */
JL_SYSTEM->LDO_CON1 = 0;

JL_WAKEUP->CON0 = 0; //wakeup enbale
JL_WAKEUP->CON1 = 0; //wakeup edge
JL_WAKEUP->CON2 = 0xffff; //wakeup pending(clear)

JL_WAKEUP->CON2 |= BIT(0);
JL_PORTA->DIR |= BIT(0);
JL_PORTA->DIE |= BIT(0);
JL_PORTA->PU |= BIT(0);
JL_PORTA->PD &= ~BIT(0);
JL_IOMAP->CON2 &= ~0x1F;
//Map PA0 port to wake up IO
JL_WAKEUP->CON1 |= BIT(0);
JL_WAKEUP->CON0 |= BIT(0);

adc_mux_ch_set(0); //Close the ad function of the PR port to prevent the crystal oscillator from not working
set_lowpower_keep_32K_osc_flag(1); //The 32k crystal oscillator must be kept working before entering rtc sleep
extern void set_sys_freq(u32 out_freq);
#define IDLE_Hz 120000000L
set_sys_freq(IDLE_Hz);
enter_sys_sleep_mode();
}
 

nikolz

Well-known member
я это видел.
Но решил все же пойти привычным путем, как сделал для TLSR.
кстати сказать с их прошивальщиком у меня нет никаких проблем.
Поэтому решил купил прошивальщик для JL ACxxxx.
Если будет желание, прочитаю с него протокол и слеплю свое.
 

nikolz

Well-known member
еще хочу заметить, что чел танцует с бубном вокруг AC690x, а меня интересуют новые серии AC692x.
Да и чел сам в конце этого опуса написал:
"К сожалению, у меня все еще были проблемы с получением чипа, позволяющего мне загружать прошивку."
А оно мне надо?
 

pvvx

Активный участник сообщества
еще хочу заметить, что чел танцует с бубном вокруг AC690x, а меня интересуют новые серии AC692x.
Да и чел сам в конце этого опуса написал:
"К сожалению, у меня все еще были проблемы с получением чипа, позволяющего мне загружать прошивку."
А оно мне надо?
Там продается не фирменный программатор. Это китайцы делают и часто на нем в нагрузку стоит обычный чип для JLink/STLink, куча светодиодов для цветомузыки и выключатели, чтобы оправдать завышенную цену :)
Но вы выбрали без оного.
Пустой чип и так программируется - без дерганий USB.
 

pvvx

Активный участник сообщества
Но решил все же пойти привычным путем, как сделал для TLSR.
И много вы напрограммировали на TLSR?
Что-то не видно никаких проектов на них.
С JL будет хуже - из него даже простой ногодрыгающий контроллер сделать сложно, т.к. всё сокрыто в бинарных либах с куцыми заголовками. Т.е. у вас очень скудный набор кривых кубиков из которых вы можете собрать всего пару комбинаций - только те, что заложены в халявном SDK раскиданном по инет.
О lowPower применении у данных чипов вопроса не стоит - это только громадные батарейки.

Вам простой вопрос, определяющий что вы сможете "слепить" на JL чипах - хто такая за память "zebra" и что в ней ворочается в данном SDK? :)
 

pvvx

Активный участник сообщества
Причина по которой я забросил данные чипы проста -
1. Нет возможности изменения работы BT/BLE - всё сокрыто в бинарниках. Для добавления или изменения UUID и прочего вам потребуется "хакнуть" и переписать бинарные либы или контракт с JL для получения полных описаний чипа.
2. Громадное потребление в режимах LowPower. Аппаратная специфика чипов.
Уж слишком много надо времени и сил для реверса всех бинарных либ, а это не имеет смысла т.к. в продаже есть другие чипы с открытой документацией и лучшими характеристиками.
 
Сверху Снизу