[cvetblue]Новость от 08/05/2015 Прошивка V3Великого Девайса (для Меги 8, 88, 168, 328). Поддержка Микрочипа, i2c-scan, уточнение для IR-box, скорость soft для ATMEL понижена в 6 раз для прошивки целевого Атмела с кварцем 32768. Скачать PostalAVR_v3b_lice[/cvetblue] [cvetblue] Прошивка V4 микроконтроллера ATmega168 программатора Postal3 - https://remont-aud.net/_fr/362/PostalAVR168.rar[/cvetblue]
Выложу всё-таки версию, которая в работе, но в которой исправлены проблемы с fx2lp в режиме I2C. Проблема с fx2lp состояла в том, что I2C-протокол работает с задержками, при сборке буфера задержки накапливаются и срабатывает таймаут семафора, что при дальнейших попытках взаимодействия приведёт к синему экрану. Прошивка fx2lp доработана и подаёт сигнал об этом событии, который программа должна принимать. Предполагается, что текущая прошивка fx2lp будет совместима со всеми будущими версиями программы, со старыми версиями совместим режим SPI/EMMC. Также в будущем я незначительно скорректирую pinout для разделения spi-cs и ircontrol-out (для FT232H это уже сделано). Также я провёл ревизию прошивки fx2lp на предмет повышения скорости, и совершенно точно могу сказать, что при используемом подходе скорость поднять невозможно, к сожалению. Вам совершенно необязательно "обновлять" программу, вы можете положить разные версии в соседние папки и настроить каждую для разных целей.
Исправлена критическая ошибка в прошивке FX2LP, из-за которой не работала запись SPI. Приложена вместе с программой, т.к. скорректированы тайминги, старые версии будут записывать SPI медленнее. Остальные функции будут исправляться по мере тестирования.
Добавлено (29.06.2025, 10:07:33) --------------------------------------------- Поскольку я широко выкладывал source для fx2lp, содержащий эту ошибку, какой-нибудь руководитель компании может легко проверить компетентность программиста соответствующего профиля, при найме на работу например.
Добавлено (01.07.2025, 23:58:49) --------------------------------------------- В последующих версиях прошивки для FX2LP выход "IR-LED NEGATIVE PULSE" перенесён на PA2. Дело в том, что при передаче на пейджер удобно формировать аналоговый сигнал POCSAG (если он нужен) через программирование IR-канала, а если он совмещён с сигналом CS, то понадобится дополнительная внешняя коммутация (после установки параметров через SPI). Для MEGA8..328 эти сигналы разнесены не будут. Для FTDI сигнал "ir-pulses negative" перенесён на ADBUS5 (раньше был на adbus3=CS). Для FX2LP подключение следующее:
Код
PB7=CMD/SPI - OUT FROM CHIP PB6=DAT0/SPI INPUT TO CHIP CTL0=CLOCK PB0=IR-RECEIVER VIA 1K PD5=SDA PD6=SCL (RESET AVR AND SPI-NEW) PD7=WP(ORG) - AND RESET FPGA WHEN SPI MODE. PD4=CS SPI,!!! CS ONLY!!! PD3=MISO MASTER INPUT (SLOW MODES) PD2=MOSI OUTPUT (SLOW MODES) PD1=CLOCK (SLOW MODES) PD0= IR-LED POZITIV PULSE PA7 = "PRE" VIA 1K FOR 93CXX CS USE PA0 AND PD4 TOGETHER (PA0 HAS LED ALSO), BUT PD4 IS TRUE CS. PA1 - SECOND LED PA2=IR-LED NEGATIVE PULSE!!! (CHANGED FROM PD4!!!)
Работа над стыком FX2LP и EPM240T100C5N ведётся, небольшой затык по работе мешает быстро закончить. Будет: 1. Только 1-битный режим для ISP. 2. Только для FX2LP. 3. Только eMMC.
Эта CPLD была выбрана из-за цены, доступности и ремонтопригодности для ISP eMMC, какие-либо расширения на ней не планируются.
entity serializer is port ( -- fx2lp connection fx2_data : inout std_logic_vector(7 downto 0); fx2_clk : in std_logic; -- clock for data exchange from GPIF
fx2_read_write_switch : in std_logic; -- write from fx2lp when low fx2_cmd_dat_switch : in std_logic; -- use dat-line when low fx2_ready_from_epm : out std_logic; -- ready to next from epm when low fx2_low_speed_switch : in std_logic; -- low initial speed when low
-- emmc connection for 3.3 and 1.8 emmc_clk33 : out std_logic; emmc_cmd33 : inout std_logic; emmc_dat33 : inout std_logic; emmc_clk18 : out std_logic; emmc_cmd18 : inout std_logic; emmc_dat18 : inout std_logic;
-- epm system connection epm_master_clk : in std_logic; -- input from fx2lp 48MHz epm_master_clk_ext : in std_logic; -- input from quartz-gen 50MHz epm_clk_select_jumper : in std_logic; -- input from quartz when low epm_clk_divby2_jumper : in std_logic; -- 48MHz -> 24MHz when low slow_clk_divby2_jumper : in std_logic -- 400kHz -> 200kHz when low -- maybe reset? ); end serializer;
architecture serial_convert of serializer is
signal master_clock : std_logic := '0'; -- isp clock from domains signal clk_counter : unsigned(7 downto 0):=(others=>'0'); signal isp_clock : std_logic := '0'; -- isp clock slow for init
signal reg_tx_data1 : std_logic_vector( 7 downto 0 ); signal reg_tx_data2 : std_logic_vector( 7 downto 0 ); signal reg_rcv_dat0_1 : std_logic_vector( 7 downto 0 ); signal reg_rcv_dat0_2 : std_logic_vector( 7 downto 0 ); signal reg_rcv_cmd1 : std_logic_vector( 7 downto 0 ); signal reg_rcv_cmd2 : std_logic_vector( 7 downto 0 );
begin
clock_switch_fx2: process(epm_master_clk) begin if epm_clk_select_jumper /= '0' then if epm_clk_divby2_jumper = '0' then if (rising_edge(epm_master_clk)) then master_clock <= NOT master_clock; end if; else master_clock <= epm_master_clk; end if; end if; end process clock_switch_fx2; ------------------------------------------------------ clock_switch_quartz: process(epm_master_clk_ext) begin if epm_clk_select_jumper = '0' then if epm_clk_divby2_jumper = '0' then if (rising_edge(epm_master_clk_ext)) then master_clock <= NOT master_clock; end if; else master_clock <= epm_master_clk_ext; end if; end if; end process clock_switch_quartz; ------------------------------------------------------ clock_divider: process(master_clock) begin if(rising_edge(master_clock)) then clk_counter <= clk_counter + 1; end if; end process clock_divider; ------------------------------------------------------ isp_clock_switch: process(master_clock) begin if fx2_low_speed_switch = '0' then if slow_clk_divby2_jumper = '0' then isp_clock <= clk_counter(7); else isp_clock <= clk_counter(6); end if; else isp_clock <= master_clock; end if; end process isp_clock_switch; ------------------------------------------------------ fx2_parallel_rw: process(fx2_clk) begin .......................................
Добавлено (15.11.2025, 20:10:59) --------------------------------------------- Отладочные платы для epm240t100c5n разрабатывались школьниками, поэтому там VCCIO1 и VCCIO2 жёстко соединены с 3.3 вольт. Понадобится доработка с установкой стабилизатора на 1.8 вольт снизу для VCCIO2, будет описание как поставить.
Да, FX2LP удобен. При отладке взаимодействия с драйвером работало даже на Windows 98 (с ограничением по размеру файлов). В связке с CPLD/FPGA может работать быстро. Чтобы было понятно, как должен выглядеть и сколько должен стоить идеальный программатор, посмотрите эту ссылку: https://aliexpress.com/item/1005006292929528.html Покупать не нужно, хотя я лично купил, потому что отладочная плата с одним XC2C стоит дороже. Вот практически готовый программатор, вот такая его цена, и такая должна быть у нормального программатора начинка. И всё равно решение FX2LP + EPM240T100C5N оказывается лучше при неудачном ISP-подключении, потому что CPLD стоит 100 рублей.
Нет, поддержки этой платы не будет, я не потяну программную часть (по времени впридачу к остальному). Я привёл пример, как должен выглядеть программатор, если кто-то его с нуля разрабатывает и хочет сделать хорошо. Я сделаю (делаю прямо сейчас) дополнение на EPM240T100C5N для ISP eMMC, которую можно сделать в виде "шляпы" для платы FX2LP (но можно и проводками подключать), эта конструкция будет работать с eMMC на скорости, сопоставимой с AU6438. Стык с FX2LP получается универсальный, и если в дальнейшем понадобится поддержка, например, spi-nand, то её можно будет сделать аналогично. В принципе, таким способом ("шляпа" для FX2LP на FPGA) можно реализовать что угодно, однако при росте сложности будет резко расти цена FPGA/CPLD, что нежелательно. Также я рассматриваю решения FX3 и CH569 для USB3 на будущее. Нужно доделать текущее.
Не существует, к сожалению, отладочных плат на EPM240T100C5N с разделёнными VCCIO1/2, придётся дорожку резать (вроде одну). Зато проводки ISP напрямую от чипа, даже, возможно, внутренних подтяжек хватит. Тестировать на 3.3 вольта можно на оригинальном варианте отладочной платы. Приведём режим eMMC в полный порядок.
Добавлено (18.11.2025, 21:47:34) --------------------------------------------- Скелет прошивки EPM240 написал, пока что Quartus обругивает меня.
Аппаратно это выглядит как соединённые проводками 2 платы с Алиэкспресс. В идеале на плату FX2LP должна быть "шляпа" с EPM240, которую я сам разрабатывать не буду, но если кто-то будет - не забудьте сделать сверху надпись "EMTTv4". В качестве схемы будет список соединяемых пинов плюс чёткое фото, на котором цветными линиями будут разборчиво видны все соединения.
Добавлено (19.11.2025, 17:13:32) --------------------------------------------- EMTT - Extremely Majestic Total Tool.
У FX2LP линии PB0..PB7 были задуманы под параллельную шину заранее, плюс много управляющих сигналов. Пока что Quartus не может собрать, пишет: Error (10028): Can't resolve multiple constant drivers for net "fx2_ready_from_epm" at myserializer.vhd(237)
Со стороны программы должна быть поддержка работы через EPM, это тоже было заготовлено. Однако похоже, что ресурсов в EPM240 не хватает. На основные дела всё равно хватит, но надо резать лишнее.
Добавлено (20.11.2025, 20:04:47) --------------------------------------------- Временно чикнул из кода пару недоделанных синхронизаторов - Quartus выдал зелёную портянку. Основная логика заняла 20%, так что EPM240 хватает с запасом. Дешёвые понты с FPGA Spartan мы не будем делать.
Добавлено (21.11.2025, 11:04:02) --------------------------------------------- Разводка пинов EPM240 будет выполнена с оптимизацией под "шляпу" для стандартной платы FX2LP. Сначала я хотел разместить микросхему снизу, оставив сверху место для пафосного муляжа или надписи, однако при частой работе по ISP велика вероятность выбить микросхему. Заменять EPM240, которая стоит 100 рублей, удобнее всего, когда она установлена сверху. Поэтому пины EPM240 будут назначены оптимально для установки на шляпу сверху.
Добавлено (23.11.2025, 10:17:21) --------------------------------------------- Прошивка EPM240 занимает 40%, однако нехорошо собирается пока что: Warning (13012): Latch ask_isp_tx_start has unsafe behavior
Добавлено (29.11.2025, 16:03:54) --------------------------------------------- Код прошивки для EPM240 готов в шедевральном виде, Quartus обругивает только сигнал ready, т.к. не знает логики работы внешних устройств:
Цитата
Warning (10631): VHDL Process Statement warning at myserializer.vhd(140): inferring latch(es) for signal or variable "ready_to_fx2_ahead", which holds its previous value in one or more paths through the process
Это он ругается на код:
Код
if(TO_X01(fx2_clk) = '1') then ready_to_fx2_ahead <= '0'; elsif (ready_to_fx2_latch = '0') then ready_to_fx2_ahead <= '1'; end if;
Код так и остался 40% от размера EPM240. Теперь нужно поддержать это со стороны fx2lp и программы.