The command is:
blockdev --getsize64 /dev/mmcblk0p1
It gives the result in bytes, as a 64-bit integer. It queries the byte size of a block device, as the kernel see its size.
The reason, why
fdisk -l /dev/mmcblk0p1 didn't work, was that
fdisk does some total different thing: it reads in the partition table (= first sector) of the block device, and prints what it found. It doesn't check anything, only says what is in the partition table.
It doesn't even bother if the partition table is damaged, or the block device doesn't have one: it will print a warning that the checksum is not okay, but it still prints what is finds, even if the values are clearly non-sense.
This is what happened in your case:
/dev/mmcblk0p1 does not have a partition table. As the name of the device shows, it is already the first partition of the physical disk
/dev/mmcblk0. This disk contains a partition table, had you queried it with
fdisk -l /dev/mmcblk0, it had worked (assuming it had an msdos partition table).