-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Can't read ID EEPROM on Pi Zero W #2130
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
We don't recommend using I2C0 (i2c_vc) because it isn't guaranteed to be safe on all platforms. The eepflash shell script we provide for HAT developers uses a software I2C implementation instead:
This creates /dev/i2c-3 on GPIOs 0 and 1. Having said that, in the Pi Zero W case there's actually no reason why it shouldn't be OK - it's just that the in-built dt-blob that the firmware uses to configure the pins is leaving the I2C0 alt-function enabled on GPIOs 28 & 29 at the same time as you are trying to use it on GPIOs 0 & 1 (mapping an I2C interface to multiple pin groups breaks it). All camera-capable platforms used to statically enable I2C0 on 28&29, but then the firmware was changed to enable it as needed, allowing the same I2C interface to be multiplexed between several pin groups. At the same time, the static mapping was removed, but because of parallel development in a side branch the Zero W pin settings were missed, leading to the problem you see now. I've tested with a modified dt-blob on a Zero W and /dev/i2c0 works as expected. The fixed dt-blob will appear in a future firmware release, but until then you have a few options:
c) Download a replacement dt-blob.bin from here, copy it into the boot partition (/boot) and reboot. I'll add a comment here when a new firmware is released, at which point you can update and remove your workaround. |
Wow. Thank you for the explanation! Tested the modified blob => Working |
firmware: logging: Avoid wraparound issue with total_mem=1024 firmware: armstubs: Add wfe to ARMv7/ARMv8-32 stubs See: raspberrypi/linux#1989 firmware: arm_loader: Use ethernet0 as fallback for placing DT MAC address See: #846 firmware: dt-blob: Remove Zero W static I2C0 mapping on 28 & 29 See: raspberrypi/linux#2130
firmware: logging: Avoid wraparound issue with total_mem=1024 firmware: armstubs: Add wfe to ARMv7/ARMv8-32 stubs See: raspberrypi/linux#1989 firmware: arm_loader: Use ethernet0 as fallback for placing DT MAC address See: raspberrypi/firmware#846 firmware: dt-blob: Remove Zero W static I2C0 mapping on 28 & 29 See: raspberrypi/linux#2130
- firmware: platform: Move trait initialisation out of #ifdef'd function - firmware: usb: Change USB PHY settings to make device mode work correctly - firmware: dtoverlay: Update fixups when a node is renamed - firmware: dtoverlay app: Add the -D (dry-run) option See: raspberrypi/linux#2002 - firmware: dispserver: Adjust open/close refcount on application exit See: #778 - firmware: filex: Optimise directory search of the root directory - firmware: Revert Change USB PHY settings to make device mode work correctly. See: #816 - firmware: Comments: Replace copyright symbol with (c) - firmware: arm_display: Remove unused sdtv variables - firmware: tvservice: Avoid referencing uninitialised state when unsuccessful See: raspberrypi/userland#397 - firmware: dtoverlay: Short-circuit empty parameter handling See: raspberrypi/linux#2028 - firmware: rtos: Protect against null timer callback See: http://forum.kodi.tv/showthread.php?tid=280408 - firmware: arm_dt: Add txp node to device tree parsing to mask off transposer interrupt - firmware: venc: Correct the validation on custom mb/mbps/br settings See: #819 - firmware: venc: Correct the validation on custom mb/mbps/br settings See: #819 - firmware: vc_image: Remove structure definition duplication - firmware: vc_image/mmal/il/isp: Add support for 16bit/component YUV420 and YUVUV - firmware: vcdbg: Don't use dma when file provided - firmware: rtos: Avoid sleeping delay when RTOS is not present - firmware: bootcode: Remove reliance on scanf to reduce bootcode.bin size - firmware: bootcode: Changes to force to full speed - firmware: bootcode: Make sure bootcode drops out - firmware: bootcode: Mass storage changes to power off/on USB block - firmware: bootcode: Change USB 1.1 to have 64 byte endpoints - firmware: bootcode: Set MSD serial number to be the Pi serial number - firmware: imx219: Extend line length for long frame times - firmware: 2ndstage: Improve i2c_gpio support - firmware: i2c_gpio: Improve implementation and usage - firmware: Camplus: Enable RAW12 support in the ISP input formatter - firmware: scalerlib: Don't flip tiled format and swap R/B - firmware: arm_display: Provide mechanism to request tiled format framebuffer See: #820 - firmware: platform: Set BT LPO frequency to 32768Hz See: #831 - firmware: arm_display: Fix mixup with xres/xres_virtual See: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=187058 - firmware: video_render: Relax the alignment requirements for pitches - firmware: vc_image: Use vpitch when determining size of YUV buffers - firmware: Fix regression in uart clock frequency See: #833 - bootcode: usb: Dont overwrite configured parameters - firmware: usb: Force MSD app to use CM3 pin conf - firmware: IL ISP: Fix typo in logging - firmware: IL ISP: Add black level and lens shading controls - firmware: isp: Correct ISP Bayer stride calcs for supported formats - firmware: Remove unused duplicate versions of vc_sm_defs.h - firmware: IL camera: add get_parameter for OMX_IndexConfigCustomAwbGains - firmware: IL resize: Support get_parameter OMX_IndexConfigCommonInputCro - firmware: MMAL/RIL: Add MMAL_PARAMETER_RESIZE_PARAMS / OMX_IndexParamResize mapping - firmware: ISP IL: Add lresize output - firmware: MMAL/RIL: Add mapping for OMX_IndexConfigCommon[In|Out]putCrop - firmware: MMAL/RIL: Correct handling of MMAL_PARAMETER_VIDEO_SOURCE_PATTERN - firmware: IL ISP: Add H & V flip support - firmware: IL ISP: Implement OMX_IndexConfigCommonInputCrop - firmware: imx219: Refactor exposure calculations - firmware: dmalib: Stop spinning on dma_pause if END is signalled See: #824 - firmware: MMAL: Avoid lockup with opaque stripes into opaque frame callback See: raspberrypi/userland#390 - firmware: RIL null_sink: Support MMAL opaque input See: raspberrypi/userland#388 - firmware: arm_display: Avoid hang when display_rotate is used with vc4-kms-v3d driver See: guysoft/FullPageOS#137 - firmware: 2ndstage: Fix printing of zero as a decimal in uart_printf - firmware: cdi_camera: Allow GPIO control on FS and FE events - firmware: IL ISP: Add option to alter the shift in the output stage - firmware: IL ISP: Add option for adjusting the input CCM - firmware: vc_image: fix size calcs for YUV_UV_16 - firmware: vc_image_helper: Add YUV 16 bit formats to second header - firmware: isp: Avoid setting vpitch in YUVUV16 cases - firmware: isp: Handle 16 bit yuv in ip_is_supported_format - firmware: hello_fft: Fixup offset calculation when mapping/unmapping buffers See: raspberrypi/userland#408 - bootcode: Default to using total_mem=1024 - firmware: logging: Avoid wraparound issue with total_mem=1024 - firmware: armstubs: Add wfe to ARMv7/ARMv8-32 stubs See: raspberrypi/linux#1989 - firmware: arm_loader: Use ethernet0 as fallback for placing DT MAC address See: #846 - firmware: dt-blob: Remove Zero W static I2C0 mapping on 28 & 29 See: raspberrypi/linux#2130 - firmware: Revert arm_display: Avoid hang when display_rotate is used with vc4-kms-v3d driver - firmware: arm_display: Avoid hang when display_rotate is used with vc4-kms-v3d driver 2 See: #849 See: #853 - firmware: vc_image headers: Tidy up duplication - firmware: video_splitter: Only copy eColorFormat if not already set See: https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=189830 - firmware: vcsm: Add new clean/invalidate command for 2D blocks - firmware: gpuserver: Switch to using custom queue - firmware: gpuserver: Add priority to queue - firmware: MMAL/IL I420 and YUVUV 10bpp formats, + VCSM DMABUF import - firmware: CEC: Fix crash when remote button release is received without a pressed See: https://forum.kodi.tv/showthread.php?tid=280408 - firmware: arm_loader display: Correct variable scope by renaming See: https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=84889
Uh oh!
There was an error while loading. Please reload this page.
Hi,
the following works on Pi 2 and Pi Zero but not on the Pi Zero W:
root@raspberrypi:/sys/class/i2c-adapter/i2c-0/0-0050# hd eeprom
hd: eeprom: Connection timed out
Using kernel version:
root@raspberrypi:/sys/class/i2c-adapter/i2c-0/0-0050# uname -a
Linux raspberrypi 4.9.39+ #1020 Sat Jul 22 14:08:01 BST 2017 armv6l GNU/Linux
I'm using this kernel version, because I modified the at24 driver a bit.
What did I do:
I saw in the at24 driver, that following code was added, somewhere between 4.4.y and 4.9.y:
/*
* Perform a one-byte test read to verify that the
* chip is functional.
*/
err = at24_read(at24, 0, &test_byte, 1);
if (err) {
err = -ENODEV;
goto err_clients;
}
The driver tries to read one byte from the EEPROM in function at24_probe(). If no chip is present, the probing fails.
In our case we don't have the chip connected on startup (because we use the Pi as test equipment, the chip is connected via pogo test pins). I commented out this code and the eeprom file showed up.
Now. Using this SD card. The "hd" command works on the Pi 2 and Pi Zero but not on the Pi Zero W.
I think the only difference left should be the loaded device tree file ..
Can anyone reproduce this?
The text was updated successfully, but these errors were encountered: