Developer > respectively. What we have achieved here is quite handy, we can now manage an I2C device almost exclusively from the Linux userspace and are in a position to write a crafty userspace driver. a pointer to a: The msgs[] themselves contain further pointers into data buffers. implementing these standard calls. This inWhen registering with the same name I2c_driver in 2c_board_info, I2c_client is bound to I2c_driver and I2c_driver's probe function is invoked. Adapter numbers are assigned somewhat dynamically, so you can not The slave address and whether to use ten bit address mode has to be The device driver is a kernel component (usually a module) that interacts with a hardware device. Use this as a 6 guide, not as a rule b In order to control I2C devices, use /dev/iic? i2c-dev. After your I2C bus driver has processed these requests, execution runs ‘read’ transactions return the read value, except for read_block, which Method 2: Enumerate the devices. writev, instead, would gather together the contents of each buffer and put them out as a single write operation. In our last tutorial, we have seen how to write the dummy I2C bus driver in the Linux kernel. User Space Kernel Space I 2 C Device (i2c_client) I 2 C Host Controller (i2c_adapter) I 2 C Bus Hardware Space /sys, /dev User Applications I 2 C User Mode Device Driver I 2 C Core i2c-dev I 2 C Adapter (platform_driver) / Algo Driver (i2c_algorithm) Vertical: Character/SysFS I 2 C Client Driver Horizontal: I 2 C (i2c_driver) so please any one help me to start/write programming.give me some tips or please give some sample programs/guidlines. See: Device model data structures The device model is organized around three main data structures: The struct bus_type structure, which represent one type of bus (USB, PCI, I2C, etc.) ‘-O’ or some variation when you compile your program! [CPP] View Plain copy print? You can now use SMBus commands or plain The above functions are made available by linking against the libi2c library, and a minor device number corresponding to the number assigned as In this case, you need to use I2c_new_device (). Method 2: Enumerate the devices. framework. . Example (from the pnx4008 OHCI driver):  static const unsigned short normal_i2c[] = {0x2c, 0x2d, I2c_client_end};&N Bsp static int __devinit usb_hcd_pnx4008_probe (struct platform_device *pdev)   {            (...)            struct I2c_adapter *i2c_adap;            struct I2c_board_info i2c_info;            (...)            I2c_adap = I2c_get_adapter (2);            memset (&i2c_info, 0, sizeof (struct i2c_board_info));            strlcpy (I2c_info.name, "Isp1301_pnx", i2c_name_size);            isp1301_i2c_client = I2c_new_probed_device (I2c_adap, &i2c_info,                                                         normal_i2c);            I2c_put_adapter (I2C_ADAP);           (...)  } I2c_new_probed_device's prototype is: struct i2c_client *I2c_new_probed_device (struct I2c_adapter *adap,struct I2c_board_info *info,unsigned short const *addr_list); This function will probe the address in addr_list on the specified bus, assign the first address with ACK feedback to info->addr, and then invoke the top two arguments i2c_new_ Device Its return value is also an available i2c_client pointer.I2c_unregister_device () can unregister the i2c_client of the I2c_new_device ()/I2c_new_probed_device () application.Add: Driver How the developer knows a physical I2C bus number. The aim of this series is to provide easy and practical examples that anyone can understand. Dump the content of an I2C device at 7-bit address 0x68 on bus 1 using the default read byte mode with a user confirmation: ... a SMBus block write, or an I2C block write. These open() and ioctl() calls are handled by the i2c-dev kernel I²c Driver Specific i²c device drivers, such as cameras, sensors, touch screen, backlight controller, most of the common hardware devices are or are through the … transactions (mixing read and write messages in the same transaction) 3 4 To set up a driver, you need to do several things. However, there are additional file_operations functions that are required for the character device:. Alternatively, you can run “i2cdetect -l” to obtain a formatted list of all Implementing I2C device drivers in userspace¶ Usually, I2C devices are controlled by a kernel driver. a touchscreen driver. If you have any concerns or complaints relating to the article, please send an email, providing a detailed description of the concern or Some are optional, and 5 some things can be done slightly or completely different. 概述: 1.I2C概念 2.I2C硬件结构图 3.I2C总线初始化 4.I2C控制器device 节点添加及driver注册 5.I2C设备节点添加及driver注册 5.adapter设备及驱动添加要点及绑定过程 6.client设备及驱动添加要点及绑定过程 7.设备是如何使用I2C通讯的一.I2C概念: I2C是philips提出的外设总线. You can do plain I2C transactions by using read(2) and write(2) calls. I2C slave and device driver pair: each I2C bus segment will have a_ The I2C device represented by client. In UNIX, hardware devices are accessed by the user through special device files. HI i am looking to write new i2c driver for SI-4754 FM Receiver. i2c.h:i2c_get_functionality() calls 一:I2C 概述 I2C是philips提出的外設匯流排.使用SCL時鐘線,SDA序列資料線這兩根訊號線就實現了裝置之間的資料互動,被非常廣泛地應用在CPU與EEPROM,實時鐘,小型LCD等裝置通訊中。 二:在linux下的驅動思路 linux系統下編寫I2C驅動,有兩種方法: The corresponding function for closing a file in user space (fclose) is the release: member of the file_operations structure in the call to register_chrdev.In this particular case, it is the function memory_release, which has as arguments an inode structure and a file structure, just like before.. The following are the required fields for struct i2c_driver that need to be filled: driver.name = name of the driver that will be used to match the driver with the device. The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; checking on future transactions.). aren’t supported. which is provided by the i2c-tools project. assume much about them. I2C adapters present on your system at a given time. IMPORTANT: because of the use of inline functions, you have to use To set up a driver, you need to do several things. that can be programmed from user-space. In particular, so-called combined It doesn’t send any data to the Salve device. i2c_adapter.algo->functionality(), while with the following ioctls: I2CSTART (struct iiccmd) Sends the start condition to the slave specified by the slave element to the bus. i2c-core-smbus.c:i2c_smbus_xfer() calls either The ‘write’ transactions return 0 on success; the sysfs I2C … I am attempting to use a TCA8418 keypad (which operates over I2C) and I have the driver loaded into the kernel, but the device was not recognized so I am instantiating it myself and am unable to bind the driver. use I2c_new_device () or I2c_new_probed_device ().Method 1 has many limitations and must be aware of the I2C bus number and physical connection when compiling the kernel. Let’s start. 4. We use linux (CELinux) and an I2C device driver with Linux as well. inspect /sys/class/i2c-dev/ or run “i2cdetect -l” to decide this. complaint, to info-contact@alibabacloud.com. After this point, there is no and calls that would have been performed by kernel I2C chip drivers 21. Linux error--->export ' = ' not a valid identifier for gen... Linux error--->export ' = ' not a valid identifier for general reasons, The difference between Linux Memfree and memavailable, VI is failed with error "E382:cannot write, ' buftype ' option was set" in Linux. © Copyright The kernel development community, The Linux kernel user’s and administrator’s guide, Working with the kernel development community, The Linux driver implementer’s API guide, Linux CPUFreq - CPU frequency and voltage scaling code in the Linux(TM) kernel, Implementing I2C device drivers in userspace, Assorted Miscellaneous Devices Documentation, https://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git/. The returned parameter is a i2c_client pointer. Writing the I2C driver involves specifying the details of the struct i2c_driver. You need to load module i2c-dev for this. I have an i2c chip driver as part of linux kernel. content of the page makes you feel confusing, please write us an email, we will handle the problem The source code for the ebbchar device driver is provided in Listing 2. Do combined read/write transaction without stop in between. A staff member will contact you within 5 working days. dev_open(): Called each time the device is opened from user space. set in each message, overriding the values set with the above ioctl’s. But it is also possible to access all devices on an adapter from userspace, through the /dev interface. In the June and August 2003 issues of Linux Journal, my column covered the Linux kernel driver model, and the I2C subsystem was used as an example.This month, we discuss what the I2C subsystem does and how to write a driver for it. Once verified, infringing content will be removed immediately. user-space programs. You can returns the number of values read. are redirected by the operating system to the device driver associated with the physical device. First, you need to include these two headers: Now, you have to decide which adapter you want to access. i2c-10, …). You can find the names of drivers here. Linux I2C Drivers I2C Device Drivers Device → Driver Client A Driver driver (yes, this sounds ridiculous, sorry) contains the ... s32 i2c_smbus_write_i2c_block_data ... u8 length, const u8 *values); I2C Device Driver SMBus I2C API. They can even change from one boot to the next. Some ioctl() calls are for administrative tasks and are handled by i2c-dev directly. section “C example” above. The function will write or read data to or from that buffers depending i2cdetect is part of $ gcc CROSS-COMPILE=arm-none-linux-gnueabi ARCH=arm i2c_interface.c -o i2c_binary The resulting binary can then be moved to the embedded device and executed. e.g. #lfelc Linux I2C Drivers I2C Slave Interface. If you find any instances of plagiarism from the community, please send an email to: i2c_adapter.algo->master_xfer(). These files are grouped into the /dev directory, and system calls open, read, write, close, lseek, mmap etc. Pastebin is a website where you can store text online for a set period of time. 6 min read. your I2C bus driver. for details) through the following functions: All these transactions return -1 on failure; you can read errno to see Introduction. Examples include I2C_FUNCS, which queries the I2C adapter I2C device files are character device files with major device number 89 # include < linux/i2c.h > # include < linux/init.h > # include < linux/jiffies.h > ... current differences from "eeprom" driver are * that this one handles write access and isn't restricted to 24c02 devices. You should The Device Driver Source Code. how to create auto generated id in sql server, Analysis of UDP packet loss problem in Linux system. when you use the /dev interface to I2C: Your program opens /dev/i2c-N and calls ioctl() on it, as described in address you want to communicate: Well, you are all set up now. [Root@zlg/]# cat/sys/class/i2c-dev/i2c-0/name pnx4008-i2c0 [Root@zlg/]# pnx4008-i2c1 [Root@zlg/]# cat/sys/class/i2c-dev/i2c-2/name USB-I2C. possible to access all devices on an adapter from userspace, through come from user-space for validity. Other ioctl() calls are converted to in-kernel function calls by Sometimes developers are faced with an existing system that cannot modify the kernel. SMBus commands are preferred if Until version 2.3.44 of the kernel, however, Linux always emulated readv and writev with multiple calls to read and write. difference between these calls that came from user-space through i2c-dev The full project for this exercise can be picked up from my GitHub . examine /sys/class/i2c-dev/ to see what number corresponds to which adapter. Also, when dealing with I2C issues, I often find that I need to re-acquaint myself with the source spec: This method is a relatively simple method.The function to get the i2c_adapter pointer is: struct i2c_adapter* i2c_get_adapter (int id);//Its argument is the I2C bus number. within 5 days after receiving your email. This is the Linux Device Driver Tutorial Part 38 – I2C Bus Driver Dummy Linux Device Driver. ioctl I2C_SLAVE before you try to access the device. This means that each sensor will work a bit differently. Each registered I2C adapter gets a number, counting from 0. If your driver does not supply methods to handle the vector operations, they will still be implemented that way. static struct I2c_board_info __initdata h4_i2c_board_info[] = {            {                  i2c_ Board_info ("Isp1301_omap", 0x2d),                   .irq            = OMAP_GPIO_IRQ (125),           },           {      /* EEPROM on mainboard */                    i2c_board_info ("24c01", 0x52),                    .platform_data  = &m24c01 ,          },  &NBSP;&NBSP;&NBsp;      {      /* EEPROM on CPU card */                    i2c_board_info ("24c01", 0x57),                  . All 256 minor device numbers are reserved for I2C. They should be called “i2c-%d” (i2c-0, i2c-1, …, These devices will be bound to a struct I2C_ Driver, following the standard Linux driver model. I2C Drivers in Linux A driver for I2C bus adapter and algorithm drivers manages I2C bus transactions Drivers for I2C devices A client has the device’s I2C bus address and a pointer to a driver which is attached with an adapter When a user program issues a file operation that needs an I2C transaction The prerequisite is that the kernel compiles to determine which I2C devices and their addresses, as well as the number of connected buses. For this reason, this interface is almost never used by device you want to access) and I2C_PEC (enable or disable SMBus error adapter.algo->smbus_xfer() if it is implemented, or if not, I can verify the i2c chip driver is in the kernel from kernel boot messages (my chip driver is mma8450) ... AND the i2c device itself. You can do SMBus level transactions (see documentation file smbus-protocol reliability of the article or any translations thereof. what happened. An I2C chip driver controls the process of talking to an individual I2C device that lives on an I2C bus. Both are illustrated below: Note that only a subset of the I2C and SMBus protocols can be achieved by Using this I2C bus driver, we can send data to the slave device. Happy Coding. Main bus driver responsibilities: If the We are using the Raspberry PI 4 Model B for this demonstration. anything special to support access from user-space. Linux, ============================================Author: yuanluluHttp://blog.csdn.net/yuanluluCopyright No, but reprint please retain this paragraph statement============================================, According to their own understanding, the http://lxr.linux.no/linux+v2.6.34/Documentation/i2c/instantiating-devices is translated into the document about enumerating and establishing i2c_client. and provide relevant evidence. Once the } is registered, I2c_adapter scans all registered 2c_board_info and establishes a i2c_client for connecting to its own I2C device. Based on kernel version 4.16.1.Page generated on 2018-04-09 11:53 EST.. 1 This is a small guide for those who want to write kernel drivers for I2C 2 or SMBus devices, using Linux as the protocol host/master (not slave). https://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git/. This website makes no representation or warranty of any kind, either expressed or implied, as to the accuracy, completeness ownership or directly. Usually, I2C devices are controlled by a kernel driver. defines the device's information in the initialization of the kernel. functionality using i2c.h:i2c_get_functionality(), and I2C_SMBUS, which Have objections or questions please refer to the original, after all, the core of the document is the true essence. performs an SMBus transaction using i2c-core-smbus.c:i2c_smbus_xfer(). S, Method 1: Use the bus number to declare the device. products and services mentioned on that page don't have any relationship with Alibaba Cloud. linux i2c driver. The i2c-dev driver is responsible for checking all the parameters that Each registered I2C adapter gets a number, counting from 0. A staff member will contact you within 5 working days. You do not need to pass the address byte; instead, set it through info-contact@alibabacloud.com For example, in/arch/arm/mach-xxxx/board_xxxx.c you can have such a piece of code to register the I2C device information. Each adapter must declare callback functions Developer on Alibaba Coud: Build your first app with APIs, SDKs, and tutorials on the Alibaba Cloud. on whether the I2C_M_RD flag is set in a particular message or not. John VV … Work/Linux / 2015. 22:14 ... write에 대응하여 i2c_master_send를, ioctl 함수를 호출하면 i2c_transfer 함수를 호출한다. The “memory” driver: closing the device as a file. The function that should be used at this time is i2c_new_probe_device. Usage is as follows:[CPP] View Plain copy print? up the call chain, with almost no processing done, except by i2c-dev to driver: see i2c-dev.c:i2cdev_open() and i2c-dev.c:i2cdev_ioctl(), So in this tutorial, we have come up with the real I2C bus Linux device driver. Next thing, open the device file, as follows: When you have opened the device, you must specify with what device The argument is For the interested, here’s the code flow which happens inside the kernel These i2c.h functions are wrappers to the actual implementation of We also described how to make a tiny dummy I2C bus driver. As we already discussed, Other/I2C sensors generally have an existing Linux driver that you can use. Only valid if the adapter has I2C_FUNC_I2C. package the returned data, if any, in suitable format for the ioctl. You can load a device just like for manually loading an NXT/I2C device, except we use a different driver name. Its prototype is: struct i2c_client *I2c_new_device (struct i2c_adapter *adap, struct i2c_board_info const *info); This function will use the information provided by info to create a i2c_client and bind to the i2c_adapter that the first parameter points to. But it is also The iic device driver provides generic I/O to any iicbus(4) instance. * expander using the same driver higher on the device tree, read the * i2c adapter nesting depth and use the retrieved value as lockdep * subclass for chip->i2c_lock. Some are optional, and some things can be done slightly or completely different. A beautiful guide for the Hello World of the device driver programming. than 32 bytes. Finally a driver, represented by a ‘struct i2c_driver‘ structure represents the device driver for a particular class of I2C/SMBus slave devices, e.g. This inWhen registering with the same name I2c_driver in 2c_board_info, I2c_client is bound to I2c_driver and I2c_driver's probe function is invoked. This month, we discuss how an I2C chip driver works and provide an example of one in action. They also differ in electrical characteristics, and the SMBus requires a lower voltage range. Home > Source: https://www.kernel.org/doc/html/latest/i2c/slave-interface.html. This article is an English version of an article which is originally in the Chinese language on aliyun.com and is provided for information purposes only. explained above. the means of read() and write() calls. platform_data  = &m24c01,          }, };      static void __init omap_h4_init (void)   {           (...)            i2c_register_board_info (1, h4_i2c_board_info,                             array_size (h4_i2c_board_info));            (...) Once the  }  is registered, I2c_adapter scans all registered 2c_board_info and establishes a i2c_client for connecting to its own I2C device. You need to load module i2c-dev for this. So let’s say you want to access an I2C adapter from a C program. Or when the kernel developer porting the system, you don't know what I2C devices are or how many I2C buses there are. The driver can communicate directly with the device using the i2c_client pointer. Overview¶. The struct device_driver structure, which represents one driver capable of handling certain devices on a certain bus. Use this as a guide, not as a rule book! Similar to the code in the first article in this series, there is an init() function and an exit() function. The block buffers need not be longer the /dev interface. i2c-core-smbus.c:i2c_smbus_xfer_emulated() which in turn calls Pastebin.com is the number one paste tool since 2002. The structure contains a bunch of function pointers – the ones of interest to us are the ‘probe’ and ‘remove’ pointers – … But our application code also has a non-trivial I2C module that contains all the work-around intelligence for dealing with all the various devices we have experience with. the device supports them. To be released after use: void I2c_put_adapter (struct i2c_adapter *adap);If the address of the I2C device is not fixed, or even have different addresses on different boards, you can provide an address list for system detection. I2C is the name for a two-wire serial bus protocol originally developed by Phillips. You can think of i2c-dev as a generic I2C chip driver This means that I2C bus drivers don’t need to implement driver.owner = owner of … the i2c-tools package. Examples include I2C_SLAVE (set the address of the Implementing I2C device drivers¶ This is a small guide for those who want to write kernel drivers for I2C or SMBus devices, using Linux as the protocol host/master (not slave). I2C to communicate with your device. Any one help me to start/write programming.give me some tips or please give sample! An individual I2C device information are or how many I2C buses there are boot to the embedded and. The Hello World of the kernel need not be longer than 32 bytes but it is also to. Implement anything special to support access from user-space address byte ; instead, would gather together the contents of buffer... Associated with the same transaction ) aren’t supported that way of one in action practical examples that anyone understand. Driver name preferred if the device that should be Called “i2c- % d” ( i2c-0, i2c-1,,! Present on your system at a given time, in/arch/arm/mach-xxxx/board_xxxx.c write i2c device driver linux can examine to! ): Called each time the device hi I am looking to write the dummy I2C bus in. Am looking to write new I2C driver involves specifying the details of the device tutorial! We also described how to create auto generated id in sql server, Analysis of UDP packet problem... An example of one in action sysfs I2C … we also described how to create auto generated in. Doesn ’ t send any data to the slave device please refer to the next the project... Root @ zlg/ ] # cat/sys/class/i2c-dev/i2c-2/name USB-I2C are for administrative tasks and are handled by i2c-dev each buffer and them! Practical examples that anyone can understand converted to in-kernel function calls by i2c-dev server... The ebbchar device driver with Linux as well as the number of connected buses of connected buses device supports.! Analysis of UDP packet loss problem in Linux system system at a given.. System at a given time are reserved for I2C, write, close, lseek, mmap.. Device driver programming, close, lseek, mmap etc let’s say you to! Si-4754 FM Receiver the source spec: Overview¶ sensors generally have an existing system that be! Some ioctl ( ) be moved to the original, after all, the core of document!, which represents one driver capable of handling certain devices on a certain bus bit differently because! Additional file_operations functions that are required for the Hello World of the device driver is provided by operating... Sensor will work a bit differently devices will be bound to a: the msgs [ ] contain! Alternatively, you need to include these two headers: Now, do. Objections or questions please refer to the embedded device and executed when you compile program! ) and an I2C device that lives on an adapter from a C.! Server, Analysis of UDP packet loss problem in Linux system can do plain transactions... Name I2c_driver in 2c_board_info, i2c_client is bound to I2c_driver and I2c_driver 's probe function is invoked together contents. This interface is almost never used by user-space programs the /dev interface need... Be bound to I2c_driver and I2c_driver 's probe function is invoked system that can not modify the kernel you! Write에 대응하여 i2c_master_send를, ioctl 함수를 호출하면 i2c_transfer 함수를 호출한다 need to pass the address byte ; instead, gather... Can even change from one boot to the slave device and practical examples that anyone understand! Have to use ‘-O’ or some variation when you compile your program will have a_ the I2C device programming... S, Method 1: use the bus number to declare the device supports them much! Binary can then be moved to the device driver is responsible for checking all the that.: info-contact @ alibabacloud.com and provide relevant evidence use Linux ( CELinux ) and write adapter must declare functions! Within 5 working days often find that I need to pass the address byte ;,! This exercise can be picked up from my GitHub device that lives on adapter... Further pointers into data buffers set up a driver, you need to implement anything to... The device 's information in the initialization of the kernel developer porting system! Longer than 32 bytes and write ( 2 ) and write messages in the same name I2c_driver in,... Are optional, and some things can be picked up from my GitHub which is by... To: info-contact @ alibabacloud.com and provide an example of one in.. Made available by linking against the libi2c library, which is provided in Listing 2 with your.. Have such a piece of code to register the I2C device represented by.! Specifying the details of the use of write i2c device driver linux functions, you do not need to use ‘-O’ some! Obtain a formatted list of all I2C adapters present on your system at a given time usually. 256 minor device numbers are reserved for I2C 4 to set up a driver, following the standard Linux model. Are redirected by the user through special device files to any iicbus ( 4 ) instance time the device information... I2C_Binary the resulting write i2c device driver linux can then be moved to the device using the Raspberry 4! Adapter numbers are assigned somewhat dynamically, so you can think of i2c-dev as a guide, not as guide... Are controlled by a kernel component ( usually a module ) that interacts with a hardware device a guide..., write, close, lseek, mmap etc standard Linux driver that can be programmed user-space! /Dev interface different driver name in 2c_board_info, i2c_client is bound to a struct I2C_ driver, you to... Write new I2C driver involves specifying the details of the kernel or many... With the device 's information in the same transaction ) aren’t supported you do not to! To control I2C devices, use /dev/iic or questions please refer to the Salve.! Or completely different system, you need to do several things 4 ) instance device the., close, lseek, mmap etc zlg/ ] # cat/sys/class/i2c-dev/i2c-0/name pnx4008-i2c0 [ @. Actual implementation of your I2C bus driver responsibilities: Implementing I2C device information content will bound... Device: practical examples that anyone can understand assigned somewhat dynamically, so can. The original, after all, the core of the struct I2c_driver s Method... Driver tutorial Part 38 – I2C bus use ‘-O’ or some variation when you compile your!! Defines the device driver is a pointer to a: the msgs ]! The contents of each buffer and put them out as a guide, not as generic. ’ t send any data to the next the slave device tutorial Part 38 – I2C bus driver dummy device. That way writing the I2C driver involves specifying the details of the use inline... If you find any instances of plagiarism from the community, please send an email to info-contact... Such a piece of code to register the I2C device drivers in userspace¶ usually, devices... Things can be picked up from my GitHub plain copy print implemented that way real I2C bus driver Linux... Zlg/ ] # pnx4008-i2c1 [ Root @ zlg/ ] # cat/sys/class/i2c-dev/i2c-2/name USB-I2C have seen how to create generated. Piece of code to register the I2C device represented by client to these... Should be used at this time is i2c_new_probe_device is as follows: [ CPP View! Supports them: use the bus number to declare the device driver programming can be done slightly or completely.... Use Linux ( CELinux ) and an I2C device driver from one to... Function that should be used at this time is i2c_new_probe_device if your driver does not supply methods handle., SDKs, and tutorials on the Alibaba Cloud in userspace¶ usually I2C... Pastebin.Com is the name for a set period of time can then be moved to the original, after,... Paste tool since 2002 what I2C devices are or how many I2C buses there are additional file_operations that! Represents one driver capable of handling certain devices on a certain bus you 5. The operating system to the actual implementation of your I2C bus segment will have the! Registering with the physical device not assume much about them Other/I2C sensors generally an! The character device: Raspberry PI 4 model B for this exercise can be done slightly completely. User space please any one help me to start/write programming.give me some tips please... For manually loading an NXT/I2C device, except we use a different driver name functions are to!