Добавьте конфигурации параметров к существующей аппаратной платформе на основе схемы:
Ранее созданные проекты использовали PS UART0 для вывода отладочной информации. На отладочной плате также есть PL UART. Этот UART преобразуется в USB-интерфейс с помощью чипа USB-to-serial (CH340X), подключенного к выводам на стороне PL (BANK35). UART1 на стороне PS может быть выведен на эти два вывода на стороне PL через EMIO. В этот раз мы будем использовать этот последовательный порт для вывода отладочной информации.
CAN также выведен на выводы B35_IO0 и B35_IO25 на стороне PL через EMIO.
Схема UART1: UART1 выведен на выводы B35_L20_P и B35_L20_N на стороне PL через EMIO.
Интерфейс конфигурации:
На странице конфигурации тактовой частоты вы можете настроить тактовую частоту CAN. Эта частота понадобится позже для настройки скорости передачи данных CAN и точки выборки.
Нажмите OK. Аналогично, щелкните правой кнопкой мыши по CAN_0 и UART_1_0, затем выберите 'Make External'. Программа автоматически сгенерирует внешние выводы, соответствующие интерфейсам CAN_0 и UART_1_0 в модуле верхнего уровня. Продолжайте выполнение последующих операций:
Интерфейс конфигурации после завершения на основе схемы:
После синтеза, реализации и генерации битового потока экспортируйте новый файл .xsa.
Обновите проект платформы в Vitis: щелкните правой кнопкой мыши по созданному проекту платформы, выберите 'Update Hardware Specification' и укажите путь к файлу .xsa. Когда появится следующее диалоговое окно, нажмите OK, что будет означать успешное обновление.
Поскольку мы будем использовать UART1 через EMIO для вывода отладочной информации, а платформа по умолчанию использует UART0, нам необходимо изменить некоторую информацию о платформе, а именно настройки BSP:
Аналогично, хотя существует два пакета поддержки платы (Board Support Packages), вы должны изменить тот, который показан ниже. Изменение другого не даст никакого эффекта. В конце нажмите OK.
Откройте Board Support Package -> Modify BSP Settings -> standalone и измените ps7_uart_0 на ps7_uart_1. Это назначит стандартный последовательный порт ввода/вывода на PS UART1.
Реализация кода:
Затем пересоберите проект платформы.
Далее создайте проект приложения. Единственное отличие заключается в выборе пустого файла .c при выборе шаблона.
Добавьте в проект исходный код из предоставленного нами примера. Вы также можете обратиться к встроенным тестовым проектам в Vitis. Типичный путь находится в каталоге установки Vitis: Xilinx\Vitis\2021.1\data\embeddedsw\XilinxProcessorIPLib\drivers.
Настройка скорости передачи данных CAN на ZYNQ7020 выполняется путем установки регистров контроллера CAN. В частности, вам необходимо рассчитать и установить значения для регистров CAN_BTR0 и CAN_BTR1, чтобы достичь желаемой скорости передачи и точки выборки.
Ниже приведены подробные шаги и объяснения:
Во-первых, вам необходимо указать требуемую скорость передачи данных CAN, например, 500 кбит/с или 1 Мбит/с. В то же время вам также необходимо определить точку выборки, которую обычно рекомендуется устанавливать около 85%.
Что касается настройки точки выборки, рекомендации от CiA (CAN in Automation) следующие: (1) Обычно настраивайте ее в диапазоне от 75% до 80%. (2) Оптимально выбирать положение точки выборки около 85%. (3) Скорость > 800K: 75%; Скорость > 500K: 80%; Скорость <= 500K: 87.5%
Настройки скорости передачи и точки выборки требуют расчетов на основе приведенной ниже диаграммы.
Sync Segment: Сегмент синхронизации (sync_seg) Propagation Segment: Сегмент времени распространения (prop_seg) Phase Segment 1: Сегмент фазового буфера 1 (phase_seg1) Phase Segment 2: Сегмент фазового буфера 2 (phase_seg2)
Согласно техническому руководству контроллера CAN, взаимосвязь между скоростью передачи, точкой выборки и регистрами BTR0 и BTR1 выглядит следующим образом:
Формулы:
Расчет скорости передачи: Bit Rate = Fpclk / ( (1+BRP) * (1 + (1+TSEG1) + (1+ TSEG2) )
Расчет точки выборки: SamplePoint = (sync_seg + prop_seg + phase_seg1) / (sync_seg + prop_seg + phase_seg1 + phase_seg2) * 100%
Где:
Fpclk — тактовая частота контроллера CAN.
BRP — младшие 8 бит регистра CAN_BTR0, управляющие значением предделителя.
TSEG1 и TSEG2 — соответствующие биты в регистре CAN_BTR1, управляющие длительностью Временного сегмента 1 и Временного сегмента 2.
Точка выборки: Точка выборки обычно выражается в процентах, например, 87.5%. Она представляет положение точки выборки в пределах времени бита относительно общего времени бита.
Пример: Если Fpclk составляет 50 МГц, целевая скорость передачи — 500 кбит/с, а точка выборки — 87.5%, можно рассчитать BRP = 2, TSEG1 = 12 и TSEG2 = 3. Соответствующие значения регистров: CAN_BTR0 = 0x02 и CAN_BTR1 = 0x13.
В контроллере CAN ZYNQ7020 найдите соответствующие регистры и запишите рассчитанные значения в CAN_BTR0 и CAN_BTR1.
После завершения настройки регистров необходимо запустить контроллер CAN, чтобы перевести его в рабочее состояние.
Следуйте шагам компиляции и отладки из документации по IIC.
Обратите внимание, что на этот раз USB-последовательный порт, подключенный к компьютеру, должен быть PL_UART на плате разработки.
Тестирование CAN-связи обычно требует как минимум двух независимых CAN-каналов: один в качестве передатчика (Tx), а другой — в качестве приемника (Rx), чтобы проверить полную функциональность передачи и приема данных. Текущая плата разработки имеет только один CAN-канал, поэтому она не может напрямую выполнять тест с самопередачей и самоприемом. Требуется отдельное CAN-устройство.
Если у вас нет отдельного CAN-устройства, вы можете выполнить только петлевой тест:
Результаты отладки в петлевом режиме выглядят следующим образом:
Если у вас есть другое CAN-устройство, вы можете выполнить тест в нормальном режиме.
Если вы используете две наши платы разработки на одном компьютере и отлаживаете CAN-связь на обеих платах через их JTAG-порты с помощью двух отдельных экземпляров Vitis, вам сначала необходимо настроить JTAG-порты.
По умолчанию порт JTAG-эмулятора — 3121. Если два эмулятора должны быть подключены к соответствующим платам разработки, вам нужно назначить разные порты для каждого эмулятора.
x# The default emulator port is 127.0.0.1:3121, so you need to assign different ports to different emulators.# 1. Query the emulator's JTAG port.# Execute the following commands in the Xilinx Software Command Line Tool.connectjtag ta
# This will list all JTAG devices, yielding two JTAG ports: 0ABC01 and 0ABC00.#1 my vendor co my board 0ABC01# 2 arm_dap (idcode 4ba00477 irlen 4)# 3 xc7z020 (idcode 23727093 irlen 6 fpga)#4 vtino vtino board 0ABC00# 5 arm_dap (idcode 4ba00477 irlen 4)# 6 xc7z020 (idcode 23727093 irlen 6 fpga)# Bind 0ABC01 to port 3121 and 0ABC00 to port 3122 by executing the following commands.hw_server -s tcp::3121 -e "set jtag-port-filter 0ABC01" # This line is optional because the default port is 3121.# Open another command window and execute the following command:hw_server -s tcp::3122 -e "set jtag-port-filter 0ABC00"# After executing the above commands, do not close the two command windows.
# If you need to rebind the ports later, you may need to release the corresponding ports first.netstat -ano | findstr :3121 # Query the PID occupying the port.# The query result is as follows:# TCP 0.0.0.0:3121 0.0.0.0:0 LISTENING 10564
tasklist | findstr 10564 # Find the task.# The result is as follows; then, kill the corresponding task in the Task Manager.# hw_server.exe 16864 Console 6 23,652 KЗатем в Vitis настройте соответствующие проекты на использование соответствующих портов.
При отладке выберите соответствующую портовую службу.