저는 Altera DE1-SoC 개발 보드를 8개월간 작업해왔습니다. 제가 개발 중인 시스템에는 Cyclone V FPGA 칩, 특히 5CSEMA5F31C6N이 포함되어 있습니다. 칩에서 임베디드 Linux 운영 체제를 실행합니다.
모든 것이 잘 진행되고 있으며 개발이 진행 중입니다. 2주 전에 회사의 하드웨어 엔지니어들이 새로운 맞춤형 보드를 조립했습니다. 디자인과 구성 요소는 기본적으로 개발 보드와 유사합니다. 모든 HPS 관련 핀은 동일한 방식으로 연결되어 있지만 주요 차이점은 기본 콘솔 포트가 UART1이라는 것입니다. 이제 문제가 해결되었으며 이제 UART1을 통해 U-boot 및 커널 메시지를 받을 수 있습니다.
그러나 시스템이 완전히 부팅되지 않습니다. 나는 여러 가지 이유로 이것을 지적했습니다. 먼저 GPIO LED를 내보내고 sysfs 파일을 생성하는 init.d 스크립트가 있습니다. GPIO 핀 내보내기는 작동하지만 방향을 바꾸거나, 값을 변경하거나, 핀에서 데이터를 읽으면 시스템이 정지됩니다. init.d 스크립트에서 기능을 비활성화하고 장치를 재부팅했습니다. 이번에는 다른 init.d 스크립트 줄에서 시작이 실패했습니다. 이 줄은 경량 브리지의 레지스터 값을 변경합니다. 명령은 이며 devmem 0xFF200XXX 32 1
, XXX는 특정 레지스터입니다.
모든 브리지에서 devmem을 사용해 보았지만 모든 시도에서 Linux가 정지되었습니다. HPS의 UART 레지스터, HPS의 SDCard 레지스터에서 devmem을 사용해 보았습니다(참조여기), 동결되지 않습니다.
각 브리지의 상태 sysfs 파일을 읽어 브리지가 활성화되었는지 확인할 수 있습니다. fpga_bridge 상태 반환 활성화됨
또한 다음 dmesg 출력을 사용하여 브리지가 드라이버에 연결되어 있는지 확인할 수도 있습니다. dmesg 출력
Quartus Platform Designer를 사용하여 hps 구성에서 세 개의 브리지를 모두 활성화했습니다. u-boot.scr에는 다음 줄도 있습니다:
fatload mmc 0:1 $fpgadata soc_system.rbf;
fpga load 0 $fpgadata $filesize;
setenv fdtimage soc_system.dtb;
run bridge_enable_handoff;
run mmcload;
run mmcboot;
또한 다음 U-boot 명령줄을 통해 브리징 활성화를 시도했습니다.이 지침.
그러나 $l3regs에는 아무 것도 쓸 수 없습니다. l3regs에 쓰기
Buildroot 2016.05 및 4.4 Linux 커널을 사용하여 운영 체제를 구축하고 있습니다. .rbf, .dts, .dtb, preloader-mkpimage.bin 및 u-boot 파일을 생성하기 위해 SoC EDS 18.1 [빌드 625]를 사용하고 있습니다.
시도할 것이 부족했습니다.
sysfs 파일을 사용하여 Linux OS에서 LED를 켜고 끌 수 있다면 문제가 해결된 것 같습니다.
하드웨어가 올바르다고 가정할 때 가능한 다른 원인은 무엇이며 어떻게 해결할 수 있습니까?
답변1
답장을 보내 주셔서 감사합니다. 이 문제는 해결되었습니다.
보드에서는 50Mhz 발진기를 사용하여 HPS 주변 장치를 클록하는 동시에 동일한 50Mhz 클록에서 25MHz 신호를 생성하고 이를 패브릭의 HPS 클록 핀에 연결합니다.
새 보드에서는 50Mhz 발진기를 사용하는 대신 25Mhz 발진기를 선택했습니다. 이번에는 단일 레일이 오실레이터에서 패브릭의 HPS 클럭 핀으로 직접 연결됩니다.
HPS 주변 장치에 사용할 수 있는 다른 시계는 없습니다.
따라서 전용 HPS 클록을 내부적으로 HPS 주변 장치의 입력 핀으로 라우팅합니다. 이는 전용 HPS 클록 핀이 GPIO가 아니기 때문에 Cyclone V 아키텍처 위에서 수행할 수 없기 때문에 버그입니다.