목록전체 글 (95)
total_activ
삭막한 취준 생활을 한 25년도를 마무리하며 스스로 올 한해를 털어버리기 위해 겨울 캠핑을 갔다.내 취미는 겨울 캠핑과 스노우보드 두가지가 있는데 둘의 공통점은 한해를 마무리하며 새로운 해에 대한 준비를 위해 과거를 털어버리기 위한 행위이다. 사실 스스로가 생각하기에 매번 끊임없이 무언가를 하는 타입인 만큼 번아웃에 대한 두려움도 큰 편이다. 그래서 어느 순간 취미를 만들며 이 번아웃을 해결할 방법을 모색했고 그 결과 가지게 된게 겨울 캠핑이다. 더욱이 25년도는 많이 울었던 만큼 사회의 한 구성원으로, 조직에 소속되는게 어렵다는 것을 몸소 느껴봤기 때문에 캠핑을 꼭 가고 싶었다. 캠핑장 선택 과정!친구랑 단둘이 가지만, 둘다 뚜벅이인 만큼 서울 근교로 캠핑을 갔다.뚜벅이도... 접근 가능한.. 낭만 넘..
사전에 이미 reserved_memory를 /dev/mem에 매핑함. 크기는 4MiB임.One-shot 모드BD를 사용하지 않고 시작주소와 길이만 DMA에게 전달하면, 그만큼만 딱 한 번 전송하고 끝.다음 전송은 소프트웨어가 직접 다시 SA/LENGTH 설정해서 “다음 것도 해줘”라고 또 부탁해야 함.1) I2SCOUNT_REGTRANSFER_CONTROL =1 (RX enable)2) DMADMACR_RESETDMACR_RS = 1DA, LENGTH 제공3) I2S STREAM_CONTROL_REG=1 (RX Run)4) DMA DMACR_IDLE 확인완료된거 확인 시, fwrite(ub, 1,bytes,f); 을 통해 DDR 버퍼로 부터 음성 데이터 읽기 SG 모드 DDR 어딘가에 BD 리스트를 만..
Zybo Z7-10 오디오 실시간 스트리밍 구조 정리Baremetal DMA Demo → PetaLinux 기반 MIC/SPK UDP 스트리밍Zybo 보드에는 오디오 코덱(SSM2603)과 I2S, AXI DMA가 기본으로 들어 있어서, 마이크 입력을 받아 스피커로 재생하는 데모가 Digilent에서 이미 제공된다.이번 글에서는Digilent에서 제공하는 baremetal DMA 오디오 데모를 간단히 정리하고,그 구조를 기반으로 내가 작성한 PetaLinux 기반 실시간 스트리밍(MIC/SPK) 코드가어떤 식으로 확장·변형됐는지 설명한다.1. 전체 시스템 개요구성은 다음과 같이 보드 두 개가 협업하는 구조다.MIC 보드마이크 입력(코덱 ADC) → I2S RX → AXI DMA S2MM → DDR 버퍼일..
최종 통합한 Vivado IP블록들 부터 보여주겠다. 사실 Audio이외에 통합은 된 상태에서 뒤늦게 Audio FPGA가 성공되어 통합을 마지막으로 했다.하지만 가장 큰 난관이었다.제공해야하는 클럭이 달라서 기존의 processing_system7_0/FCLK_CLK0 -> 100Mhz인 것의 충돌이 있다. Vivado 오디오 코덱 + LM75B + CAN + Serial + TCP 통합기록주파수 문제 때문에 삽질한 과정과 최종 해결 방법 정리이번 프로젝트에서는 기존에 잘 동작하던 오디오 코덱 Vivado 프로젝트에 새로운 IP들(LM75B 온도 센서, CAN, RS485Serial, TCP 기능)을 통합하려고 했다.언뜻 보기에는 간단해 보였지만, 의외의 부분에서 발목을 잡았고 그 과정을 기록해두고자..
1. 어떤 I2C를 쓸 건지 다시 구분PS I²C (MIO) → 우리가 하는 과정Zynq PS 내부 하드 I²C 컨트롤러Vivado에서 MIO Configuration → I2C0 (or I2C1) 체크만 하면 끝Device Tree에 자동으로 cdns,i2c 노드가 생기고, 부팅 후 /dev/i2c-0 혹은 /dev/i2c-1로 나타남PS I2C(EMIO)https://totalactiv.tistory.com/151 이 링크에서 EMIO로도 해봄PL AXI IIC (AXI IP)PL에 AXI IIC IP를 넣고 PS와 AXI 버스로 연결Device Tree에 xlnx,axi-iic 노드가 생김/dev/i2c-*로도 올라오지만, 여기서는 Fabric Interrupts 설정 필요 1) Vivado 프로젝..
Digilient사에서 제공하는 예제 데모 파일를 그대로 사용했기 때문에 Vivado 설명은 생략하겠다. https://digilent.com/reference/programmable-logic/zybo-z7/demos/dma-audioDigillent사에 올라온 오디오 코덱 예시 비바도 디자인을 사용해서 페타리눅스에서 오디오코덱 드라이버 사용해보려고 하는데 자꾸 실패 → sound card를 못 읽어온다실패 원인오디오 코덱에 관련된 비바도 ip → xilinx 표준 ip가 아니라 Digilent사에서 만든 커스텀 ipXilinx 메인라인 ASoC 드라이버 대상인 xlnx,i2s-transmitter/receiver(+ audio-formatter) 라인업과는 바인딩/드라이버가 다르다.페타리눅스에서 제공..
LM75B Vivado아래 링크를 참고해주세요. https://totalactiv.tistory.com/151CAN Vivado LM75B와 CAN 통합 과정(1) UIO를 쓰게된 이유IP 블록 자체가 Custom된 외부 자료로 가져온것 이기 때문에 사용자 직접 제어가 필요하다고 생각했음 항목 표준 커널 드라이버 (예: SocketCAN) UIO 드라이버 (우리가 사용한 방식) 편의성매우 높음매우 낮음 (베어메탈 수준)코드 복잡도매우 낮음 (간단한 명령어 또는 소켓 프로그래밍)매우 높음 (레지스터 직접 제어)제어 수준낮음 (드라이버가 정해준 기능만 사용)매우 높음 (하드웨어의 모든 기능 직접 제어)성능좋음 (커널 오버헤드 약간 존재)최고 (커널을 거치지 않아 지연 시간이 거의 없음)주 사용처표준적인..
Vivado1) 전체적인 블록 다이어그램 2) Zybo 설정3) wrapper4) .XDC (pmod로 직접 i2c 핀을 할당함)set_property -dict { PACKAGE_PIN V15 IOSTANDARD LVCMOS33 } [get_ports { i2c_scl_io }]; # PMOD JC1set_property -dict { PACKAGE_PIN W15 IOSTANDARD LVCMOS33 } [get_ports { i2c_sda_io }]; # PMOD JC2set_property PULLUP true [get_ports { i2c_scl_io }]set_property PULLUP true [get_ports { i2c_sda_io }]V15 : 핀 1W15 : 핀2주의 할점: wrapp..
Vivado → Vitis → Device Tree등 커널 config → PetaLinux vivado에서 gpio와 spi fpga 인터페이스를 설계하고 ip를 할당해놓은 상태이다. (1) Vitis prj 열기admin$ pwd/xilinx/2022/Vitis/workspaceadmin$ vitis & (2) spidev_lcd_test.c 수정admin$ cat /usr/include/linux/spi/spidev.h |grep SPI_CS_HIGH#define SPI_CS_HIGH 0x04보통 SPI_CS_HIGH는 activ-low이기에 activ-high여야지 작동을 한다.( 즉 디폴트가 low상태임) (3) Build Project(4) elf 파일 이동admin$ cd /xilinx/2..