회원 및 비회원 모두 열람이 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.
오랜만에 땜질을 직접 해보고 싶어 작은 DIY 프로젝트를 하나 시작했습니다.
오픈소스 PCB 설계 툴인 KiCad 최신 버전을 설치해 보았습니다. 4년전에 비해서 기능이나 안정성 개선이 천지개벽 수준입니다.
4년 전에는 양면 설계도 힘들었어서 바로 지웠습니다만, 지금은 우분투 위에서 3D 모델링까지 쌩쌩 잘 돌아가고 비교적 간단한 BGA 칩용 4~6층 PCB 설계도 잘 되는것 같습니다.
매우 저렴한 인텔 셀러론급 쿼드코어 컴퓨터에 램 8GB와 내장그래픽만으로 PCB 아트웍을 직접 해봤는데 아주 쓸만합니다.
물론 상용툴에 비하면 부족한 점이 많지만, 공짜툴이 이렇게까지 잘 돌아간다는 것은 충격이었습니다.
너무 기분이 좋아 KiCad 재단에 $30을 Donation 했습니다.
2주 정도 삽질하면서 회로도와 PCB 설계까지 마치고 방금 거버 파일 만들어 중국의 저렴한 샘플 업체에 발주하였습니다.
온라인으로 거버 리뷰받고 바로 신용카드로 결재해 보았는데 앞으로 2주 뒤면 PCB 샘플을 손에 쥘 수 있겠습니다.
배송료 포함 $70 정도네요. ENIG-RoHS 고급 도금에 임피던스 패턴까지 포함인데 너무 저렴해 보입니다.
예전에(15년전?) 이솝 2440 개발할때는 PCB 샘플비용만 100만원에 육박했습니다만.. ㅎㅎㅎ
그리고 BGA 땜질이 가능한 중국산 인두를 하나 이베이에서 질렀는데, DHL 배송비 포함 $250 정도네요.
비슷한 기능의 Hakko 제품은 예전에 200만원 정도 했었죠.
아래 링크의 제품인데 받아서 BGA 땜질해 보고 결과 공유해 보겠습니다.
개인이 취미로 소규모 자작 프로젝트를 하기에는 정말 좋은 세상이 된듯 합니다.
리눅스 위에서 돌리는 무료 PCB CAD로 직접 아트웍한 리눅스 보드가 최신 커널 5.4 LTS로 부팅이 잘 된다면 기분이 아주 좋을듯 합니다.
사족: KiCad는 윈도우, 맥, 리눅스에 모두 잘 동작하며 Graphic library는 WxWidget에 OpenGL 3D 가속을 사용하고 있네요.
시간날때 직접 빌드해 보고 싶습니다.
그렇게 대단한 땜질(?)은 아닙니다. AP에 DDR3 128MiB가 내장(SIP)되어 150개 정도의 부품만 땜질하면 되는 비교적 간단한 보드입니다. 그래도 BGA라서 다소 부담감은 있습니다만..
그런데 노안이 와서 부품들이 잘 안보이네요. ㅠㅠ
안경점에서 돋보기를 거금 4만원 들여 장만하였고 이제는 좀 볼만해 졌습니다.
PCB 땜질하고 u-boot과 Kernel 포팅과 보드 브링업하는 과정을 올려보겠습니다.
KiCAD 회로도와 PCB 설계 파일까지 전부 공개하는 프로젝트로 키워 볼까합니다.
부디 보드가 잘 살아나길 기대해 봅니다. ㅎㅎㅎ
본업이 있는지라 시간을 쪼개서 땜질을 하니 진도가 상당히 늦어졌습니다.
우선 인두 성능은 만족스럽습니다.
예열기로 PCB를 180도 정도로 가열한 상태에서 280도로 설정한 열풍기로 BGA CPU는 잘 붙었습니다.
그러나 PCB 2장을 조립했는데 1개만 동작하네요. ㅠㅠ
아무래도 땜질은 꾸준히 해야 실력이 늘것 같습니다. 장비탓을 하기에는 실력이 너무 부족합니다. ㅋ
커널 부팅은 잘 합니다만 Footprint 오류로 커넥터 뒤집어 것이 2개, LCD용 FPC 케이블용 통과 구멍 위치 오류 등등 여기저기 점퍼가 많아 사진을 올리기 부끄럽네요.
오류 정리하고 수정하여 2차 리비전 PCB 발주해야 겠습니다.
하여간 오랜만에 하드웨어 개발을 직접해보니 재미있습니다.
1Ghz 싱글코어에 DRAM은 128MB밖에 안되는 허접 CPU 입니다만, 방금 나온 최신 커널 5.4.1이 잘 부팅되었습니다.
CPU 가격은 $5 미만으로 알고 있는데, 칩 안에 DRAM, Ethernet PHY, Audio Codec까지 포함된 가격이라 아주 착하다고 느껴집니다. 전원이랑 커넥터 몇개만 연결하면 쓸만한 리눅스 컴퓨터가 만들어 집니다.
다행히 LCD, USB, 이더넷, 터치스크린, 오디오 출력 등등 기본적인 장치들은 잘 동작하는 것 같습니다.
아직 하드웨어 설계 능력이 남아 있기는 한것 같네요. 여기저기 녹슬기는 했습니다만.. ㅋㅋ
Sunxi community에서 커널 mainlining을 잘 해서 그런지 devicetree만 좀 수정했는데도 부팅을 하는군요.
LCD 프레임버퍼도 DRM 드라이버 스펙에 맞춰서 올라갔습니다.
AP에 GPU가 들어있다면 정말 쓸만할텐데 좀 아쉽네요.
SD 카드 부팅 속도는 10초 정도로 만족스럽습니다.
몇일 동안 안정성 테스트를 해보고 다음 버전 PCB 발주를 할 예정입니다.
하드웨어 설계와 제작부터 메인라인 커널 포팅과 Yocto 및 Qt 어플 개발까지 쭈~~욱 훑을 수 있는 임베디드 리눅스 입문자를 위한 교육용 플랫폼으로 적당해 보입니다.
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.4.1 (odroid@p2) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05)) #3 SMP Mon Dec 2 16:58:40 KST 2019
[ 0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
[ 0.000000] CPU: div instructions available: patching division code
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: Hardkernel FoxNux One
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] cma: Reserved 16 MiB at 0x47000000
[ 0.000000] On node 0 totalpages: 32768
[ 0.000000] Normal zone: 256 pages used for memmap
[ 0.000000] Normal zone: 0 pages reserved
[ 0.000000] Normal zone: 32768 pages, LIFO batch:7
[ 0.000000] percpu: Embedded 15 pages/cpu s30540 r8192 d22708 u61440
[ 0.000000] pcpu-alloc: s30540 r8192 d22708 u61440 alloc=15*4096
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 32512
[ 0.000000] Kernel command line: console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait panic=10 earlyprintk rw
[ 0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] Memory: 102536K/131072K available (7168K kernel code, 367K rwdata, 1852K rodata, 1024K init, 243K bss, 12152K reserved, 16384K cma-reserved, 0K highmem)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] random: get_random_bytes called from start_kernel+0x2c0/0x454 with crng_init=0
[ 0.000000] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
[ 0.000000] Console: colour dummy device 80x30
[ 0.000000] sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 21474836475000000ns
[ 0.050000] Calibrating delay loop... 2013.59 BogoMIPS (lpj=10067968)
[ 0.060000] pid_max: default: 32768 minimum: 301
[ 0.060000] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.060000] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.060000] CPU: Testing write buffer coherency: ok
[ 0.060000] /cpus/cpu@0 missing clock-frequency property
[ 0.060000] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
[ 0.060000] Setting up static identity map for 0x40100000 - 0x40100060
[ 0.060000] rcu: Hierarchical SRCU implementation.
[ 0.060000] smp: Bringing up secondary CPUs ...
[ 0.060000] smp: Brought up 1 node, 1 CPU
[ 0.060000] SMP: Total of 1 processors activated (2013.59 BogoMIPS).
[ 0.060000] CPU: All CPU(s) started in SVC mode.
[ 0.060000] devtmpfs: initialized
[ 0.060000] VFP support v0.3: implementor 41 architecture 2 part 30 variant 7 rev 5
[ 0.060000] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.060000] futex hash table entries: 256 (order: 2, 16384 bytes, linear)
[ 0.060000] pinctrl core: initialized pinctrl subsystem
[ 0.060000] NET: Registered protocol family 16
[ 0.060000] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.070000] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.
[ 0.070000] hw-breakpoint: maximum watchpoint size is 8 bytes.
[ 0.080000] SCSI subsystem initialized
[ 0.080000] usbcore: registered new interface driver usbfs
[ 0.080000] usbcore: registered new interface driver hub
[ 0.080000] usbcore: registered new device driver usb
[ 0.080000] videodev: Linux video capture interface: v2.00
[ 0.080000] pps_core: LinuxPPS API ver. 1 registered
[ 0.080000] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
[ 0.080000] PTP clock support registered
[ 0.080000] Advanced Linux Sound Architecture Driver Initialized.
[ 0.090000] clocksource: Switched to clocksource timer
[ 0.090000] thermal_sys: Registered thermal governor 'step_wise'
[ 0.090000] NET: Registered protocol family 2
[ 0.090000] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear)
[ 0.090000] TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
[ 0.090000] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
[ 0.090000] TCP: Hash tables configured (established 1024 bind 1024)
[ 0.090000] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 0.090000] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[ 0.100000] NET: Registered protocol family 1
[ 0.100000] RPC: Registered named UNIX socket transport module.
[ 0.100000] RPC: Registered udp transport module.
[ 0.100000] RPC: Registered tcp transport module.
[ 0.100000] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.100000] Initialise system trusted keyrings
[ 0.100000] workingset: timestamp_bits=30 max_order=15 bucket_order=0
[ 0.100000] NFS: Registering the id_resolver key type
[ 0.100000] Key type id_resolver registered
[ 0.100000] Key type id_legacy registered
[ 0.100000] Key type asymmetric registered
[ 0.100000] Asymmetric key parser 'x509' registered
[ 0.100000] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 248)
[ 0.100000] io scheduler mq-deadline registered
[ 0.100000] io scheduler kyber registered
[ 0.100000] sun4i-usb-phy 1c19400.phy: Couldn't request ID GPIO
[ 0.100000] sun8i-v3s-pinctrl 1c20800.pinctrl: initialized sunXi PIO driver
[ 0.100000] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pb not found, using dummy regulator
[ 0.160000] Serial: 8250/16550 driver, 8 ports, IRQ sharing disabled
[ 0.160000] printk: console [ttyS0] disabled
[ 0.180000] 1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 38, base_baud = 1500000) is a U6_16550A
[ 0.720000] printk: console [ttyS0] enabled
[ 0.730000] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pd not found, using dummy regulator
[ 0.760000] panel-simple panel: panel supply power not found, using dummy regulator
[ 0.770000] libphy: Fixed MDIO Bus: probed
[ 0.770000] dwmac-sun8i 1c30000.ethernet: IRQ eth_wake_irq not found
[ 0.780000] dwmac-sun8i 1c30000.ethernet: IRQ eth_lpi not found
[ 0.790000] dwmac-sun8i 1c30000.ethernet: PTP uses main clock
[ 0.790000] dwmac-sun8i 1c30000.ethernet: No regulator found
[ 0.800000] dwmac-sun8i 1c30000.ethernet: No HW DMA feature register supported
[ 0.810000] dwmac-sun8i 1c30000.ethernet: RX Checksum Offload Engine supported
[ 0.810000] dwmac-sun8i 1c30000.ethernet: COE Type 2
[ 0.820000] dwmac-sun8i 1c30000.ethernet: TX Checksum insertion supported
[ 0.830000] dwmac-sun8i 1c30000.ethernet: Normal descriptors
[ 0.830000] dwmac-sun8i 1c30000.ethernet: Chain mode enabled
[ 0.840000] libphy: stmmac: probed
[ 0.840000] dwmac-sun8i 1c30000.ethernet: Found internal PHY node
[ 0.850000] libphy: mdio_mux: probed
[ 0.850000] dwmac-sun8i 1c30000.ethernet: Switch mux to internal PHY
[ 0.860000] dwmac-sun8i 1c30000.ethernet: Powering internal PHY
[ 0.860000] libphy: mdio_mux: probed
[ 0.870000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.870000] ehci-platform: EHCI generic platform driver
[ 0.880000] ehci-platform 1c1a000.usb: EHCI Host Controller
[ 0.890000] ehci-platform 1c1a000.usb: new USB bus registered, assigned bus number 1
[ 0.890000] ehci-platform 1c1a000.usb: irq 27, io mem 0x01c1a000
[ 0.930000] ehci-platform 1c1a000.usb: USB 2.0 started, EHCI 1.00
[ 0.930000] hub 1-0:1.0: USB hub found
[ 0.940000] hub 1-0:1.0: 1 port detected
[ 0.940000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.950000] ohci-platform: OHCI generic platform driver
[ 0.950000] ohci-platform 1c1a400.usb: Generic Platform OHCI controller
[ 0.960000] ohci-platform 1c1a400.usb: new USB bus registered, assigned bus number 2
[ 0.970000] ohci-platform 1c1a400.usb: irq 28, io mem 0x01c1a400
[ 1.040000] hub 2-0:1.0: USB hub found
[ 1.040000] hub 2-0:1.0: 1 port detected
[ 1.050000] usbcore: registered new interface driver cdc_wdm
[ 1.060000] usbcore: registered new interface driver usb-storage
[ 1.060000] usbcore: registered new interface driver usbserial_generic
[ 1.070000] usbserial: USB Serial support registered for generic
[ 1.080000] usbcore: registered new interface driver ch341
[ 1.080000] usbserial: USB Serial support registered for ch341-uart
[ 1.090000] usbcore: registered new interface driver cp210x
[ 1.090000] usbserial: USB Serial support registered for cp210x
[ 1.100000] mousedev: PS/2 mouse device common for all mice
[ 1.110000] input: 1c22800.lradc as /devices/platform/soc/1c22800.lradc/input/input0
[ 1.120000] sun6i-rtc 1c20400.rtc: registered as rtc0
[ 1.120000] sun6i-rtc 1c20400.rtc: RTC enabled
[ 1.120000] i2c /dev entries driver
[ 1.130000] Goodix-TS 0-0014: 0-0014 supply AVDD28 not found, using dummy regulator
[ 1.140000] Goodix-TS 0-0014: 0-0014 supply VDDIO not found, using dummy regulator
[ 1.260000] Goodix-TS 0-0014: ID 911, version: 1060
[ 1.260000] usbcore: registered new interface driver uvcvideo
[ 1.270000] USB Video Class driver (1.1.1)
[ 1.270000] Goodix-TS 0-0014: Direct firmware load for goodix_911_cfg.bin failed with error -2
[ 1.280000] sunxi-wdt 1c20ca0.watchdog: Watchdog enabled (timeout=16 sec, nowayout=0)
[ 1.290000] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pf not found, using dummy regulator
[ 1.310000] random: fast init done
[ 1.320000] input: Goodix Capacitive TouchScreen as /devices/platform/soc/1c2ac00.i2c/i2c-0/0-0014/input/input1
[ 1.330000] sunxi-mmc 1c0f000.mmc: initialized, max. request size: 16384 KB
[ 1.340000] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pg not found, using dummy regulator
[ 1.370000] sunxi-mmc 1c10000.mmc: initialized, max. request size: 16384 KB
[ 1.380000] usbcore: registered new interface driver usbhid
[ 1.390000] usbhid: USB HID core driver
[ 1.390000] sun4i-codec 1c22c00.codec: Failed to register our card
[ 1.400000] NET: Registered protocol family 17
[ 1.400000] Key type dns_resolver registered
[ 1.410000] Registering SWP/SWPB emulation handler
[ 1.410000] Loading compiled-in X.509 certificates
[ 1.420000] sun4i-usb-phy 1c19400.phy: Couldn't request ID GPIO
[ 1.430000] sun4i-usb-phy: probe of 1c19400.phy failed with error -16
[ 1.440000] sun8i-v3s-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pd not found, using dummy regulator
[ 1.450000] sun4i-drm display-engine: bound 1100000.mixer (ops 0xc0849da0)
[ 1.460000] sun4i-drm display-engine: bound 1c0c000.lcd-controller (ops 0xc084708c)
[ 1.470000] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 1.480000] [drm] Initialized sun4i-drm 1.0.0 20150629 for display-engine on minor 0
[ 1.490000] mmc0: host does not support reading read-only switch, assuming write-enable
[ 1.500000] mmc0: new high speed SDHC card at address aaaa
[ 1.500000] mmcblk0: mmc0:aaaa SL16G 14.8 GiB
[ 1.500000] mmcblk0: p1 p2
[ 1.770000] Console: switching to colour frame buffer device 128x37
[ 1.820000] sun4i-drm display-engine: fb0: sun4i-drmdrmfb frame buffer device
[ 1.820000] debugfs: Directory '1c22c00.codec' with parent 'V3s Audio Codec' already present!
[ 1.830000] sun4i-codec 1c22c00.codec: Codec <-> 1c22c00.codec mapping ok
[ 1.840000] sun6i-rtc 1c20400.rtc: setting system clock to 1970-01-01T00:00:10 UTC (10)
[ 1.850000] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 1.860000] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 1.870000] ALSA device list:
[ 1.870000] #0: V3s Audio Codec
[ 1.880000] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[ 1.880000] cfg80211: failed to load regulatory.db
[ 1.980000] EXT4-fs (mmcblk0p2): recovery complete
[ 1.990000] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[ 2.000000] VFS: Mounted root (ext4 filesystem) on device 179:2.
[ 2.010000] devtmpfs: mounted
[ 2.010000] Freeing unused kernel memory: 1024K
[ 2.020000] Run /sbin/init as init process
[ 2.200000] random: systemd: uninitialized urandom read (16 bytes read)
[ 2.210000] systemd[1]: systemd 215 running in system mode. (+PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -APPARMOR)
[ 2.220000] systemd[1]: Detected architecture 'arm'.
[ 2.260000] systemd[1]: Failed to insert module 'autofs4'
[ 2.270000] systemd[1]: Failed to insert module 'ipv6'
[ 2.280000] systemd[1]: Set hostname to <LicheePi>.
[ 2.340000] random: systemd-sysv-ge: uninitialized urandom read (16 bytes read)
[ 2.490000] random: systemd: uninitialized urandom read (16 bytes read)
[ 2.680000] systemd[1]: Expecting device dev-ttyS0.device...
[ 2.720000] systemd[1]: Starting Forward Password Requests to Wall Directory Watch.
[ 2.720000] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[ 3.410000] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 3.840000] systemd-udevd[101]: starting version 215
[ 5.320000] systemd-journald[94]: Received request to flush runtime journal from PID 1
[ 6.920000] dwmac-sun8i 1c30000.ethernet eth0: PHY [0.1:01] driver [Generic PHY]
[ 6.940000] dwmac-sun8i 1c30000.ethernet eth0: No Safety Features support found
[ 6.940000] dwmac-sun8i 1c30000.ethernet eth0: No MAC Management Counters available
[ 6.950000] dwmac-sun8i 1c30000.ethernet eth0: PTP not supported by HW
[ 6.960000] dwmac-sun8i 1c30000.ethernet eth0: configuring for phy/mii link mode
[ 7.000000] dwmac-sun8i 1c30000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
Debian GNU/Linux 9 FoxNux ttyS0
FoxNux login: root
Password:
root@FoxNux:~# uname -a
Linux FoxNux 5.4.1 #3 SMP Mon Dec 2 16:58:40 KST 2019 armv7l GNU/Linux
root@FoxNux:~# free
total used free shared buffers cached
Mem: 119944 45224 74720 5328 2416 19724
-/+ buffers/cache: 23084 96860
Swap: 0 0 0
root@FoxNux:~#
혹시 관심있는 분들이 있을까하여 데이터시트 첨부하려는데 아래와 같은 에러가 발생합니다.
"Error Code: HTTP Error, File name: Allwinner_i3_Datasheet_V1.0.pdf, Message: 413"
외부 링크로 대신합니다.
https://dn.odroid.com/obsolete/Allwinner_i3_Datasheet_V1.0.pdf
2020년 경자년(庚子年) 모두들 새해 복 많이 받으세요.
AP 보드를 직접 땜하신다니 대단하십니다 ^^
나중에 후기 부탁드립니다~